Respan Dataset Explorer

Select one behavior. Every returned turn has one binary label: Present or Absent. Source: final dense boolean release.

5,167,182physical rows
86shards
0.00%qualified row coverage
0.00%qualified cell coverage
Random row JSON API

turns-00033.parquet:1638

3d822b7837fefb837a44572f
turn 1/1gpt-4o-2024-08-06ChineseUnited States947 words
degenerate_repetitionAbsentFinal dense release
USER
Assistant: 
User: System: [{'type': 'text', 'text': "以下是key表示行业,value是行业下的标签列表,分析的时候,请根据评论所在行业的标签体系来进行分析,分析结果中的分类必须是行业限制下的标签:{'书籍': ['耐用性', '舒适度', '便捷性', '实用性', '粘黏性', '安全性', '色牢度', '厚薄度', '显示效果', '打印效果', '讲师服务', '内容资源', '排版', '系统性能', '性能', '折痕'], '养生保健': ['弹性', '溶解性', '保暖性', '吸收度', '透气性', '安全性', '制热效果', '食用效果', '实用性', '耐用性', '色牢度', '牢固度', '便捷性', '厚薄度', '舒适度', '上身效果', '新鲜度', '性能', '力度', '风力风速', '系统性能', '电池续航', '动力类型'], '厨卫家电': ['显示效果', '系统性能', '操作性', '性能', '保暖性', '持久性', '散热效果', '色牢度', '便捷性', '耐用性', '软硬度', '舒适度', '干净度', '制冷效果', '洗涤效果', '实用性', '脱水效果', '连网效果', '保温效果', '灯光效果', '稳定性', '保鲜效果', '承重能力', '清洁效果', '净化效果', '烘干效果', '出雾量', '通话效果', '熨烫效果', '加湿效果', '加热效果', '除湿效果', '防风效果', '出水性', '制热效果', '牢固度', '厚薄度', '内容资源', '内部配置', '机组构成', '屏幕', '避障类型', '水箱类型', '擦地方式', '拍打方式', '护发类型', '温控类型', '风嘴类型', '动力类型', '导轨', '变频定频', '放置方式', '制冷方式', '冷暖类型', '净化类型', '电池类型', '信号', '风力风速', '水压', '吸力', '箱门结构', '内存', '用水量', '传播距离', '电池续航', '能耗', '能效等级', '功率', '拖地类型', '导航技术', '虚拟墙技术', '亮度', '色彩', '清晰度', '色系', '震动', '醒花效果', '遮阳效果', '杀虫效果', '割草效果', '动力类型', '密度', '发芽率', '成活率', '安全性', '新鲜度', '摆放效果', '水分', '植物器官'], '宠物用品': ['吸收度', '透气性', '上身效果', '溶解性', '保暖性', '持久性', '清洁能力', '实用性', '驱虫效果', '便捷性', '药效', '成活率', '消毒效果', '过滤效果', '食用效果', '结团效果', '耐用性', '色牢度', '除味效果', '舒适度', '厚薄度', '牢固度', '软硬度', '营养价值', '安全性', '新鲜度', '适口性', '清洗方式', '清洗难度', '动物'], '家居家纺': ['显示效果', '遮光效果', '灯光效果', '上身效果', '装饰效果', '清洁能力', '制热效果', '防滑效果', '打印效果', '安全性', '透气性', '弹性', '保暖性', '缩水率', '溶解性', '承重能力', '便捷性', '持久性', '粘黏性', '出水性', '厚重感', '密封性', '立体感', '水冲力', '耐用性', '实用性', '舒适度', '软硬度', '厚薄度', '色牢度', '牢固度', '柔和度', '蓬松度', '吸收度', '亮度', '光照范围', '清洗难度', '内部配置', '灯光配置', '系统性能', '电池续航', '功率', '风力风速', '挡位', '能耗', '起球', '色差', '缩水', '褶皱'], '彩妆护肤': ['吸收度', '透气性', '持久性', '美白效果', '丰胸效果', '抗衰效果', '抗氧效果', '收毛孔效果', '遮瑕效果', '祛痘祛印效果', '隔离效果', '补水保湿效果', '防晒效果', '纤体效果', '紧致效果', '祛斑淡斑效果', '去黑头效果', '控油效果', '清洁效果', '色牢度', '密封性', '溶解性', '安全性', '便捷性'], '户外运动': ['安全性', '防水性', '稳定性', '粘黏性', '漏气', '服帖性', '便捷性', '透气性', '充气', '吸水性', '软硬度', '控球性', '实用性', '磁性', '保暖性', '耐用性', '牢固度', '弹性', '厚薄度', '色牢度', '圆度', '亮度', '球感', '拉力', '承重能力', '打印效果', '清洗效果', '舒适度', '飞行稳定性', '防滑效果', '减震效果', '上身效果', '骑行感受', '速干效果', '变速效果', '显示效果', '能耗', '性能', '动力类型', '电池续航', '系统性能', '轮子种类', '灯光配置', '刹车', '腰力', '色差'], '手机数码': ['显示效果', '拍照效果', '散热效果', '佩戴效果', '通话效果', '防指纹效果', '运行速度', '充电速度', '音效', '风力风速', '防窥效果', '指纹解锁', '打印效果', '操作性', '便捷性', '耐用性', '实用性', '保护性', '牢固度', '色牢度', '清晰度', '粘黏性', '灵敏度', '贴合度', '匹配度', '亮度', '软硬度', '舒适度', '厚薄度', '安全性', '能耗', '系统性能', '性能', '电池续航', '内部配置', '灯光配置', '按键', '孔位', '分辨率', '像素', '自带软件', '内存', '信号', '屏幕', '发热'], '日用百货': ['制热效果', '隔音效果', '驱蚊效果', '祛痘祛印效果', '清洁能力', '投影效果', '上身效果', '防护效果', '切割效果', '控油效果', '防粘效果', '补水保湿效果', '隔热效果', '散热效果', '美白效果', '止痒效果', '复印效果', '收纳效果', '过滤效果', '碎纸效果', '保温效果', '显示效果', '工作效率', '打印效果', '溶解性', '承重能力', '便捷性', '吸收度', '弹性', '操作性', '持久性', '安全性', '厚薄度', '刺激感', '透气性', '实用性', '保暖性', '舒适度', '清晰度', '锋利度', '耐用性', '密封性', '泡沫量', '亮度', '色牢度', '软硬度', '出水性', '浓稠度', '牢固度', '粘黏性', '清洗难度', '打印速度', '清洁难度', '系统性能', '性能', '能耗', '运作速度', '动力类型', '电池续航', '功率', '火力', '风力风速', '分辨率', '灯光配置', '清洁方式', '刷头类型', '内部结构', '包装形式', '不适感', '计量误差'], '母婴用品': ['软硬度', '吸收度', '透气性', '厚薄度', '安全性', '柔软度', '新鲜度', '便捷性', '上身效果', '弹性', '溶解性', '持久性', '保暖性', '食用效果', '补水保湿效果', '粘黏性', '色牢度', '实用性', '干净度', '冲泡效果', '贴身性', '舒适度', '耐用性', '控油效果', '浓稠度', '吸力', '营养价值', '饱腹感', '牢固度', '闭合方式', '电池续航', '性能'], '汽车': ['包装', '风格', '购买意向', '规格', '价格', '卖家服务', '明星红人', '品牌', '品质', '使用注意事项', '用户痛点', '外观', '物流', '性价比', '用户需求', '保修期', '维护保养', '颜色', '赠品', '正品', '整体感受', '质量', '科技', '技术', '专利', '概念亮点', '设计', '工艺', '声音', '产地', '品类', '异味', '香调', '香型', '气味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '款式', '版型', '图案印花', '面料材质', '填充物及含量', '安全性', '便捷性', '操控性', '顿挫感', '减震效果', '驾驶视野', '驾驶体验', '精确度', '科技感', '牢固度', '软硬度', '色牢度', '实用性', '舒适度', '稳定性', '显示效果', '音响效果', '隔音效果', '密封性', '耐用性', '安全配置', '变速箱类型', '玻璃', '后视镜', '车窗后视镜', '车辆配置', '车身车型', '车体结构', '灯光配置', '电池类型', '电动机类型', '电机布局方式', '操控配置', '多媒体配置', '辅助配置', '制动器类型', '座椅配置', '防盗配置', '外部配置', '整车配置', '转向助力类型', '4s店服务', '内部配置', '动力系统', '空间容量', '空调冰箱', '防盗系统', '挂挡换挡', '控制按键', '能源类型', '前悬架类型', '驱动电机数', '驱动形式', '四驱形式', '智驾维度', '智能辅助', '智能硬件', '智能影像', '安全装备', '驻车制动', '导航', '油耗', '能耗', '配件', '仪表盘', '性能', '系统性能', '制动性能', '转弯性能', '动力性能', '车联功能', '传动性能', '电池续航', '雷达功能', '不良反应', '配置', '功能功效'], '玩具': ['便捷性', '安全性', '持久性', '实用性', '舒适度', '承重能力', '耐用性', '色牢度', '稳定性', '软硬度', '粘黏性', '弹性', '牢固度', '厚薄度', '显示效果', '骑行感受', '打印效果', '性能', '系统性能', '灯光配置', '电池续航', '内容资源', '磁力'], '珠宝配饰': ['佩戴效果', '厚薄度', '透气性', '弹性', '能耗', '软硬度', '打印效果', '性能', '色牢度', '显示效果', '变色效果', '遮阳效果', '便捷性', '实用性', '舒适度', '偏光效果', '安全性', '操作性', '耐用性', '清晰度', '牢固度', '防水性', '防蓝光效果', '粘黏性', '防辐射效果', '系统性能', '内部配置', '度数', '走时', '校准'], '男装女装': ['透气性', '软硬度', '弹性', '厚薄度', '吸收度', '保暖性', '安全性', '便捷性', '色泽度', '色牢度', '耐穿性', '实用性', '上身效果', '防晒效果', '遮阳效果', '佩戴效果', '聚拢效果', '破洞', '缩水', '线头', '起球', '色差', '钢圈类型', '海绵垫', '证书'], '礼品文娱': ['上身效果', '灯光效果', '打印效果', '速干效果', '显示效果', '便捷性', '安全性', '耐用性', '舒适度', '实用性', '牢固度', '色牢度', '弹性', '软硬度', '厚薄度', '粘黏性', '亮度', '流畅度', '系统性能', '灯光配置', '内部结构', '内容资源', '排版', '漏气', '折痕'], '美食饮品': ['烹饪效果', '软硬度', '酒精度数', '新鲜度', '发酵程度', '持久性', '溶解性', '厚薄度', '泡发性', '辣度', '咸度', '成熟度', '耐泡度', '甜度', '黏粘性', '冲泡效果', '饱腹感', '便捷性', '醉酒性', '醒酒时间', '烹饪时间', '色牢度', '实用性', '干净度', '食用效果', '肉质', '胶质', '酒质', '粉质', '水分', '含油量', '年份'], '花鸟绿植': ['功能功效', '醒花效果', '舒适度', '遮阳效果', '杀虫效果', '割草效果', '动力', '性能', '密度', '软硬度', '厚薄度', '发芽率', '成活率', '安全性', '便捷性', '实用性', '新鲜度', '牢固度', '色牢度', '耐用性', '摆放效果', '水分', '植物器官'], '通用': ['保质期', '包装', '产地', '风格', '概念亮点', '工艺', '购买意向', '规格', '价格', '技术', '科技', '卖家服务', '明星红人', '品类', '品牌', '品质', '声音', '设计', '使用注意事项', '外观', '物流', '性价比', '颜色', '用户痛点', '用户需求', '赠品', '正品', '整体感受', '质量', '专利', '用户疑问', '节日', '功能功效', '配置', '不良反应', '异味', '香调', '香型', '气味', '味道', '口味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '妆感', '妆容', '口感', '成分配料', '成分特点', '款式', '版型', '图案印花', '面料材质', '填充物及含量'], '鞋帽箱包': ['硬度', '厚薄度', '软硬度', '吸收度', '弹性', '透气性', '舒适度', '保暖性', '便捷性', '色牢度', '实用性', '密封性', '牢固度', '上身效果', '性能', '闭合方式', '是否带锁', '内部结构', '拉杆种类', '筒高', '鞋型', '隔层', '轮子种类', '鞋底鞋跟', '拉链', '色差']}"}, {'type': 'text', 'text': '请分析并拆分这句话中的出现的每个关键词以及对应的关键词分类、关键词子句、关键词,关键词舆情。关键词碰到标点符号要拆开,不要总结,只做抽取。请按案例格式输出'}]
User: [{'type': 'text', 'text': "案例:'自从用了这个粉底,上妆再也不卡粉了,流汗也不脱妆,非常好用"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'功能功效', '关键词子句':'上妆再也不卡粉了','关键词':'不卡粉','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'流汗也不脱妆','关键词':'不脱妆','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'非常好用','关键词':'好用','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'这个产品好不好用'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'这个产品好不好用','关键词':'好不好用','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': "案例:'他家的口红很持久,而且重点是不沾杯,涂起来也非常丝滑,而且含有极地保湿因子,同学极力推荐,非常nice'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'持久度','关键词子句':'他家的口红很持久','关键词':'持久','关键词舆情':'正面'},{'关键词分类':'特性','关键词子句':'而且重点是不沾杯','关键词':'不沾杯','关键词舆情':'正面'},{'关键词分类':'使用感受','关键词子句':'涂起来也非常丝滑','关键词':'丝滑','关键词舆情':'正面'},{'关键词分类':'成分','关键词子句':'而且含有极地保湿因子','关键词':'极地保湿因子','关键词舆情':'正面'},{'关键词分类':'推荐度','关键词子句':'同学极力推荐','关键词':'极力推荐','关键词舆情':'正面'},{'关键词分类':'总体评价','关键词子句':'非常nice','关键词':'nice','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'服务态度:好 性价比:高 包装:好 物流速度:快 发货速度:快'"}]
Assistant: [{'type': 'text', 'text': "[    {'关键词分类':'卖家服务','关键词子句':'服务态度:好','关键词':'服务态度','关键词舆情':'正面'},{'关键词分类':'性价比','关键词子句':'性价比:高','关键词':'性价比','关键词舆情':'正面'},{'关键词分类':'包装','关键词子句':'包装:好','关键词':'包装','关键词舆情':'正面'},{'关键词分类':'物流','关键词子句':'物流速度:快','关键词':'物流速度','关键词舆情':'正面'},{'关键词分类':'卖家服务','关键词子句':'发货速度:快','关键词':'发货速度','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': '这段时间最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下啊,给女儿在学校用'}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'我最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下','关键词':'好用的面霜','关键词舆情':'中性'},{'关键词分类':'用户痛点', '关键词子句':'我最近长了一脸痘痘','关键词':'一脸痘痘','关键词舆情':'负面'},{'关键词分类':'人群', '关键词子句':'给女儿在学校用','关键词':'女儿','关键词舆情':'中性'},{'关键词分类':'场景', '关键词子句':'给女儿在学校用','关键词':'学校','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': '男款西装的挺括功能不够理想,穿起来没有那种笔挺的感觉,显得很没精神。'}]
Assistant:
Assistant:
ASSISTANT
```json
[
    {
        "关键词分类": "服装性能",
        "关键词子句": "男款西装的挺括功能不够理想",
        "关键词": "挺括功能不够理想",
        "关键词舆情": "负面"
    },
    {
        "关键词分类": "整体感受",
        "关键词子句": "穿起来没有那种笔挺的感觉",
        "关键词": "没有笔挺的感觉",
        "关键词舆情": "负面"
    },
    {
        "关键词分类": "整体感受",
        "关键词子句": "穿起来显得很没精神",
        "关键词": "没精神",
        "关键词舆情": "负面"
    }
]
```

turns-00033.parquet:1639

8cd05482e0e694b9b65c1e9d
turn 1/1gpt-4o-2024-08-06ChineseUnited States933 words
degenerate_repetitionAbsentFinal dense release
USER
Assistant: 
User: System: [{'type': 'text', 'text': "以下是key表示行业,value是行业下的标签列表,分析的时候,请根据评论所在行业的标签体系来进行分析,分析结果中的分类必须是行业限制下的标签:{'书籍': ['耐用性', '舒适度', '便捷性', '实用性', '粘黏性', '安全性', '色牢度', '厚薄度', '显示效果', '打印效果', '讲师服务', '内容资源', '排版', '系统性能', '性能', '折痕'], '养生保健': ['弹性', '溶解性', '保暖性', '吸收度', '透气性', '安全性', '制热效果', '食用效果', '实用性', '耐用性', '色牢度', '牢固度', '便捷性', '厚薄度', '舒适度', '上身效果', '新鲜度', '性能', '力度', '风力风速', '系统性能', '电池续航', '动力类型'], '厨卫家电': ['显示效果', '系统性能', '操作性', '性能', '保暖性', '持久性', '散热效果', '色牢度', '便捷性', '耐用性', '软硬度', '舒适度', '干净度', '制冷效果', '洗涤效果', '实用性', '脱水效果', '连网效果', '保温效果', '灯光效果', '稳定性', '保鲜效果', '承重能力', '清洁效果', '净化效果', '烘干效果', '出雾量', '通话效果', '熨烫效果', '加湿效果', '加热效果', '除湿效果', '防风效果', '出水性', '制热效果', '牢固度', '厚薄度', '内容资源', '内部配置', '机组构成', '屏幕', '避障类型', '水箱类型', '擦地方式', '拍打方式', '护发类型', '温控类型', '风嘴类型', '动力类型', '导轨', '变频定频', '放置方式', '制冷方式', '冷暖类型', '净化类型', '电池类型', '信号', '风力风速', '水压', '吸力', '箱门结构', '内存', '用水量', '传播距离', '电池续航', '能耗', '能效等级', '功率', '拖地类型', '导航技术', '虚拟墙技术', '亮度', '色彩', '清晰度', '色系', '震动', '醒花效果', '遮阳效果', '杀虫效果', '割草效果', '动力类型', '密度', '发芽率', '成活率', '安全性', '新鲜度', '摆放效果', '水分', '植物器官'], '宠物用品': ['吸收度', '透气性', '上身效果', '溶解性', '保暖性', '持久性', '清洁能力', '实用性', '驱虫效果', '便捷性', '药效', '成活率', '消毒效果', '过滤效果', '食用效果', '结团效果', '耐用性', '色牢度', '除味效果', '舒适度', '厚薄度', '牢固度', '软硬度', '营养价值', '安全性', '新鲜度', '适口性', '清洗方式', '清洗难度', '动物'], '家居家纺': ['显示效果', '遮光效果', '灯光效果', '上身效果', '装饰效果', '清洁能力', '制热效果', '防滑效果', '打印效果', '安全性', '透气性', '弹性', '保暖性', '缩水率', '溶解性', '承重能力', '便捷性', '持久性', '粘黏性', '出水性', '厚重感', '密封性', '立体感', '水冲力', '耐用性', '实用性', '舒适度', '软硬度', '厚薄度', '色牢度', '牢固度', '柔和度', '蓬松度', '吸收度', '亮度', '光照范围', '清洗难度', '内部配置', '灯光配置', '系统性能', '电池续航', '功率', '风力风速', '挡位', '能耗', '起球', '色差', '缩水', '褶皱'], '彩妆护肤': ['吸收度', '透气性', '持久性', '美白效果', '丰胸效果', '抗衰效果', '抗氧效果', '收毛孔效果', '遮瑕效果', '祛痘祛印效果', '隔离效果', '补水保湿效果', '防晒效果', '纤体效果', '紧致效果', '祛斑淡斑效果', '去黑头效果', '控油效果', '清洁效果', '色牢度', '密封性', '溶解性', '安全性', '便捷性'], '户外运动': ['安全性', '防水性', '稳定性', '粘黏性', '漏气', '服帖性', '便捷性', '透气性', '充气', '吸水性', '软硬度', '控球性', '实用性', '磁性', '保暖性', '耐用性', '牢固度', '弹性', '厚薄度', '色牢度', '圆度', '亮度', '球感', '拉力', '承重能力', '打印效果', '清洗效果', '舒适度', '飞行稳定性', '防滑效果', '减震效果', '上身效果', '骑行感受', '速干效果', '变速效果', '显示效果', '能耗', '性能', '动力类型', '电池续航', '系统性能', '轮子种类', '灯光配置', '刹车', '腰力', '色差'], '手机数码': ['显示效果', '拍照效果', '散热效果', '佩戴效果', '通话效果', '防指纹效果', '运行速度', '充电速度', '音效', '风力风速', '防窥效果', '指纹解锁', '打印效果', '操作性', '便捷性', '耐用性', '实用性', '保护性', '牢固度', '色牢度', '清晰度', '粘黏性', '灵敏度', '贴合度', '匹配度', '亮度', '软硬度', '舒适度', '厚薄度', '安全性', '能耗', '系统性能', '性能', '电池续航', '内部配置', '灯光配置', '按键', '孔位', '分辨率', '像素', '自带软件', '内存', '信号', '屏幕', '发热'], '日用百货': ['制热效果', '隔音效果', '驱蚊效果', '祛痘祛印效果', '清洁能力', '投影效果', '上身效果', '防护效果', '切割效果', '控油效果', '防粘效果', '补水保湿效果', '隔热效果', '散热效果', '美白效果', '止痒效果', '复印效果', '收纳效果', '过滤效果', '碎纸效果', '保温效果', '显示效果', '工作效率', '打印效果', '溶解性', '承重能力', '便捷性', '吸收度', '弹性', '操作性', '持久性', '安全性', '厚薄度', '刺激感', '透气性', '实用性', '保暖性', '舒适度', '清晰度', '锋利度', '耐用性', '密封性', '泡沫量', '亮度', '色牢度', '软硬度', '出水性', '浓稠度', '牢固度', '粘黏性', '清洗难度', '打印速度', '清洁难度', '系统性能', '性能', '能耗', '运作速度', '动力类型', '电池续航', '功率', '火力', '风力风速', '分辨率', '灯光配置', '清洁方式', '刷头类型', '内部结构', '包装形式', '不适感', '计量误差'], '母婴用品': ['软硬度', '吸收度', '透气性', '厚薄度', '安全性', '柔软度', '新鲜度', '便捷性', '上身效果', '弹性', '溶解性', '持久性', '保暖性', '食用效果', '补水保湿效果', '粘黏性', '色牢度', '实用性', '干净度', '冲泡效果', '贴身性', '舒适度', '耐用性', '控油效果', '浓稠度', '吸力', '营养价值', '饱腹感', '牢固度', '闭合方式', '电池续航', '性能'], '汽车': ['包装', '风格', '购买意向', '规格', '价格', '卖家服务', '明星红人', '品牌', '品质', '使用注意事项', '用户痛点', '外观', '物流', '性价比', '用户需求', '保修期', '维护保养', '颜色', '赠品', '正品', '整体感受', '质量', '科技', '技术', '专利', '概念亮点', '设计', '工艺', '声音', '产地', '品类', '异味', '香调', '香型', '气味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '款式', '版型', '图案印花', '面料材质', '填充物及含量', '安全性', '便捷性', '操控性', '顿挫感', '减震效果', '驾驶视野', '驾驶体验', '精确度', '科技感', '牢固度', '软硬度', '色牢度', '实用性', '舒适度', '稳定性', '显示效果', '音响效果', '隔音效果', '密封性', '耐用性', '安全配置', '变速箱类型', '玻璃', '后视镜', '车窗后视镜', '车辆配置', '车身车型', '车体结构', '灯光配置', '电池类型', '电动机类型', '电机布局方式', '操控配置', '多媒体配置', '辅助配置', '制动器类型', '座椅配置', '防盗配置', '外部配置', '整车配置', '转向助力类型', '4s店服务', '内部配置', '动力系统', '空间容量', '空调冰箱', '防盗系统', '挂挡换挡', '控制按键', '能源类型', '前悬架类型', '驱动电机数', '驱动形式', '四驱形式', '智驾维度', '智能辅助', '智能硬件', '智能影像', '安全装备', '驻车制动', '导航', '油耗', '能耗', '配件', '仪表盘', '性能', '系统性能', '制动性能', '转弯性能', '动力性能', '车联功能', '传动性能', '电池续航', '雷达功能', '不良反应', '配置', '功能功效'], '玩具': ['便捷性', '安全性', '持久性', '实用性', '舒适度', '承重能力', '耐用性', '色牢度', '稳定性', '软硬度', '粘黏性', '弹性', '牢固度', '厚薄度', '显示效果', '骑行感受', '打印效果', '性能', '系统性能', '灯光配置', '电池续航', '内容资源', '磁力'], '珠宝配饰': ['佩戴效果', '厚薄度', '透气性', '弹性', '能耗', '软硬度', '打印效果', '性能', '色牢度', '显示效果', '变色效果', '遮阳效果', '便捷性', '实用性', '舒适度', '偏光效果', '安全性', '操作性', '耐用性', '清晰度', '牢固度', '防水性', '防蓝光效果', '粘黏性', '防辐射效果', '系统性能', '内部配置', '度数', '走时', '校准'], '男装女装': ['透气性', '软硬度', '弹性', '厚薄度', '吸收度', '保暖性', '安全性', '便捷性', '色泽度', '色牢度', '耐穿性', '实用性', '上身效果', '防晒效果', '遮阳效果', '佩戴效果', '聚拢效果', '破洞', '缩水', '线头', '起球', '色差', '钢圈类型', '海绵垫', '证书'], '礼品文娱': ['上身效果', '灯光效果', '打印效果', '速干效果', '显示效果', '便捷性', '安全性', '耐用性', '舒适度', '实用性', '牢固度', '色牢度', '弹性', '软硬度', '厚薄度', '粘黏性', '亮度', '流畅度', '系统性能', '灯光配置', '内部结构', '内容资源', '排版', '漏气', '折痕'], '美食饮品': ['烹饪效果', '软硬度', '酒精度数', '新鲜度', '发酵程度', '持久性', '溶解性', '厚薄度', '泡发性', '辣度', '咸度', '成熟度', '耐泡度', '甜度', '黏粘性', '冲泡效果', '饱腹感', '便捷性', '醉酒性', '醒酒时间', '烹饪时间', '色牢度', '实用性', '干净度', '食用效果', '肉质', '胶质', '酒质', '粉质', '水分', '含油量', '年份'], '花鸟绿植': ['功能功效', '醒花效果', '舒适度', '遮阳效果', '杀虫效果', '割草效果', '动力', '性能', '密度', '软硬度', '厚薄度', '发芽率', '成活率', '安全性', '便捷性', '实用性', '新鲜度', '牢固度', '色牢度', '耐用性', '摆放效果', '水分', '植物器官'], '通用': ['保质期', '包装', '产地', '风格', '概念亮点', '工艺', '购买意向', '规格', '价格', '技术', '科技', '卖家服务', '明星红人', '品类', '品牌', '品质', '声音', '设计', '使用注意事项', '外观', '物流', '性价比', '颜色', '用户痛点', '用户需求', '赠品', '正品', '整体感受', '质量', '专利', '用户疑问', '节日', '功能功效', '配置', '不良反应', '异味', '香调', '香型', '气味', '味道', '口味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '妆感', '妆容', '口感', '成分配料', '成分特点', '款式', '版型', '图案印花', '面料材质', '填充物及含量'], '鞋帽箱包': ['硬度', '厚薄度', '软硬度', '吸收度', '弹性', '透气性', '舒适度', '保暖性', '便捷性', '色牢度', '实用性', '密封性', '牢固度', '上身效果', '性能', '闭合方式', '是否带锁', '内部结构', '拉杆种类', '筒高', '鞋型', '隔层', '轮子种类', '鞋底鞋跟', '拉链', '色差']}"}, {'type': 'text', 'text': '请分析并拆分这句话中的出现的每个关键词以及对应的关键词分类、关键词子句、关键词,关键词舆情。关键词碰到标点符号要拆开,不要总结,只做抽取。请按案例格式输出'}]
User: [{'type': 'text', 'text': "案例:'自从用了这个粉底,上妆再也不卡粉了,流汗也不脱妆,非常好用"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'功能功效', '关键词子句':'上妆再也不卡粉了','关键词':'不卡粉','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'流汗也不脱妆','关键词':'不脱妆','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'非常好用','关键词':'好用','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'这个产品好不好用'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'这个产品好不好用','关键词':'好不好用','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': "案例:'他家的口红很持久,而且重点是不沾杯,涂起来也非常丝滑,而且含有极地保湿因子,同学极力推荐,非常nice'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'持久度','关键词子句':'他家的口红很持久','关键词':'持久','关键词舆情':'正面'},{'关键词分类':'特性','关键词子句':'而且重点是不沾杯','关键词':'不沾杯','关键词舆情':'正面'},{'关键词分类':'使用感受','关键词子句':'涂起来也非常丝滑','关键词':'丝滑','关键词舆情':'正面'},{'关键词分类':'成分','关键词子句':'而且含有极地保湿因子','关键词':'极地保湿因子','关键词舆情':'正面'},{'关键词分类':'推荐度','关键词子句':'同学极力推荐','关键词':'极力推荐','关键词舆情':'正面'},{'关键词分类':'总体评价','关键词子句':'非常nice','关键词':'nice','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'服务态度:好 性价比:高 包装:好 物流速度:快 发货速度:快'"}]
Assistant: [{'type': 'text', 'text': "[    {'关键词分类':'卖家服务','关键词子句':'服务态度:好','关键词':'服务态度','关键词舆情':'正面'},{'关键词分类':'性价比','关键词子句':'性价比:高','关键词':'性价比','关键词舆情':'正面'},{'关键词分类':'包装','关键词子句':'包装:好','关键词':'包装','关键词舆情':'正面'},{'关键词分类':'物流','关键词子句':'物流速度:快','关键词':'物流速度','关键词舆情':'正面'},{'关键词分类':'卖家服务','关键词子句':'发货速度:快','关键词':'发货速度','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': '这段时间最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下啊,给女儿在学校用'}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'我最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下','关键词':'好用的面霜','关键词舆情':'中性'},{'关键词分类':'用户痛点', '关键词子句':'我最近长了一脸痘痘','关键词':'一脸痘痘','关键词舆情':'负面'},{'关键词分类':'人群', '关键词子句':'给女儿在学校用','关键词':'女儿','关键词舆情':'中性'},{'关键词分类':'场景', '关键词子句':'给女儿在学校用','关键词':'学校','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': '厨卫家电的净化功能名不副实,说是有灰尘净化类型为滤网过滤。可是滤网感觉很粗糙,在厨房使用了一段时间后,根本没拦住多少灰尘,非常不满意。'}]
Assistant:
Assistant:
ASSISTANT
[{'关键词分类':'净化效果', '关键词子句':'净化功能名不副实', '关键词':'名不副实', '关键词舆情':'负面'},
 {'关键词分类':'净化效果', '关键词子句':'说是有灰尘净化类型为滤网过滤', '关键词':'滤网过滤', '关键词舆情':'中性'},
 {'关键词分类':'内部配置', '关键词子句':'滤网感觉很粗糙', '关键词':'滤网粗糙', '关键词舆情':'负面'},
 {'关键词分类':'实用性', '关键词子句':'在厨房使用了一段时间后,根本没拦住多少灰尘', '关键词':'拦不住灰尘', '关键词舆情':'负面'},
 {'关键词分类':'整体感受', '关键词子句':'非常不满意', '关键词':'不满意', '关键词舆情':'负面'}]

turns-00033.parquet:1640

0dbf59f95bf9baadf4189f8b
turn 1/1gpt-4o-2024-08-06ChineseUnited States947 words
degenerate_repetitionAbsentFinal dense release
USER
Assistant: 
User: System: [{'type': 'text', 'text': "以下是key表示行业,value是行业下的标签列表,分析的时候,请根据评论所在行业的标签体系来进行分析,分析结果中的分类必须是行业限制下的标签:{'书籍': ['耐用性', '舒适度', '便捷性', '实用性', '粘黏性', '安全性', '色牢度', '厚薄度', '显示效果', '打印效果', '讲师服务', '内容资源', '排版', '系统性能', '性能', '折痕'], '养生保健': ['弹性', '溶解性', '保暖性', '吸收度', '透气性', '安全性', '制热效果', '食用效果', '实用性', '耐用性', '色牢度', '牢固度', '便捷性', '厚薄度', '舒适度', '上身效果', '新鲜度', '性能', '力度', '风力风速', '系统性能', '电池续航', '动力类型'], '厨卫家电': ['显示效果', '系统性能', '操作性', '性能', '保暖性', '持久性', '散热效果', '色牢度', '便捷性', '耐用性', '软硬度', '舒适度', '干净度', '制冷效果', '洗涤效果', '实用性', '脱水效果', '连网效果', '保温效果', '灯光效果', '稳定性', '保鲜效果', '承重能力', '清洁效果', '净化效果', '烘干效果', '出雾量', '通话效果', '熨烫效果', '加湿效果', '加热效果', '除湿效果', '防风效果', '出水性', '制热效果', '牢固度', '厚薄度', '内容资源', '内部配置', '机组构成', '屏幕', '避障类型', '水箱类型', '擦地方式', '拍打方式', '护发类型', '温控类型', '风嘴类型', '动力类型', '导轨', '变频定频', '放置方式', '制冷方式', '冷暖类型', '净化类型', '电池类型', '信号', '风力风速', '水压', '吸力', '箱门结构', '内存', '用水量', '传播距离', '电池续航', '能耗', '能效等级', '功率', '拖地类型', '导航技术', '虚拟墙技术', '亮度', '色彩', '清晰度', '色系', '震动', '醒花效果', '遮阳效果', '杀虫效果', '割草效果', '动力类型', '密度', '发芽率', '成活率', '安全性', '新鲜度', '摆放效果', '水分', '植物器官'], '宠物用品': ['吸收度', '透气性', '上身效果', '溶解性', '保暖性', '持久性', '清洁能力', '实用性', '驱虫效果', '便捷性', '药效', '成活率', '消毒效果', '过滤效果', '食用效果', '结团效果', '耐用性', '色牢度', '除味效果', '舒适度', '厚薄度', '牢固度', '软硬度', '营养价值', '安全性', '新鲜度', '适口性', '清洗方式', '清洗难度', '动物'], '家居家纺': ['显示效果', '遮光效果', '灯光效果', '上身效果', '装饰效果', '清洁能力', '制热效果', '防滑效果', '打印效果', '安全性', '透气性', '弹性', '保暖性', '缩水率', '溶解性', '承重能力', '便捷性', '持久性', '粘黏性', '出水性', '厚重感', '密封性', '立体感', '水冲力', '耐用性', '实用性', '舒适度', '软硬度', '厚薄度', '色牢度', '牢固度', '柔和度', '蓬松度', '吸收度', '亮度', '光照范围', '清洗难度', '内部配置', '灯光配置', '系统性能', '电池续航', '功率', '风力风速', '挡位', '能耗', '起球', '色差', '缩水', '褶皱'], '彩妆护肤': ['吸收度', '透气性', '持久性', '美白效果', '丰胸效果', '抗衰效果', '抗氧效果', '收毛孔效果', '遮瑕效果', '祛痘祛印效果', '隔离效果', '补水保湿效果', '防晒效果', '纤体效果', '紧致效果', '祛斑淡斑效果', '去黑头效果', '控油效果', '清洁效果', '色牢度', '密封性', '溶解性', '安全性', '便捷性'], '户外运动': ['安全性', '防水性', '稳定性', '粘黏性', '漏气', '服帖性', '便捷性', '透气性', '充气', '吸水性', '软硬度', '控球性', '实用性', '磁性', '保暖性', '耐用性', '牢固度', '弹性', '厚薄度', '色牢度', '圆度', '亮度', '球感', '拉力', '承重能力', '打印效果', '清洗效果', '舒适度', '飞行稳定性', '防滑效果', '减震效果', '上身效果', '骑行感受', '速干效果', '变速效果', '显示效果', '能耗', '性能', '动力类型', '电池续航', '系统性能', '轮子种类', '灯光配置', '刹车', '腰力', '色差'], '手机数码': ['显示效果', '拍照效果', '散热效果', '佩戴效果', '通话效果', '防指纹效果', '运行速度', '充电速度', '音效', '风力风速', '防窥效果', '指纹解锁', '打印效果', '操作性', '便捷性', '耐用性', '实用性', '保护性', '牢固度', '色牢度', '清晰度', '粘黏性', '灵敏度', '贴合度', '匹配度', '亮度', '软硬度', '舒适度', '厚薄度', '安全性', '能耗', '系统性能', '性能', '电池续航', '内部配置', '灯光配置', '按键', '孔位', '分辨率', '像素', '自带软件', '内存', '信号', '屏幕', '发热'], '日用百货': ['制热效果', '隔音效果', '驱蚊效果', '祛痘祛印效果', '清洁能力', '投影效果', '上身效果', '防护效果', '切割效果', '控油效果', '防粘效果', '补水保湿效果', '隔热效果', '散热效果', '美白效果', '止痒效果', '复印效果', '收纳效果', '过滤效果', '碎纸效果', '保温效果', '显示效果', '工作效率', '打印效果', '溶解性', '承重能力', '便捷性', '吸收度', '弹性', '操作性', '持久性', '安全性', '厚薄度', '刺激感', '透气性', '实用性', '保暖性', '舒适度', '清晰度', '锋利度', '耐用性', '密封性', '泡沫量', '亮度', '色牢度', '软硬度', '出水性', '浓稠度', '牢固度', '粘黏性', '清洗难度', '打印速度', '清洁难度', '系统性能', '性能', '能耗', '运作速度', '动力类型', '电池续航', '功率', '火力', '风力风速', '分辨率', '灯光配置', '清洁方式', '刷头类型', '内部结构', '包装形式', '不适感', '计量误差'], '母婴用品': ['软硬度', '吸收度', '透气性', '厚薄度', '安全性', '柔软度', '新鲜度', '便捷性', '上身效果', '弹性', '溶解性', '持久性', '保暖性', '食用效果', '补水保湿效果', '粘黏性', '色牢度', '实用性', '干净度', '冲泡效果', '贴身性', '舒适度', '耐用性', '控油效果', '浓稠度', '吸力', '营养价值', '饱腹感', '牢固度', '闭合方式', '电池续航', '性能'], '汽车': ['包装', '风格', '购买意向', '规格', '价格', '卖家服务', '明星红人', '品牌', '品质', '使用注意事项', '用户痛点', '外观', '物流', '性价比', '用户需求', '保修期', '维护保养', '颜色', '赠品', '正品', '整体感受', '质量', '科技', '技术', '专利', '概念亮点', '设计', '工艺', '声音', '产地', '品类', '异味', '香调', '香型', '气味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '款式', '版型', '图案印花', '面料材质', '填充物及含量', '安全性', '便捷性', '操控性', '顿挫感', '减震效果', '驾驶视野', '驾驶体验', '精确度', '科技感', '牢固度', '软硬度', '色牢度', '实用性', '舒适度', '稳定性', '显示效果', '音响效果', '隔音效果', '密封性', '耐用性', '安全配置', '变速箱类型', '玻璃', '后视镜', '车窗后视镜', '车辆配置', '车身车型', '车体结构', '灯光配置', '电池类型', '电动机类型', '电机布局方式', '操控配置', '多媒体配置', '辅助配置', '制动器类型', '座椅配置', '防盗配置', '外部配置', '整车配置', '转向助力类型', '4s店服务', '内部配置', '动力系统', '空间容量', '空调冰箱', '防盗系统', '挂挡换挡', '控制按键', '能源类型', '前悬架类型', '驱动电机数', '驱动形式', '四驱形式', '智驾维度', '智能辅助', '智能硬件', '智能影像', '安全装备', '驻车制动', '导航', '油耗', '能耗', '配件', '仪表盘', '性能', '系统性能', '制动性能', '转弯性能', '动力性能', '车联功能', '传动性能', '电池续航', '雷达功能', '不良反应', '配置', '功能功效'], '玩具': ['便捷性', '安全性', '持久性', '实用性', '舒适度', '承重能力', '耐用性', '色牢度', '稳定性', '软硬度', '粘黏性', '弹性', '牢固度', '厚薄度', '显示效果', '骑行感受', '打印效果', '性能', '系统性能', '灯光配置', '电池续航', '内容资源', '磁力'], '珠宝配饰': ['佩戴效果', '厚薄度', '透气性', '弹性', '能耗', '软硬度', '打印效果', '性能', '色牢度', '显示效果', '变色效果', '遮阳效果', '便捷性', '实用性', '舒适度', '偏光效果', '安全性', '操作性', '耐用性', '清晰度', '牢固度', '防水性', '防蓝光效果', '粘黏性', '防辐射效果', '系统性能', '内部配置', '度数', '走时', '校准'], '男装女装': ['透气性', '软硬度', '弹性', '厚薄度', '吸收度', '保暖性', '安全性', '便捷性', '色泽度', '色牢度', '耐穿性', '实用性', '上身效果', '防晒效果', '遮阳效果', '佩戴效果', '聚拢效果', '破洞', '缩水', '线头', '起球', '色差', '钢圈类型', '海绵垫', '证书'], '礼品文娱': ['上身效果', '灯光效果', '打印效果', '速干效果', '显示效果', '便捷性', '安全性', '耐用性', '舒适度', '实用性', '牢固度', '色牢度', '弹性', '软硬度', '厚薄度', '粘黏性', '亮度', '流畅度', '系统性能', '灯光配置', '内部结构', '内容资源', '排版', '漏气', '折痕'], '美食饮品': ['烹饪效果', '软硬度', '酒精度数', '新鲜度', '发酵程度', '持久性', '溶解性', '厚薄度', '泡发性', '辣度', '咸度', '成熟度', '耐泡度', '甜度', '黏粘性', '冲泡效果', '饱腹感', '便捷性', '醉酒性', '醒酒时间', '烹饪时间', '色牢度', '实用性', '干净度', '食用效果', '肉质', '胶质', '酒质', '粉质', '水分', '含油量', '年份'], '花鸟绿植': ['功能功效', '醒花效果', '舒适度', '遮阳效果', '杀虫效果', '割草效果', '动力', '性能', '密度', '软硬度', '厚薄度', '发芽率', '成活率', '安全性', '便捷性', '实用性', '新鲜度', '牢固度', '色牢度', '耐用性', '摆放效果', '水分', '植物器官'], '通用': ['保质期', '包装', '产地', '风格', '概念亮点', '工艺', '购买意向', '规格', '价格', '技术', '科技', '卖家服务', '明星红人', '品类', '品牌', '品质', '声音', '设计', '使用注意事项', '外观', '物流', '性价比', '颜色', '用户痛点', '用户需求', '赠品', '正品', '整体感受', '质量', '专利', '用户疑问', '节日', '功能功效', '配置', '不良反应', '异味', '香调', '香型', '气味', '味道', '口味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '妆感', '妆容', '口感', '成分配料', '成分特点', '款式', '版型', '图案印花', '面料材质', '填充物及含量'], '鞋帽箱包': ['硬度', '厚薄度', '软硬度', '吸收度', '弹性', '透气性', '舒适度', '保暖性', '便捷性', '色牢度', '实用性', '密封性', '牢固度', '上身效果', '性能', '闭合方式', '是否带锁', '内部结构', '拉杆种类', '筒高', '鞋型', '隔层', '轮子种类', '鞋底鞋跟', '拉链', '色差']}"}, {'type': 'text', 'text': '请分析并拆分这句话中的出现的每个关键词以及对应的关键词分类、关键词子句、关键词,关键词舆情。关键词碰到标点符号要拆开,不要总结,只做抽取。请按案例格式输出'}]
User: [{'type': 'text', 'text': "案例:'自从用了这个粉底,上妆再也不卡粉了,流汗也不脱妆,非常好用"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'功能功效', '关键词子句':'上妆再也不卡粉了','关键词':'不卡粉','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'流汗也不脱妆','关键词':'不脱妆','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'非常好用','关键词':'好用','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'这个产品好不好用'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'这个产品好不好用','关键词':'好不好用','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': "案例:'他家的口红很持久,而且重点是不沾杯,涂起来也非常丝滑,而且含有极地保湿因子,同学极力推荐,非常nice'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'持久度','关键词子句':'他家的口红很持久','关键词':'持久','关键词舆情':'正面'},{'关键词分类':'特性','关键词子句':'而且重点是不沾杯','关键词':'不沾杯','关键词舆情':'正面'},{'关键词分类':'使用感受','关键词子句':'涂起来也非常丝滑','关键词':'丝滑','关键词舆情':'正面'},{'关键词分类':'成分','关键词子句':'而且含有极地保湿因子','关键词':'极地保湿因子','关键词舆情':'正面'},{'关键词分类':'推荐度','关键词子句':'同学极力推荐','关键词':'极力推荐','关键词舆情':'正面'},{'关键词分类':'总体评价','关键词子句':'非常nice','关键词':'nice','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'服务态度:好 性价比:高 包装:好 物流速度:快 发货速度:快'"}]
Assistant: [{'type': 'text', 'text': "[    {'关键词分类':'卖家服务','关键词子句':'服务态度:好','关键词':'服务态度','关键词舆情':'正面'},{'关键词分类':'性价比','关键词子句':'性价比:高','关键词':'性价比','关键词舆情':'正面'},{'关键词分类':'包装','关键词子句':'包装:好','关键词':'包装','关键词舆情':'正面'},{'关键词分类':'物流','关键词子句':'物流速度:快','关键词':'物流速度','关键词舆情':'正面'},{'关键词分类':'卖家服务','关键词子句':'发货速度:快','关键词':'发货速度','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': '这段时间最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下啊,给女儿在学校用'}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'我最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下','关键词':'好用的面霜','关键词舆情':'中性'},{'关键词分类':'用户痛点', '关键词子句':'我最近长了一脸痘痘','关键词':'一脸痘痘','关键词舆情':'负面'},{'关键词分类':'人群', '关键词子句':'给女儿在学校用','关键词':'女儿','关键词舆情':'中性'},{'关键词分类':'场景', '关键词子句':'给女儿在学校用','关键词':'学校','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': '这个用于厨卫的加湿器加湿效果实在是不好,使用时感觉水汽出得很少,在较大的厨房空间里几乎没有什么加湿的作用。'}]
Assistant:
Assistant:
ASSISTANT
```json
[
    {
        "关键词分类": "加湿效果",
        "关键词子句": "加湿效果实在是不好",
        "关键词": "加湿效果",
        "关键词舆情": "负面"
    },
    {
        "关键词分类": "出雾量",
        "关键词子句": "水汽出得很少",
        "关键词": "出雾量",
        "关键词舆情": "负面"
    },
    {
        "关键词分类": "实用性",
        "关键词子句": "在较大的厨房空间里几乎没有什么加湿的作用",
        "关键词": "没有加湿作用",
        "关键词舆情": "负面"
    }
]
```

turns-00033.parquet:1641

ac7a4229925127613c702419
turn 1/1gpt-4o-2024-08-06ChineseJapan921 words
degenerate_repetitionAbsentFinal dense release
USER
Assistant: 
User: System: [{'type': 'text', 'text': "以下是key表示行业,value是行业下的标签列表,分析的时候,请根据评论所在行业的标签体系来进行分析,分析结果中的分类必须是行业限制下的标签:{'书籍': ['耐用性', '舒适度', '便捷性', '实用性', '粘黏性', '安全性', '色牢度', '厚薄度', '显示效果', '打印效果', '讲师服务', '内容资源', '排版', '系统性能', '性能', '折痕'], '养生保健': ['弹性', '溶解性', '保暖性', '吸收度', '透气性', '安全性', '制热效果', '食用效果', '实用性', '耐用性', '色牢度', '牢固度', '便捷性', '厚薄度', '舒适度', '上身效果', '新鲜度', '性能', '力度', '风力风速', '系统性能', '电池续航', '动力类型'], '厨卫家电': ['显示效果', '系统性能', '操作性', '性能', '保暖性', '持久性', '散热效果', '色牢度', '便捷性', '耐用性', '软硬度', '舒适度', '干净度', '制冷效果', '洗涤效果', '实用性', '脱水效果', '连网效果', '保温效果', '灯光效果', '稳定性', '保鲜效果', '承重能力', '清洁效果', '净化效果', '烘干效果', '出雾量', '通话效果', '熨烫效果', '加湿效果', '加热效果', '除湿效果', '防风效果', '出水性', '制热效果', '牢固度', '厚薄度', '内容资源', '内部配置', '机组构成', '屏幕', '避障类型', '水箱类型', '擦地方式', '拍打方式', '护发类型', '温控类型', '风嘴类型', '动力类型', '导轨', '变频定频', '放置方式', '制冷方式', '冷暖类型', '净化类型', '电池类型', '信号', '风力风速', '水压', '吸力', '箱门结构', '内存', '用水量', '传播距离', '电池续航', '能耗', '能效等级', '功率', '拖地类型', '导航技术', '虚拟墙技术', '亮度', '色彩', '清晰度', '色系', '震动', '醒花效果', '遮阳效果', '杀虫效果', '割草效果', '动力类型', '密度', '发芽率', '成活率', '安全性', '新鲜度', '摆放效果', '水分', '植物器官'], '宠物用品': ['吸收度', '透气性', '上身效果', '溶解性', '保暖性', '持久性', '清洁能力', '实用性', '驱虫效果', '便捷性', '药效', '成活率', '消毒效果', '过滤效果', '食用效果', '结团效果', '耐用性', '色牢度', '除味效果', '舒适度', '厚薄度', '牢固度', '软硬度', '营养价值', '安全性', '新鲜度', '适口性', '清洗方式', '清洗难度', '动物'], '家居家纺': ['显示效果', '遮光效果', '灯光效果', '上身效果', '装饰效果', '清洁能力', '制热效果', '防滑效果', '打印效果', '安全性', '透气性', '弹性', '保暖性', '缩水率', '溶解性', '承重能力', '便捷性', '持久性', '粘黏性', '出水性', '厚重感', '密封性', '立体感', '水冲力', '耐用性', '实用性', '舒适度', '软硬度', '厚薄度', '色牢度', '牢固度', '柔和度', '蓬松度', '吸收度', '亮度', '光照范围', '清洗难度', '内部配置', '灯光配置', '系统性能', '电池续航', '功率', '风力风速', '挡位', '能耗', '起球', '色差', '缩水', '褶皱'], '彩妆护肤': ['吸收度', '透气性', '持久性', '美白效果', '丰胸效果', '抗衰效果', '抗氧效果', '收毛孔效果', '遮瑕效果', '祛痘祛印效果', '隔离效果', '补水保湿效果', '防晒效果', '纤体效果', '紧致效果', '祛斑淡斑效果', '去黑头效果', '控油效果', '清洁效果', '色牢度', '密封性', '溶解性', '安全性', '便捷性'], '户外运动': ['安全性', '防水性', '稳定性', '粘黏性', '漏气', '服帖性', '便捷性', '透气性', '充气', '吸水性', '软硬度', '控球性', '实用性', '磁性', '保暖性', '耐用性', '牢固度', '弹性', '厚薄度', '色牢度', '圆度', '亮度', '球感', '拉力', '承重能力', '打印效果', '清洗效果', '舒适度', '飞行稳定性', '防滑效果', '减震效果', '上身效果', '骑行感受', '速干效果', '变速效果', '显示效果', '能耗', '性能', '动力类型', '电池续航', '系统性能', '轮子种类', '灯光配置', '刹车', '腰力', '色差'], '手机数码': ['显示效果', '拍照效果', '散热效果', '佩戴效果', '通话效果', '防指纹效果', '运行速度', '充电速度', '音效', '风力风速', '防窥效果', '指纹解锁', '打印效果', '操作性', '便捷性', '耐用性', '实用性', '保护性', '牢固度', '色牢度', '清晰度', '粘黏性', '灵敏度', '贴合度', '匹配度', '亮度', '软硬度', '舒适度', '厚薄度', '安全性', '能耗', '系统性能', '性能', '电池续航', '内部配置', '灯光配置', '按键', '孔位', '分辨率', '像素', '自带软件', '内存', '信号', '屏幕', '发热'], '日用百货': ['制热效果', '隔音效果', '驱蚊效果', '祛痘祛印效果', '清洁能力', '投影效果', '上身效果', '防护效果', '切割效果', '控油效果', '防粘效果', '补水保湿效果', '隔热效果', '散热效果', '美白效果', '止痒效果', '复印效果', '收纳效果', '过滤效果', '碎纸效果', '保温效果', '显示效果', '工作效率', '打印效果', '溶解性', '承重能力', '便捷性', '吸收度', '弹性', '操作性', '持久性', '安全性', '厚薄度', '刺激感', '透气性', '实用性', '保暖性', '舒适度', '清晰度', '锋利度', '耐用性', '密封性', '泡沫量', '亮度', '色牢度', '软硬度', '出水性', '浓稠度', '牢固度', '粘黏性', '清洗难度', '打印速度', '清洁难度', '系统性能', '性能', '能耗', '运作速度', '动力类型', '电池续航', '功率', '火力', '风力风速', '分辨率', '灯光配置', '清洁方式', '刷头类型', '内部结构', '包装形式', '不适感', '计量误差'], '母婴用品': ['软硬度', '吸收度', '透气性', '厚薄度', '安全性', '柔软度', '新鲜度', '便捷性', '上身效果', '弹性', '溶解性', '持久性', '保暖性', '食用效果', '补水保湿效果', '粘黏性', '色牢度', '实用性', '干净度', '冲泡效果', '贴身性', '舒适度', '耐用性', '控油效果', '浓稠度', '吸力', '营养价值', '饱腹感', '牢固度', '闭合方式', '电池续航', '性能'], '汽车': ['包装', '风格', '购买意向', '规格', '价格', '卖家服务', '明星红人', '品牌', '品质', '使用注意事项', '用户痛点', '外观', '物流', '性价比', '用户需求', '保修期', '维护保养', '颜色', '赠品', '正品', '整体感受', '质量', '科技', '技术', '专利', '概念亮点', '设计', '工艺', '声音', '产地', '品类', '异味', '香调', '香型', '气味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '款式', '版型', '图案印花', '面料材质', '填充物及含量', '安全性', '便捷性', '操控性', '顿挫感', '减震效果', '驾驶视野', '驾驶体验', '精确度', '科技感', '牢固度', '软硬度', '色牢度', '实用性', '舒适度', '稳定性', '显示效果', '音响效果', '隔音效果', '密封性', '耐用性', '安全配置', '变速箱类型', '玻璃', '后视镜', '车窗后视镜', '车辆配置', '车身车型', '车体结构', '灯光配置', '电池类型', '电动机类型', '电机布局方式', '操控配置', '多媒体配置', '辅助配置', '制动器类型', '座椅配置', '防盗配置', '外部配置', '整车配置', '转向助力类型', '4s店服务', '内部配置', '动力系统', '空间容量', '空调冰箱', '防盗系统', '挂挡换挡', '控制按键', '能源类型', '前悬架类型', '驱动电机数', '驱动形式', '四驱形式', '智驾维度', '智能辅助', '智能硬件', '智能影像', '安全装备', '驻车制动', '导航', '油耗', '能耗', '配件', '仪表盘', '性能', '系统性能', '制动性能', '转弯性能', '动力性能', '车联功能', '传动性能', '电池续航', '雷达功能', '不良反应', '配置', '功能功效'], '玩具': ['便捷性', '安全性', '持久性', '实用性', '舒适度', '承重能力', '耐用性', '色牢度', '稳定性', '软硬度', '粘黏性', '弹性', '牢固度', '厚薄度', '显示效果', '骑行感受', '打印效果', '性能', '系统性能', '灯光配置', '电池续航', '内容资源', '磁力'], '珠宝配饰': ['佩戴效果', '厚薄度', '透气性', '弹性', '能耗', '软硬度', '打印效果', '性能', '色牢度', '显示效果', '变色效果', '遮阳效果', '便捷性', '实用性', '舒适度', '偏光效果', '安全性', '操作性', '耐用性', '清晰度', '牢固度', '防水性', '防蓝光效果', '粘黏性', '防辐射效果', '系统性能', '内部配置', '度数', '走时', '校准'], '男装女装': ['透气性', '软硬度', '弹性', '厚薄度', '吸收度', '保暖性', '安全性', '便捷性', '色泽度', '色牢度', '耐穿性', '实用性', '上身效果', '防晒效果', '遮阳效果', '佩戴效果', '聚拢效果', '破洞', '缩水', '线头', '起球', '色差', '钢圈类型', '海绵垫', '证书'], '礼品文娱': ['上身效果', '灯光效果', '打印效果', '速干效果', '显示效果', '便捷性', '安全性', '耐用性', '舒适度', '实用性', '牢固度', '色牢度', '弹性', '软硬度', '厚薄度', '粘黏性', '亮度', '流畅度', '系统性能', '灯光配置', '内部结构', '内容资源', '排版', '漏气', '折痕'], '美食饮品': ['烹饪效果', '软硬度', '酒精度数', '新鲜度', '发酵程度', '持久性', '溶解性', '厚薄度', '泡发性', '辣度', '咸度', '成熟度', '耐泡度', '甜度', '黏粘性', '冲泡效果', '饱腹感', '便捷性', '醉酒性', '醒酒时间', '烹饪时间', '色牢度', '实用性', '干净度', '食用效果', '肉质', '胶质', '酒质', '粉质', '水分', '含油量', '年份'], '花鸟绿植': ['功能功效', '醒花效果', '舒适度', '遮阳效果', '杀虫效果', '割草效果', '动力', '性能', '密度', '软硬度', '厚薄度', '发芽率', '成活率', '安全性', '便捷性', '实用性', '新鲜度', '牢固度', '色牢度', '耐用性', '摆放效果', '水分', '植物器官'], '通用': ['保质期', '包装', '产地', '风格', '概念亮点', '工艺', '购买意向', '规格', '价格', '技术', '科技', '卖家服务', '明星红人', '品类', '品牌', '品质', '声音', '设计', '使用注意事项', '外观', '物流', '性价比', '颜色', '用户痛点', '用户需求', '赠品', '正品', '整体感受', '质量', '专利', '用户疑问', '节日', '功能功效', '配置', '不良反应', '异味', '香调', '香型', '气味', '味道', '口味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '妆感', '妆容', '口感', '成分配料', '成分特点', '款式', '版型', '图案印花', '面料材质', '填充物及含量'], '鞋帽箱包': ['硬度', '厚薄度', '软硬度', '吸收度', '弹性', '透气性', '舒适度', '保暖性', '便捷性', '色牢度', '实用性', '密封性', '牢固度', '上身效果', '性能', '闭合方式', '是否带锁', '内部结构', '拉杆种类', '筒高', '鞋型', '隔层', '轮子种类', '鞋底鞋跟', '拉链', '色差']}"}, {'type': 'text', 'text': '请分析并拆分这句话中的出现的每个关键词以及对应的关键词分类、关键词子句、关键词,关键词舆情。关键词碰到标点符号要拆开,不要总结,只做抽取。请按案例格式输出'}]
User: [{'type': 'text', 'text': "案例:'自从用了这个粉底,上妆再也不卡粉了,流汗也不脱妆,非常好用"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'功能功效', '关键词子句':'上妆再也不卡粉了','关键词':'不卡粉','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'流汗也不脱妆','关键词':'不脱妆','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'非常好用','关键词':'好用','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'这个产品好不好用'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'这个产品好不好用','关键词':'好不好用','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': "案例:'他家的口红很持久,而且重点是不沾杯,涂起来也非常丝滑,而且含有极地保湿因子,同学极力推荐,非常nice'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'持久度','关键词子句':'他家的口红很持久','关键词':'持久','关键词舆情':'正面'},{'关键词分类':'特性','关键词子句':'而且重点是不沾杯','关键词':'不沾杯','关键词舆情':'正面'},{'关键词分类':'使用感受','关键词子句':'涂起来也非常丝滑','关键词':'丝滑','关键词舆情':'正面'},{'关键词分类':'成分','关键词子句':'而且含有极地保湿因子','关键词':'极地保湿因子','关键词舆情':'正面'},{'关键词分类':'推荐度','关键词子句':'同学极力推荐','关键词':'极力推荐','关键词舆情':'正面'},{'关键词分类':'总体评价','关键词子句':'非常nice','关键词':'nice','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'服务态度:好 性价比:高 包装:好 物流速度:快 发货速度:快'"}]
Assistant: [{'type': 'text', 'text': "[    {'关键词分类':'卖家服务','关键词子句':'服务态度:好','关键词':'服务态度','关键词舆情':'正面'},{'关键词分类':'性价比','关键词子句':'性价比:高','关键词':'性价比','关键词舆情':'正面'},{'关键词分类':'包装','关键词子句':'包装:好','关键词':'包装','关键词舆情':'正面'},{'关键词分类':'物流','关键词子句':'物流速度:快','关键词':'物流速度','关键词舆情':'正面'},{'关键词分类':'卖家服务','关键词子句':'发货速度:快','关键词':'发货速度','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': '这段时间最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下啊,给女儿在学校用'}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'我最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下','关键词':'好用的面霜','关键词舆情':'中性'},{'关键词分类':'用户痛点', '关键词子句':'我最近长了一脸痘痘','关键词':'一脸痘痘','关键词舆情':'负面'},{'关键词分类':'人群', '关键词子句':'给女儿在学校用','关键词':'女儿','关键词舆情':'中性'},{'关键词分类':'场景', '关键词子句':'给女儿在学校用','关键词':'学校','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': '这个音乐盒玩具的声音超赞,转动时发出的那首经典的钢琴曲,音质清澈,就像在音乐厅听演奏一样。'}]
Assistant:
Assistant:
ASSISTANT
[{'关键词分类':'音响效果', '关键词子句':'这个音乐盒玩具的声音超赞','关键词':'声音超赞','关键词舆情':'正面'},
 {'关键词分类':'内容资源', '关键词子句':'转动时发出的那首经典的钢琴曲','关键词':'经典钢琴曲','关键词舆情':'正面'},
 {'关键词分类':'音响效果', '关键词子句':'音质清澈','关键词':'音质清澈','关键词舆情':'正面'},
 {'关键词分类':'场景', '关键词子句':'就像在音乐厅听演奏一样','关键词':'音乐厅听演奏','关键词舆情':'正面'}]

turns-00033.parquet:1642

4aee8bef67fa06cbe4902b37
turn 1/1gpt-4o-2024-08-06ChineseUnited Kingdom947 words
degenerate_repetitionAbsentFinal dense release
USER
Assistant: 
User: System: [{'type': 'text', 'text': "以下是key表示行业,value是行业下的标签列表,分析的时候,请根据评论所在行业的标签体系来进行分析,分析结果中的分类必须是行业限制下的标签:{'书籍': ['耐用性', '舒适度', '便捷性', '实用性', '粘黏性', '安全性', '色牢度', '厚薄度', '显示效果', '打印效果', '讲师服务', '内容资源', '排版', '系统性能', '性能', '折痕'], '养生保健': ['弹性', '溶解性', '保暖性', '吸收度', '透气性', '安全性', '制热效果', '食用效果', '实用性', '耐用性', '色牢度', '牢固度', '便捷性', '厚薄度', '舒适度', '上身效果', '新鲜度', '性能', '力度', '风力风速', '系统性能', '电池续航', '动力类型'], '厨卫家电': ['显示效果', '系统性能', '操作性', '性能', '保暖性', '持久性', '散热效果', '色牢度', '便捷性', '耐用性', '软硬度', '舒适度', '干净度', '制冷效果', '洗涤效果', '实用性', '脱水效果', '连网效果', '保温效果', '灯光效果', '稳定性', '保鲜效果', '承重能力', '清洁效果', '净化效果', '烘干效果', '出雾量', '通话效果', '熨烫效果', '加湿效果', '加热效果', '除湿效果', '防风效果', '出水性', '制热效果', '牢固度', '厚薄度', '内容资源', '内部配置', '机组构成', '屏幕', '避障类型', '水箱类型', '擦地方式', '拍打方式', '护发类型', '温控类型', '风嘴类型', '动力类型', '导轨', '变频定频', '放置方式', '制冷方式', '冷暖类型', '净化类型', '电池类型', '信号', '风力风速', '水压', '吸力', '箱门结构', '内存', '用水量', '传播距离', '电池续航', '能耗', '能效等级', '功率', '拖地类型', '导航技术', '虚拟墙技术', '亮度', '色彩', '清晰度', '色系', '震动', '醒花效果', '遮阳效果', '杀虫效果', '割草效果', '动力类型', '密度', '发芽率', '成活率', '安全性', '新鲜度', '摆放效果', '水分', '植物器官'], '宠物用品': ['吸收度', '透气性', '上身效果', '溶解性', '保暖性', '持久性', '清洁能力', '实用性', '驱虫效果', '便捷性', '药效', '成活率', '消毒效果', '过滤效果', '食用效果', '结团效果', '耐用性', '色牢度', '除味效果', '舒适度', '厚薄度', '牢固度', '软硬度', '营养价值', '安全性', '新鲜度', '适口性', '清洗方式', '清洗难度', '动物'], '家居家纺': ['显示效果', '遮光效果', '灯光效果', '上身效果', '装饰效果', '清洁能力', '制热效果', '防滑效果', '打印效果', '安全性', '透气性', '弹性', '保暖性', '缩水率', '溶解性', '承重能力', '便捷性', '持久性', '粘黏性', '出水性', '厚重感', '密封性', '立体感', '水冲力', '耐用性', '实用性', '舒适度', '软硬度', '厚薄度', '色牢度', '牢固度', '柔和度', '蓬松度', '吸收度', '亮度', '光照范围', '清洗难度', '内部配置', '灯光配置', '系统性能', '电池续航', '功率', '风力风速', '挡位', '能耗', '起球', '色差', '缩水', '褶皱'], '彩妆护肤': ['吸收度', '透气性', '持久性', '美白效果', '丰胸效果', '抗衰效果', '抗氧效果', '收毛孔效果', '遮瑕效果', '祛痘祛印效果', '隔离效果', '补水保湿效果', '防晒效果', '纤体效果', '紧致效果', '祛斑淡斑效果', '去黑头效果', '控油效果', '清洁效果', '色牢度', '密封性', '溶解性', '安全性', '便捷性'], '户外运动': ['安全性', '防水性', '稳定性', '粘黏性', '漏气', '服帖性', '便捷性', '透气性', '充气', '吸水性', '软硬度', '控球性', '实用性', '磁性', '保暖性', '耐用性', '牢固度', '弹性', '厚薄度', '色牢度', '圆度', '亮度', '球感', '拉力', '承重能力', '打印效果', '清洗效果', '舒适度', '飞行稳定性', '防滑效果', '减震效果', '上身效果', '骑行感受', '速干效果', '变速效果', '显示效果', '能耗', '性能', '动力类型', '电池续航', '系统性能', '轮子种类', '灯光配置', '刹车', '腰力', '色差'], '手机数码': ['显示效果', '拍照效果', '散热效果', '佩戴效果', '通话效果', '防指纹效果', '运行速度', '充电速度', '音效', '风力风速', '防窥效果', '指纹解锁', '打印效果', '操作性', '便捷性', '耐用性', '实用性', '保护性', '牢固度', '色牢度', '清晰度', '粘黏性', '灵敏度', '贴合度', '匹配度', '亮度', '软硬度', '舒适度', '厚薄度', '安全性', '能耗', '系统性能', '性能', '电池续航', '内部配置', '灯光配置', '按键', '孔位', '分辨率', '像素', '自带软件', '内存', '信号', '屏幕', '发热'], '日用百货': ['制热效果', '隔音效果', '驱蚊效果', '祛痘祛印效果', '清洁能力', '投影效果', '上身效果', '防护效果', '切割效果', '控油效果', '防粘效果', '补水保湿效果', '隔热效果', '散热效果', '美白效果', '止痒效果', '复印效果', '收纳效果', '过滤效果', '碎纸效果', '保温效果', '显示效果', '工作效率', '打印效果', '溶解性', '承重能力', '便捷性', '吸收度', '弹性', '操作性', '持久性', '安全性', '厚薄度', '刺激感', '透气性', '实用性', '保暖性', '舒适度', '清晰度', '锋利度', '耐用性', '密封性', '泡沫量', '亮度', '色牢度', '软硬度', '出水性', '浓稠度', '牢固度', '粘黏性', '清洗难度', '打印速度', '清洁难度', '系统性能', '性能', '能耗', '运作速度', '动力类型', '电池续航', '功率', '火力', '风力风速', '分辨率', '灯光配置', '清洁方式', '刷头类型', '内部结构', '包装形式', '不适感', '计量误差'], '母婴用品': ['软硬度', '吸收度', '透气性', '厚薄度', '安全性', '柔软度', '新鲜度', '便捷性', '上身效果', '弹性', '溶解性', '持久性', '保暖性', '食用效果', '补水保湿效果', '粘黏性', '色牢度', '实用性', '干净度', '冲泡效果', '贴身性', '舒适度', '耐用性', '控油效果', '浓稠度', '吸力', '营养价值', '饱腹感', '牢固度', '闭合方式', '电池续航', '性能'], '汽车': ['包装', '风格', '购买意向', '规格', '价格', '卖家服务', '明星红人', '品牌', '品质', '使用注意事项', '用户痛点', '外观', '物流', '性价比', '用户需求', '保修期', '维护保养', '颜色', '赠品', '正品', '整体感受', '质量', '科技', '技术', '专利', '概念亮点', '设计', '工艺', '声音', '产地', '品类', '异味', '香调', '香型', '气味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '款式', '版型', '图案印花', '面料材质', '填充物及含量', '安全性', '便捷性', '操控性', '顿挫感', '减震效果', '驾驶视野', '驾驶体验', '精确度', '科技感', '牢固度', '软硬度', '色牢度', '实用性', '舒适度', '稳定性', '显示效果', '音响效果', '隔音效果', '密封性', '耐用性', '安全配置', '变速箱类型', '玻璃', '后视镜', '车窗后视镜', '车辆配置', '车身车型', '车体结构', '灯光配置', '电池类型', '电动机类型', '电机布局方式', '操控配置', '多媒体配置', '辅助配置', '制动器类型', '座椅配置', '防盗配置', '外部配置', '整车配置', '转向助力类型', '4s店服务', '内部配置', '动力系统', '空间容量', '空调冰箱', '防盗系统', '挂挡换挡', '控制按键', '能源类型', '前悬架类型', '驱动电机数', '驱动形式', '四驱形式', '智驾维度', '智能辅助', '智能硬件', '智能影像', '安全装备', '驻车制动', '导航', '油耗', '能耗', '配件', '仪表盘', '性能', '系统性能', '制动性能', '转弯性能', '动力性能', '车联功能', '传动性能', '电池续航', '雷达功能', '不良反应', '配置', '功能功效'], '玩具': ['便捷性', '安全性', '持久性', '实用性', '舒适度', '承重能力', '耐用性', '色牢度', '稳定性', '软硬度', '粘黏性', '弹性', '牢固度', '厚薄度', '显示效果', '骑行感受', '打印效果', '性能', '系统性能', '灯光配置', '电池续航', '内容资源', '磁力'], '珠宝配饰': ['佩戴效果', '厚薄度', '透气性', '弹性', '能耗', '软硬度', '打印效果', '性能', '色牢度', '显示效果', '变色效果', '遮阳效果', '便捷性', '实用性', '舒适度', '偏光效果', '安全性', '操作性', '耐用性', '清晰度', '牢固度', '防水性', '防蓝光效果', '粘黏性', '防辐射效果', '系统性能', '内部配置', '度数', '走时', '校准'], '男装女装': ['透气性', '软硬度', '弹性', '厚薄度', '吸收度', '保暖性', '安全性', '便捷性', '色泽度', '色牢度', '耐穿性', '实用性', '上身效果', '防晒效果', '遮阳效果', '佩戴效果', '聚拢效果', '破洞', '缩水', '线头', '起球', '色差', '钢圈类型', '海绵垫', '证书'], '礼品文娱': ['上身效果', '灯光效果', '打印效果', '速干效果', '显示效果', '便捷性', '安全性', '耐用性', '舒适度', '实用性', '牢固度', '色牢度', '弹性', '软硬度', '厚薄度', '粘黏性', '亮度', '流畅度', '系统性能', '灯光配置', '内部结构', '内容资源', '排版', '漏气', '折痕'], '美食饮品': ['烹饪效果', '软硬度', '酒精度数', '新鲜度', '发酵程度', '持久性', '溶解性', '厚薄度', '泡发性', '辣度', '咸度', '成熟度', '耐泡度', '甜度', '黏粘性', '冲泡效果', '饱腹感', '便捷性', '醉酒性', '醒酒时间', '烹饪时间', '色牢度', '实用性', '干净度', '食用效果', '肉质', '胶质', '酒质', '粉质', '水分', '含油量', '年份'], '花鸟绿植': ['功能功效', '醒花效果', '舒适度', '遮阳效果', '杀虫效果', '割草效果', '动力', '性能', '密度', '软硬度', '厚薄度', '发芽率', '成活率', '安全性', '便捷性', '实用性', '新鲜度', '牢固度', '色牢度', '耐用性', '摆放效果', '水分', '植物器官'], '通用': ['保质期', '包装', '产地', '风格', '概念亮点', '工艺', '购买意向', '规格', '价格', '技术', '科技', '卖家服务', '明星红人', '品类', '品牌', '品质', '声音', '设计', '使用注意事项', '外观', '物流', '性价比', '颜色', '用户痛点', '用户需求', '赠品', '正品', '整体感受', '质量', '专利', '用户疑问', '节日', '功能功效', '配置', '不良反应', '异味', '香调', '香型', '气味', '味道', '口味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '妆感', '妆容', '口感', '成分配料', '成分特点', '款式', '版型', '图案印花', '面料材质', '填充物及含量'], '鞋帽箱包': ['硬度', '厚薄度', '软硬度', '吸收度', '弹性', '透气性', '舒适度', '保暖性', '便捷性', '色牢度', '实用性', '密封性', '牢固度', '上身效果', '性能', '闭合方式', '是否带锁', '内部结构', '拉杆种类', '筒高', '鞋型', '隔层', '轮子种类', '鞋底鞋跟', '拉链', '色差']}"}, {'type': 'text', 'text': '请分析并拆分这句话中的出现的每个关键词以及对应的关键词分类、关键词子句、关键词,关键词舆情。关键词碰到标点符号要拆开,不要总结,只做抽取。请按案例格式输出'}]
User: [{'type': 'text', 'text': "案例:'自从用了这个粉底,上妆再也不卡粉了,流汗也不脱妆,非常好用"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'功能功效', '关键词子句':'上妆再也不卡粉了','关键词':'不卡粉','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'流汗也不脱妆','关键词':'不脱妆','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'非常好用','关键词':'好用','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'这个产品好不好用'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'这个产品好不好用','关键词':'好不好用','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': "案例:'他家的口红很持久,而且重点是不沾杯,涂起来也非常丝滑,而且含有极地保湿因子,同学极力推荐,非常nice'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'持久度','关键词子句':'他家的口红很持久','关键词':'持久','关键词舆情':'正面'},{'关键词分类':'特性','关键词子句':'而且重点是不沾杯','关键词':'不沾杯','关键词舆情':'正面'},{'关键词分类':'使用感受','关键词子句':'涂起来也非常丝滑','关键词':'丝滑','关键词舆情':'正面'},{'关键词分类':'成分','关键词子句':'而且含有极地保湿因子','关键词':'极地保湿因子','关键词舆情':'正面'},{'关键词分类':'推荐度','关键词子句':'同学极力推荐','关键词':'极力推荐','关键词舆情':'正面'},{'关键词分类':'总体评价','关键词子句':'非常nice','关键词':'nice','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'服务态度:好 性价比:高 包装:好 物流速度:快 发货速度:快'"}]
Assistant: [{'type': 'text', 'text': "[    {'关键词分类':'卖家服务','关键词子句':'服务态度:好','关键词':'服务态度','关键词舆情':'正面'},{'关键词分类':'性价比','关键词子句':'性价比:高','关键词':'性价比','关键词舆情':'正面'},{'关键词分类':'包装','关键词子句':'包装:好','关键词':'包装','关键词舆情':'正面'},{'关键词分类':'物流','关键词子句':'物流速度:快','关键词':'物流速度','关键词舆情':'正面'},{'关键词分类':'卖家服务','关键词子句':'发货速度:快','关键词':'发货速度','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': '这段时间最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下啊,给女儿在学校用'}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'我最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下','关键词':'好用的面霜','关键词舆情':'中性'},{'关键词分类':'用户痛点', '关键词子句':'我最近长了一脸痘痘','关键词':'一脸痘痘','关键词舆情':'负面'},{'关键词分类':'人群', '关键词子句':'给女儿在学校用','关键词':'女儿','关键词舆情':'中性'},{'关键词分类':'场景', '关键词子句':'给女儿在学校用','关键词':'学校','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': '买的婴儿连体衣,手感有些硬邦邦的,完全没有那种柔软亲肤的感觉,真担心会磨到宝宝的皮肤,不推荐。'}]
Assistant:
Assistant:
ASSISTANT
```json
[
    {
        '关键词分类':'产品类别',
        '关键词子句':'买的婴儿连体衣',
        '关键词':'婴儿连体衣',
        '关键词舆情':'中性'
    },
    {
        '关键词分类':'软硬度',
        '关键词子句':'手感有些硬邦邦的',
        '关键词':'硬邦邦',
        '关键词舆情':'负面'
    },
    {
        '关键词分类':'舒适度',
        '关键词子句':'完全没有那种柔软亲肤的感觉',
        '关键词':'柔软亲肤',
        '关键词舆情':'负面'
    },
    {
        '关键词分类':'用户痛点',
        '关键词子句':'真担心会磨到宝宝的皮肤',
        '关键词':'磨到宝宝的皮肤',
        '关键词舆情':'负面'
    },
    {
        '关键词分类':'推荐度',
        '关键词子句':'不推荐',
        '关键词':'不推荐',
        '关键词舆情':'负面'
    }
]
```

turns-00033.parquet:1643

3031537e0426bdc850a3f641
turn 1/1gpt-4o-2024-08-06ChineseGermany957 words
degenerate_repetitionAbsentFinal dense release
USER
Assistant: 
User: System: [{'type': 'text', 'text': "以下是key表示行业,value是行业下的标签列表,分析的时候,请根据评论所在行业的标签体系来进行分析,分析结果中的分类必须是行业限制下的标签:{'书籍': ['耐用性', '舒适度', '便捷性', '实用性', '粘黏性', '安全性', '色牢度', '厚薄度', '显示效果', '打印效果', '讲师服务', '内容资源', '排版', '系统性能', '性能', '折痕'], '养生保健': ['弹性', '溶解性', '保暖性', '吸收度', '透气性', '安全性', '制热效果', '食用效果', '实用性', '耐用性', '色牢度', '牢固度', '便捷性', '厚薄度', '舒适度', '上身效果', '新鲜度', '性能', '力度', '风力风速', '系统性能', '电池续航', '动力类型'], '厨卫家电': ['显示效果', '系统性能', '操作性', '性能', '保暖性', '持久性', '散热效果', '色牢度', '便捷性', '耐用性', '软硬度', '舒适度', '干净度', '制冷效果', '洗涤效果', '实用性', '脱水效果', '连网效果', '保温效果', '灯光效果', '稳定性', '保鲜效果', '承重能力', '清洁效果', '净化效果', '烘干效果', '出雾量', '通话效果', '熨烫效果', '加湿效果', '加热效果', '除湿效果', '防风效果', '出水性', '制热效果', '牢固度', '厚薄度', '内容资源', '内部配置', '机组构成', '屏幕', '避障类型', '水箱类型', '擦地方式', '拍打方式', '护发类型', '温控类型', '风嘴类型', '动力类型', '导轨', '变频定频', '放置方式', '制冷方式', '冷暖类型', '净化类型', '电池类型', '信号', '风力风速', '水压', '吸力', '箱门结构', '内存', '用水量', '传播距离', '电池续航', '能耗', '能效等级', '功率', '拖地类型', '导航技术', '虚拟墙技术', '亮度', '色彩', '清晰度', '色系', '震动', '醒花效果', '遮阳效果', '杀虫效果', '割草效果', '动力类型', '密度', '发芽率', '成活率', '安全性', '新鲜度', '摆放效果', '水分', '植物器官'], '宠物用品': ['吸收度', '透气性', '上身效果', '溶解性', '保暖性', '持久性', '清洁能力', '实用性', '驱虫效果', '便捷性', '药效', '成活率', '消毒效果', '过滤效果', '食用效果', '结团效果', '耐用性', '色牢度', '除味效果', '舒适度', '厚薄度', '牢固度', '软硬度', '营养价值', '安全性', '新鲜度', '适口性', '清洗方式', '清洗难度', '动物'], '家居家纺': ['显示效果', '遮光效果', '灯光效果', '上身效果', '装饰效果', '清洁能力', '制热效果', '防滑效果', '打印效果', '安全性', '透气性', '弹性', '保暖性', '缩水率', '溶解性', '承重能力', '便捷性', '持久性', '粘黏性', '出水性', '厚重感', '密封性', '立体感', '水冲力', '耐用性', '实用性', '舒适度', '软硬度', '厚薄度', '色牢度', '牢固度', '柔和度', '蓬松度', '吸收度', '亮度', '光照范围', '清洗难度', '内部配置', '灯光配置', '系统性能', '电池续航', '功率', '风力风速', '挡位', '能耗', '起球', '色差', '缩水', '褶皱'], '彩妆护肤': ['吸收度', '透气性', '持久性', '美白效果', '丰胸效果', '抗衰效果', '抗氧效果', '收毛孔效果', '遮瑕效果', '祛痘祛印效果', '隔离效果', '补水保湿效果', '防晒效果', '纤体效果', '紧致效果', '祛斑淡斑效果', '去黑头效果', '控油效果', '清洁效果', '色牢度', '密封性', '溶解性', '安全性', '便捷性'], '户外运动': ['安全性', '防水性', '稳定性', '粘黏性', '漏气', '服帖性', '便捷性', '透气性', '充气', '吸水性', '软硬度', '控球性', '实用性', '磁性', '保暖性', '耐用性', '牢固度', '弹性', '厚薄度', '色牢度', '圆度', '亮度', '球感', '拉力', '承重能力', '打印效果', '清洗效果', '舒适度', '飞行稳定性', '防滑效果', '减震效果', '上身效果', '骑行感受', '速干效果', '变速效果', '显示效果', '能耗', '性能', '动力类型', '电池续航', '系统性能', '轮子种类', '灯光配置', '刹车', '腰力', '色差'], '手机数码': ['显示效果', '拍照效果', '散热效果', '佩戴效果', '通话效果', '防指纹效果', '运行速度', '充电速度', '音效', '风力风速', '防窥效果', '指纹解锁', '打印效果', '操作性', '便捷性', '耐用性', '实用性', '保护性', '牢固度', '色牢度', '清晰度', '粘黏性', '灵敏度', '贴合度', '匹配度', '亮度', '软硬度', '舒适度', '厚薄度', '安全性', '能耗', '系统性能', '性能', '电池续航', '内部配置', '灯光配置', '按键', '孔位', '分辨率', '像素', '自带软件', '内存', '信号', '屏幕', '发热'], '日用百货': ['制热效果', '隔音效果', '驱蚊效果', '祛痘祛印效果', '清洁能力', '投影效果', '上身效果', '防护效果', '切割效果', '控油效果', '防粘效果', '补水保湿效果', '隔热效果', '散热效果', '美白效果', '止痒效果', '复印效果', '收纳效果', '过滤效果', '碎纸效果', '保温效果', '显示效果', '工作效率', '打印效果', '溶解性', '承重能力', '便捷性', '吸收度', '弹性', '操作性', '持久性', '安全性', '厚薄度', '刺激感', '透气性', '实用性', '保暖性', '舒适度', '清晰度', '锋利度', '耐用性', '密封性', '泡沫量', '亮度', '色牢度', '软硬度', '出水性', '浓稠度', '牢固度', '粘黏性', '清洗难度', '打印速度', '清洁难度', '系统性能', '性能', '能耗', '运作速度', '动力类型', '电池续航', '功率', '火力', '风力风速', '分辨率', '灯光配置', '清洁方式', '刷头类型', '内部结构', '包装形式', '不适感', '计量误差'], '母婴用品': ['软硬度', '吸收度', '透气性', '厚薄度', '安全性', '柔软度', '新鲜度', '便捷性', '上身效果', '弹性', '溶解性', '持久性', '保暖性', '食用效果', '补水保湿效果', '粘黏性', '色牢度', '实用性', '干净度', '冲泡效果', '贴身性', '舒适度', '耐用性', '控油效果', '浓稠度', '吸力', '营养价值', '饱腹感', '牢固度', '闭合方式', '电池续航', '性能'], '汽车': ['包装', '风格', '购买意向', '规格', '价格', '卖家服务', '明星红人', '品牌', '品质', '使用注意事项', '用户痛点', '外观', '物流', '性价比', '用户需求', '保修期', '维护保养', '颜色', '赠品', '正品', '整体感受', '质量', '科技', '技术', '专利', '概念亮点', '设计', '工艺', '声音', '产地', '品类', '异味', '香调', '香型', '气味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '款式', '版型', '图案印花', '面料材质', '填充物及含量', '安全性', '便捷性', '操控性', '顿挫感', '减震效果', '驾驶视野', '驾驶体验', '精确度', '科技感', '牢固度', '软硬度', '色牢度', '实用性', '舒适度', '稳定性', '显示效果', '音响效果', '隔音效果', '密封性', '耐用性', '安全配置', '变速箱类型', '玻璃', '后视镜', '车窗后视镜', '车辆配置', '车身车型', '车体结构', '灯光配置', '电池类型', '电动机类型', '电机布局方式', '操控配置', '多媒体配置', '辅助配置', '制动器类型', '座椅配置', '防盗配置', '外部配置', '整车配置', '转向助力类型', '4s店服务', '内部配置', '动力系统', '空间容量', '空调冰箱', '防盗系统', '挂挡换挡', '控制按键', '能源类型', '前悬架类型', '驱动电机数', '驱动形式', '四驱形式', '智驾维度', '智能辅助', '智能硬件', '智能影像', '安全装备', '驻车制动', '导航', '油耗', '能耗', '配件', '仪表盘', '性能', '系统性能', '制动性能', '转弯性能', '动力性能', '车联功能', '传动性能', '电池续航', '雷达功能', '不良反应', '配置', '功能功效'], '玩具': ['便捷性', '安全性', '持久性', '实用性', '舒适度', '承重能力', '耐用性', '色牢度', '稳定性', '软硬度', '粘黏性', '弹性', '牢固度', '厚薄度', '显示效果', '骑行感受', '打印效果', '性能', '系统性能', '灯光配置', '电池续航', '内容资源', '磁力'], '珠宝配饰': ['佩戴效果', '厚薄度', '透气性', '弹性', '能耗', '软硬度', '打印效果', '性能', '色牢度', '显示效果', '变色效果', '遮阳效果', '便捷性', '实用性', '舒适度', '偏光效果', '安全性', '操作性', '耐用性', '清晰度', '牢固度', '防水性', '防蓝光效果', '粘黏性', '防辐射效果', '系统性能', '内部配置', '度数', '走时', '校准'], '男装女装': ['透气性', '软硬度', '弹性', '厚薄度', '吸收度', '保暖性', '安全性', '便捷性', '色泽度', '色牢度', '耐穿性', '实用性', '上身效果', '防晒效果', '遮阳效果', '佩戴效果', '聚拢效果', '破洞', '缩水', '线头', '起球', '色差', '钢圈类型', '海绵垫', '证书'], '礼品文娱': ['上身效果', '灯光效果', '打印效果', '速干效果', '显示效果', '便捷性', '安全性', '耐用性', '舒适度', '实用性', '牢固度', '色牢度', '弹性', '软硬度', '厚薄度', '粘黏性', '亮度', '流畅度', '系统性能', '灯光配置', '内部结构', '内容资源', '排版', '漏气', '折痕'], '美食饮品': ['烹饪效果', '软硬度', '酒精度数', '新鲜度', '发酵程度', '持久性', '溶解性', '厚薄度', '泡发性', '辣度', '咸度', '成熟度', '耐泡度', '甜度', '黏粘性', '冲泡效果', '饱腹感', '便捷性', '醉酒性', '醒酒时间', '烹饪时间', '色牢度', '实用性', '干净度', '食用效果', '肉质', '胶质', '酒质', '粉质', '水分', '含油量', '年份'], '花鸟绿植': ['功能功效', '醒花效果', '舒适度', '遮阳效果', '杀虫效果', '割草效果', '动力', '性能', '密度', '软硬度', '厚薄度', '发芽率', '成活率', '安全性', '便捷性', '实用性', '新鲜度', '牢固度', '色牢度', '耐用性', '摆放效果', '水分', '植物器官'], '通用': ['保质期', '包装', '产地', '风格', '概念亮点', '工艺', '购买意向', '规格', '价格', '技术', '科技', '卖家服务', '明星红人', '品类', '品牌', '品质', '声音', '设计', '使用注意事项', '外观', '物流', '性价比', '颜色', '用户痛点', '用户需求', '赠品', '正品', '整体感受', '质量', '专利', '用户疑问', '节日', '功能功效', '配置', '不良反应', '异味', '香调', '香型', '气味', '味道', '口味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '妆感', '妆容', '口感', '成分配料', '成分特点', '款式', '版型', '图案印花', '面料材质', '填充物及含量'], '鞋帽箱包': ['硬度', '厚薄度', '软硬度', '吸收度', '弹性', '透气性', '舒适度', '保暖性', '便捷性', '色牢度', '实用性', '密封性', '牢固度', '上身效果', '性能', '闭合方式', '是否带锁', '内部结构', '拉杆种类', '筒高', '鞋型', '隔层', '轮子种类', '鞋底鞋跟', '拉链', '色差']}"}, {'type': 'text', 'text': '请分析并拆分这句话中的出现的每个关键词以及对应的关键词分类、关键词子句、关键词,关键词舆情。关键词碰到标点符号要拆开,不要总结,只做抽取。请按案例格式输出'}]
User: [{'type': 'text', 'text': "案例:'自从用了这个粉底,上妆再也不卡粉了,流汗也不脱妆,非常好用"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'功能功效', '关键词子句':'上妆再也不卡粉了','关键词':'不卡粉','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'流汗也不脱妆','关键词':'不脱妆','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'非常好用','关键词':'好用','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'这个产品好不好用'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'这个产品好不好用','关键词':'好不好用','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': "案例:'他家的口红很持久,而且重点是不沾杯,涂起来也非常丝滑,而且含有极地保湿因子,同学极力推荐,非常nice'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'持久度','关键词子句':'他家的口红很持久','关键词':'持久','关键词舆情':'正面'},{'关键词分类':'特性','关键词子句':'而且重点是不沾杯','关键词':'不沾杯','关键词舆情':'正面'},{'关键词分类':'使用感受','关键词子句':'涂起来也非常丝滑','关键词':'丝滑','关键词舆情':'正面'},{'关键词分类':'成分','关键词子句':'而且含有极地保湿因子','关键词':'极地保湿因子','关键词舆情':'正面'},{'关键词分类':'推荐度','关键词子句':'同学极力推荐','关键词':'极力推荐','关键词舆情':'正面'},{'关键词分类':'总体评价','关键词子句':'非常nice','关键词':'nice','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'服务态度:好 性价比:高 包装:好 物流速度:快 发货速度:快'"}]
Assistant: [{'type': 'text', 'text': "[    {'关键词分类':'卖家服务','关键词子句':'服务态度:好','关键词':'服务态度','关键词舆情':'正面'},{'关键词分类':'性价比','关键词子句':'性价比:高','关键词':'性价比','关键词舆情':'正面'},{'关键词分类':'包装','关键词子句':'包装:好','关键词':'包装','关键词舆情':'正面'},{'关键词分类':'物流','关键词子句':'物流速度:快','关键词':'物流速度','关键词舆情':'正面'},{'关键词分类':'卖家服务','关键词子句':'发货速度:快','关键词':'发货速度','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': '这段时间最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下啊,给女儿在学校用'}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'我最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下','关键词':'好用的面霜','关键词舆情':'中性'},{'关键词分类':'用户痛点', '关键词子句':'我最近长了一脸痘痘','关键词':'一脸痘痘','关键词舆情':'负面'},{'关键词分类':'人群', '关键词子句':'给女儿在学校用','关键词':'女儿','关键词舆情':'中性'},{'关键词分类':'场景', '关键词子句':'给女儿在学校用','关键词':'学校','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': '这个音乐盒玩具的声音超赞,转动时发出的那首经典的钢琴曲,音质清澈,就像在音乐厅听演奏一样。'}]
Assistant:
Assistant:
ASSISTANT
```json
[
    {
        "关键词分类": "声音",
        "关键词子句": "这个音乐盒玩具的声音超赞",
        "关键词": "声音",
        "关键词舆情": "正面"
    },
    {
        "关键词分类": "音乐",
        "关键词子句": "转动时发出的那首经典的钢琴曲",
        "关键词": "钢琴曲",
        "关键词舆情": "正面"
    },
    {
        "关键词分类": "音质",
        "关键词子句": "音质清澈",
        "关键词": "音质清澈",
        "关键词舆情": "正面"
    },
    {
        "关键词分类": "用户感受",
        "关键词子句": "就像在音乐厅听演奏一样",
        "关键词": "音乐厅听演奏",
        "关键词舆情": "正面"
    }
]
```

turns-00033.parquet:1644

7922ed903c077fd4bf01f57f
turn 1/1o1-mini-2024-09-12EstonianCanada13 words
degenerate_repetitionAbsentFinal dense release
USER
test
ASSISTANT
Hello! It looks like you're testing. How can I assist you today?

turns-00033.parquet:1645

611a79b07da57e7ed0c41ed7
turn 1/1o1-mini-2024-09-12TurkishTürkiye10603 words
degenerate_repetitionAbsentFinal dense release
USER
Custom tags altında etiket seçimi kaldırıldığında tüm kategorileri göstermek yerine uncategorized olanları gösteriyor. bunu engelle, tümünü göstersin ->
Filter Categories ve Custom Tags'ın Etkileşimine dikkat et: Her iki filtreleme mekanizmasında ortak bir değişken kullanıyorsanız (örneğin, selectedTag), bu değişkenin her iki yerde de doğru şekilde güncellendiğinden emin olun.
Bu adımları takip ederek, Custom Tags altında etiket seçimi kaldırıldığında tüm kategorilerin gösterilmesini sağla. Önemli olan, selectedTag değişkeninin doğru şekilde ayarlanması ve Filter Categories menüsü ile Custom Tags filtreleme mekanizmalarının uyumlu çalışmasıdır.

using System.Windows.Forms;
using Firebase.Database;
using Firebase.Database.Query;
using FirebaseAdmin;
using Google.Apis.Auth.OAuth2;
using System.Threading.Tasks;
using System.Linq;
using System.Drawing;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Newtonsoft.Json;
using Firebase.Database.Streaming;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System;

namespace Flashcard
{
    public partial class MainForm : Form
    {
        // Firebase client
        private FirebaseClient firebaseClient;

        // UI Controls
        private DataGridView dataGridView;
        private TextBox txtTitle, txtCategory, txtContent, txtBackgroundColor, txtSearch;
        private CheckBox chkFavorite, chkPinned;
        private CheckBox chkFilterFavorites, chkFilterPinned; // Filtering CheckBoxes
        private Button btnAdd, btnUpdate, btnDelete, btnSearch, btnClear;
        private StatusStrip statusStrip;
        private ToolStripStatusLabel statusLabel;

        // Menü Kontrolleri
        private MenuStrip menuStrip;
        private ToolStripMenuItem fileMenuItem, themeMenuItem, filterCategoriesMenuItem;
        private ToolStripMenuItem saveAsMenuItem;
        private ToolStripMenuItem lightModeMenuItem, darkModeMenuItem;
        private ToolStripMenuItem clipboardModeMenuItem, clipboardOnMenuItem, clipboardOffMenuItem;
        private ToolStripMenuItem loadTagsMenuItem;

        // Custom Tag Menu Items
        private ToolStripMenuItem customTagMenuItem;
        private ToolStripMenuItem addTagMenuItem;
        private ToolStripMenuItem manageTagsMenuItem;
        private List<string> customTags = new List<string>();
        private string selectedCustomTag = null;

        // customTags'i kaydetmek için dosya yolu
        private readonly string customTagsFilePath = "custom_tags.json";

        // ContextMenuStrip for column visibility
        private ContextMenuStrip columnContextMenu;

        // Sorting state
        private string currentSortColumn = "timestamp";
        private bool sortAscending = false;

        // Data storage
        private List<FlashcardItem> allFlashcards = new List<FlashcardItem>();

        // Current search term
        private string currentSearchTerm = "";

        // Dictionary to store column visibility state
        private Dictionary<string, bool> columnVisibilityState = new Dictionary<string, bool>();

        // Clipboard monitoring
        private Timer clipboardMonitorTimer;
        private string lastClipboardText;

        // Yeni Eklenen Değişkenler
        private CheckedListBox tagCheckedListBox;
        private string selectedTag = "All Categories";

        // Local storage file paths
        private readonly string localDataFilePath = "local_flashcards.json";
        private readonly string offlineChangesFilePath = "offline_changes.json"; // Yeni eklenen

        // Flag to indicate if application is online
        private bool isOnline = false;

        // Flag to prevent multiple listeners
        private bool isListening = false;

        // Offline changes list
        private List<FlashcardChange> offlineChanges = new List<FlashcardChange>();

        // Timer to check online status
        private Timer onlineStatusTimer;

        // New Menu Control variables for Language Mode
        private ToolStripMenuItem languageModeMenuItem;
        private ToolStripMenuItem languageModeOnMenuItem;
        private ToolStripMenuItem languageModeOffMenuItem;
        // New Data Variable to monitor clipboard titles and contents
        private List<string> clipboardBuffer = new List<string>();

        private bool isLanguageModeActive = false; // Track the Language Mode state

        // New Variable for Filter Categories Menu Items
        private List<ToolStripMenuItem> filterCategoryMenuItems = new List<ToolStripMenuItem>();
        private List<ToolStripMenuItem> filterCategoriesMenuItems = new List<ToolStripMenuItem>();

        public MainForm()
        {
            InitializeComponent();
            InitializeFirebase();
            InitializeUI();
            LoadLocalData(); // Yerel verileri yükle
            // Firebase ile yerel verileri senkronize et
            _ = SyncLocalDataWithFirebase(); // Asenkron olarak çağırıyoruz, hata ayıklamak için bir sonuç beklemiyoruz
        }

        /// <summary>
        /// Initializes Firebase connection using the provided JSON credentials.
        /// </summary>
        private void InitializeFirebase()
        {
            var path = "flashcard-e7f47-firebase-adminsdk-om656-e70a5506c2.json";
            var credential = GoogleCredential.FromFile(path);

            // Check if FirebaseApp is already created to prevent duplicate initialization
            if (FirebaseApp.DefaultInstance == null)
            {
                FirebaseApp.Create(new AppOptions
                {
                    Credential = credential
                });
            }

            firebaseClient = new FirebaseClient("https://flashcard-e7f47-default-rtdb.europe-west1.firebasedatabase.app/");
        }
        private async Task SyncLocalDataWithFirebase()
        {
            try
            {
                // Firebase'den verileri al
                var firebaseFlashcards = await firebaseClient
                    .Child("flashcards") // "flashcards" yolunu kendi veritabanınıza göre düzenleyin
                    .OnceAsync<FlashcardItem>();

                // Firebase'deki flashcard ID'lerini topla
                var firebaseFlashcardIds = firebaseFlashcards.Select(f => f.Key).ToHashSet();

                // Yerel dosyadan verileri oku
                List<FlashcardItem> localFlashcards = new List<FlashcardItem>();
                if (File.Exists(localDataFilePath))
                {
                    var json = File.ReadAllText(localDataFilePath);
                    localFlashcards = JsonConvert.DeserializeObject<List<FlashcardItem>>(json);
                }

                // Yerel verilerden silinmiş olanları temizle
                var updatedLocalFlashcards = localFlashcards
                    .Where(f => firebaseFlashcardIds.Contains(f.id))
                    .ToList();

                // Güncellenmiş verileri yerel dosyaya yaz
                File.WriteAllText(localDataFilePath, JsonConvert.SerializeObject(updatedLocalFlashcards));

                // UI güncellemelerini Invoke ile gerçekleştir
                this.Invoke((MethodInvoker)delegate
                {
                    // DataGridView'i güncelle
                    allFlashcards = updatedLocalFlashcards; // Güncellenmiş verileri kullan
                    dataGridView.DataSource = null;
                    dataGridView.DataSource = allFlashcards;

                    // Durum çubuğunu güncelle
                    statusLabel.Text = "Local data synchronized with Firebase.";

                    // Update Filter Categories menu
                    PopulateFilterCategoriesMenu();
                });
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    "Bulut senkronizasyonu başarısız oldu. İnternet bağlantınızı kontrol edin ve tekrar deneyin.\nYerel veri eklemelerinize devam edebilirsiniz.",
                    "Senkronizasyon Hatası",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Warning
                );
            }
        }
        /// <summary>
        /// Sets up the user interface components.
        /// </summary>
        private void InitializeUI()
        {
            this.Size = new Size(1000, 800);
            this.Text = "Flashcard Application";
            this.StartPosition = FormStartPosition.CenterScreen; // MainForm ekranın ortasında açılsın

            // MenuStrip Oluşturma
            menuStrip = new MenuStrip
            {
                Dock = DockStyle.Top // MenuStrip'i üstte konumlandır
            };

            // File Menu
            fileMenuItem = new ToolStripMenuItem("File");
            saveAsMenuItem = new ToolStripMenuItem("Save As");
            saveAsMenuItem.Click += SaveAsMenuItem_Click; // Event Handler

            fileMenuItem.DropDownItems.Add(saveAsMenuItem);


            // Theme Menu
            themeMenuItem = new ToolStripMenuItem("Theme");
            lightModeMenuItem = new ToolStripMenuItem("Light Mode");
            darkModeMenuItem = new ToolStripMenuItem("Dark Mode");
            lightModeMenuItem.Click += LightModeMenuItem_Click; // Event Handler
            darkModeMenuItem.Click += DarkModeMenuItem_Click; // Event Handler
            themeMenuItem.DropDownItems.Add(lightModeMenuItem);
            themeMenuItem.DropDownItems.Add(darkModeMenuItem);

            // Clipboard Mode Menu
            // Clipboard Mode Menu
            clipboardModeMenuItem = new ToolStripMenuItem("Clipboard Mode");
            clipboardOnMenuItem = new ToolStripMenuItem("On");
            clipboardOffMenuItem = new ToolStripMenuItem("Off");

            clipboardOnMenuItem.CheckOnClick = true;
            clipboardOffMenuItem.CheckOnClick = true;
            clipboardOffMenuItem.Checked = true; // Initially Off

            clipboardOnMenuItem.Click += ClipboardOnMenuItem_Click;
            clipboardOffMenuItem.Click += ClipboardOffMenuItem_Click;

            // Language Mode as a submenu of Clipboard Mode
            languageModeMenuItem = new ToolStripMenuItem("Language Mode");
            languageModeOnMenuItem = new ToolStripMenuItem("On");
            languageModeOffMenuItem = new ToolStripMenuItem("Off");

            languageModeOnMenuItem.CheckOnClick = true;
            languageModeOffMenuItem.CheckOnClick = true;
            languageModeOffMenuItem.Checked = true; // Initially Off

            languageModeOnMenuItem.Click += LanguageModeOnMenuItem_Click;
            languageModeOffMenuItem.Click += LanguageModeOffMenuItem_Click;

            languageModeMenuItem.DropDownItems.Add(languageModeOnMenuItem);
            languageModeMenuItem.DropDownItems.Add(languageModeOffMenuItem);

            clipboardModeMenuItem.DropDownItems.Add(languageModeMenuItem);
            clipboardModeMenuItem.DropDownItems.Add(clipboardOnMenuItem);
            clipboardModeMenuItem.DropDownItems.Add(clipboardOffMenuItem);

            // Add Clipboard Mode to the MenuStrip
            menuStrip.Items.Add(clipboardModeMenuItem);

            // Load Tags Menu
            loadTagsMenuItem = new ToolStripMenuItem("Load Tags");
            loadTagsMenuItem.Click += LoadTagsMenuItem_Click; // Event Handler

            // Custom Tag Menu
            customTagMenuItem = new ToolStripMenuItem("Custom Tag");
            addTagMenuItem = new ToolStripMenuItem("Add Tag");
            addTagMenuItem.Click += AddTagMenuItem_Click; // Event Handler

            // Declare manageTagsMenuItem at class level and initialize
            manageTagsMenuItem = new ToolStripMenuItem("Manage Tags");
            manageTagsMenuItem.Click += ManageTagsMenuItem_Click; // Event Handler
            customTagMenuItem.DropDownItems.Add(addTagMenuItem);
            customTagMenuItem.DropDownItems.Add(manageTagsMenuItem);

            // Filter Categories Menu
            filterCategoriesMenuItem = new ToolStripMenuItem("Filter Categories");


            // MenuStrip'e Menüleri Ekleme
            menuStrip.Items.Add(fileMenuItem);
            menuStrip.Items.Add(themeMenuItem);
            menuStrip.Items.Add(clipboardModeMenuItem);
            menuStrip.Items.Add(loadTagsMenuItem); // "Load Tags" Menü Öğesini Ekledik
            menuStrip.Items.Add(customTagMenuItem); // "Custom Tag" Menü Öğesini Ekledik                                           
            menuStrip.Items.Add(filterCategoriesMenuItem); // Initially, it will be populated after data is loaded

            // Form'a MenuStrip'i Ekleme
            this.MainMenuStrip = menuStrip;
            Controls.Add(menuStrip); // MenuStrip'i ilk olarak ekliyoruz

            // Clipboard izleme için Timer
            clipboardMonitorTimer = new Timer { Interval = 1000 }; // Her saniyede bir kontrol eder
            clipboardMonitorTimer.Tick += ClipboardMonitorTimer_Tick;

            // Online status izleme için Timer
            onlineStatusTimer = new Timer { Interval = 10000 }; // Her 10 saniyede bir kontrol eder
            onlineStatusTimer.Tick += OnlineStatusTimer_Tick;

            // Arama Metin Kutusu ve Butonları
            txtSearch = CreateTextBox("", 10, menuStrip.Bottom + 6, 200);
            btnSearch = CreateButton("Search", txtSearch.Right + 6, txtSearch.Top - 2, 80);
            btnClear = CreateButton("Clear", btnSearch.Right + 6, txtSearch.Top - 2, 80);

            // Filtreleme CheckBox'ları
            chkFilterFavorites = new CheckBox
            {
                Text = "Show Favorites",
                Top = txtSearch.Bottom + 6,
                Left = txtSearch.Left,
                Width = 120
            };
            chkFilterFavorites.CheckedChanged += FilterCheckBoxChanged;
            Controls.Add(chkFilterFavorites);

            chkFilterPinned = new CheckBox
            {
                Text = "Show Pinned",
                Top = txtSearch.Bottom + 6,
                Left = chkFilterFavorites.Right + 10,
                Width = 120
            };
            chkFilterPinned.CheckedChanged += FilterCheckBoxChanged;
            Controls.Add(chkFilterPinned);

            // Initialize DataGridView
            dataGridView = new DataGridView
            {
                Height = 400,
                Left = 0,
                Top = chkFilterFavorites.Bottom + 10, // DataGridView'i filtrelerin altına yerleştir
                Width = this.ClientSize.Width, // Tam pencere genişliğini kapla
                Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right,
                AllowUserToAddRows = false,
                AllowUserToDeleteRows = false,
                ReadOnly = false,
                SelectionMode = DataGridViewSelectionMode.FullRowSelect,
                MultiSelect = true,
                AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
                ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize
            };

            dataGridView.SelectionChanged += DataGridView_SelectionChanged;
            dataGridView.CellContentClick += DataGridView_CellContentClick;
            dataGridView.CellFormatting += DataGridView_CellFormatting;
            dataGridView.ColumnHeaderMouseClick += DataGridView_ColumnHeaderMouseClick; // For sorting
            Controls.Add(dataGridView);

            // StatusStrip
            statusStrip = new StatusStrip();
            statusLabel = new ToolStripStatusLabel();
            statusStrip.Items.Add(statusLabel);
            statusStrip.Dock = DockStyle.Bottom; // StatusStrip'i pencerenin en altına sabitle
            Controls.Add(statusStrip);

            // Tag CheckedListBox Oluşturma
            tagCheckedListBox = new CheckedListBox
            {
                Width = 400,
                CheckOnClick = true,
                Left = this.ClientSize.Width - 400, // Pencerenin en sağ kenarına bitişik hizala
                Top = dataGridView.Bottom, // DataGridView'in hemen altına yerleştir
                Height = statusStrip.Top - dataGridView.Bottom + 10, // DataGridView'den StatusStrip'e kadar olan yüksekliği ayarla
                Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right,
                Visible = false // Başlangıçta gizli
            };
            tagCheckedListBox.ItemCheck += TagCheckedListBox_ItemCheck;
            Controls.Add(tagCheckedListBox);

            // Kontroller arası standart Windows Forms arayüzündeki gibi mesafeler
            int labelLeft = 10;
            int textBoxLeft = 150;
            int startTop = dataGridView.Bottom + 6; // Kontrolleri DataGridView'in altına yerleştir
            int textBoxWidth = 300;
            int textBoxHeight = 25;
            int verticalSpacing = 6; // Kontroller arası boşluk

            int currentTop = dataGridView.Bottom + 6; // Kontrolleri DataGridView'in altına yerleştir

            // Etiketleri ve Metin Kutularını Oluştur

            // Category
            CreateLabel("Category:", labelLeft, currentTop);
            txtCategory = CreateTextBox("", textBoxLeft, currentTop, textBoxWidth);
            currentTop += textBoxHeight + verticalSpacing;

            // Title
            CreateLabel("Title:", labelLeft, currentTop);
            txtTitle = CreateTextBox("", textBoxLeft, currentTop, textBoxWidth);
            currentTop += textBoxHeight + verticalSpacing;

            // Content
            CreateLabel("Content:", labelLeft, currentTop);
            txtContent = CreateTextBox("", textBoxLeft, currentTop, textBoxWidth);
            currentTop += textBoxHeight + verticalSpacing;

            // Background Color
            CreateLabel("Background Color:", labelLeft, currentTop);
            txtBackgroundColor = CreateTextBox("", textBoxLeft, currentTop, textBoxWidth);
            currentTop += textBoxHeight + verticalSpacing;

            // İşlevsel CheckBox'lar
            chkFavorite = new CheckBox { Text = "Favorite", Top = currentTop, Left = textBoxLeft, Width = 80 };
            Controls.Add(chkFavorite);

            chkPinned = new CheckBox { Text = "Pinned", Top = currentTop, Left = textBoxLeft + 90, Width = 80 };
            Controls.Add(chkPinned);

            currentTop += chkFavorite.Height + verticalSpacing;

            // Butonları Yatay Olarak Hizala
            int buttonTop = currentTop + 10; // Biraz boşluk ekle
            int buttonLeft = labelLeft;

            btnAdd = CreateButton("Add", buttonLeft, buttonTop, 100);
            buttonLeft += 110;

            btnUpdate = CreateButton("Update", buttonLeft, buttonTop, 100);
            buttonLeft += 110;

            btnDelete = CreateButton("Delete", buttonLeft, buttonTop, 100);

            // ContextMenuStrip for column visibility
            columnContextMenu = new ContextMenuStrip();
            // Not: Kolon bilgisi mevcut olduktan sonra ContextMenuStrip'i dolduracağız

            // Assign the MouseUp event to show the ContextMenuStrip on right-click
            dataGridView.MouseUp += DataGridView_MouseUp;

            // Event Handler for Form Load
            this.Load += MainForm_Load;

            // Formun MouseDown olayını abone olma
            this.MouseDown += MainForm_MouseDown;

            // Tüm kontrollerin MouseDown olaylarını abone et
            RegisterMouseDownEvent(this);
        }

        private void ExportSettingsMenuItem_Click(object sender, EventArgs e)
        {
            // Get distinct categories for export options
            List<string> categories = allFlashcards.Select(f => f.category).Distinct().ToList();
            categories = categories.Where(c => !string.IsNullOrWhiteSpace(c)).ToList();

            using (ExportSettingsForm exportForm = new ExportSettingsForm(categories))
            {
                if (exportForm.ShowDialog() == DialogResult.OK)
                {
                    // You can handle any additional settings here if needed
                    // Currently, export settings are handled during Save As
                }
            }
        }

        private void MainForm_MouseDown(object sender, MouseEventArgs e)
        {
            // Fare imlecinin altındaki kontrolü al
            Control clickedControl = this.GetChildAtPoint(e.Location);

            // Eğer tıklanan kontrol null ise veya formun kendisiyse, metin kutularını sıfırla
            if (clickedControl == null || clickedControl == this)
            {
                ClearInputs();
            }
        }

        private void RegisterMouseDownEvent(Control parent)
        {
            foreach (Control control in parent.Controls)
            {
                control.MouseDown += Control_MouseDown;

                if (control.HasChildren)
                {
                    RegisterMouseDownEvent(control);
                }
            }
        }

        private void Control_MouseDown(object sender, MouseEventArgs e)
        {
            // Kontrolün MouseDown olayını formun MouseDown olayına yönlendir
            MainForm_MouseDown(sender, e);
        }

        // Yeni bir CreateLabel metodu ekliyoruz
        private Label CreateLabel(string text, int left, int top)
        {
            Label label = new Label
            {
                Text = text,
                Left = left,
                Top = top,
                AutoSize = true
            };
            Controls.Add(label);
            return label;
        }

        /// <summary>
        /// Creates a TextBox.
        /// </summary>
        private TextBox CreateTextBox(string text, int left, int top, int width)
        {
            TextBox textBox = new TextBox
            {
                Left = left,
                Top = top,
                Width = width,
                Text = text,
                ForeColor = Color.Black
            };
            Controls.Add(textBox);
            return textBox;
        }

        /// <summary>
        /// Creates a Button with specified properties and assigns click event.
        /// </summary>
        private Button CreateButton(string text, int left, int top, int width)
        {
            Button button = new Button
            {
                Text = text,
                Left = left,
                Top = top,
                Width = width
            };
            button.Click += (sender, e) => ButtonClick(text);
            Controls.Add(button);
            return button;
        }

        /// <summary>
        /// Handles button click events by identifying the button text.
        /// </summary>
        private void ButtonClick(string buttonText)
        {
            switch (buttonText)
            {
                case "Add":
                    AddData();
                    break;
                case "Update":
                    UpdateData();
                    break;
                case "Delete":
                    DeleteData();
                    break;
                case "Search":
                    SearchData();
                    break;
                case "Clear":
                    ClearSearch();
                    break;
            }
        }

        /// <summary>
        /// Handles the "Save As" menu item click to save data in selected format.
        /// </summary>
        private void SaveAsMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog
            {
                Filter = "Firebase files (*.json)|*.json|Standard JSON files (*.json)|*.json|CSV files (*.csv)|*.csv|TSV files (*.tsv)|*.tsv|Text files (*.txt)|*.txt|PDF files (*.pdf)|*.pdf",
                Title = "Save As"
            };

            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    string extension = Path.GetExtension(saveFileDialog.FileName).ToLower();
                    // Filtre indexini kaldırdım çünkü şimdi yöntemde uzmanlaşmadık
                    // İlk olarak seçilen formatın türünü belirleyin
                    // DataGridView'den verileri al
                    var data = isOnline ? allFlashcards : (List<FlashcardItem>)dataGridView.DataSource;

                    // Show Export Settings dialog with yeni seçenek
                    using (ExportSettingsForm exportForm = new ExportSettingsForm(allFlashcards.Select(f => f.category).Distinct().Where(c => !string.IsNullOrWhiteSpace(c)).ToList()))
                    {
                        exportForm.SelectAllFields(); // Select all fields by default

                        if (exportForm.ShowDialog() == DialogResult.OK)
                        {
                            var selectedFields = exportForm.GetSelectedFields();
                            var exportByCategory = exportForm.ExportByCategory;
                            List<string> selectedCategories = exportForm.GetSelectedCategories();

                            if (selectedFields.Count == 0)
                            {
                                MessageBox.Show("Please select at least one field to export.", "No Fields Selected", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                return;
                            }

                            // Kullanıcının seçimine göre veri setini belirleyin
                            List<FlashcardItem> dataToExport;
                            if (exportForm.ExportAll)
                            {
                                dataToExport = allFlashcards;
                            }
                            else if (exportByCategory && selectedCategories.Any())
                            {
                                dataToExport = allFlashcards.Where(f => selectedCategories.Contains(f.category)).ToList();
                            }
                            else
                            {
                                dataToExport = (List<FlashcardItem>)dataGridView.DataSource;
                            }

                            // Farklı formatlarda kaydetmek için mevcut metodları kullanın
                            if (extension == ".json")
                            {
                                // Determine if it's Firebase JSON or Standard JSON based on filter
                                // Let's assume the first option is Firebase
                                if (saveFileDialog.FilterIndex == 1)
                                {
                                    SaveDataAsJSonForFirebase(dataToExport, saveFileDialog.FileName);
                                }
                                else
                                {
                                    SaveDataAsJSon2(dataToExport, saveFileDialog.FileName, selectedFields);
                                }
                            }
                            else
                            {
                                // Handle CSV, TSV, TXT, PDF exports with field selection
                                switch (extension)
                                {
                                    case ".csv":
                                        SaveDataAsCsv(dataToExport, saveFileDialog.FileName, ',', selectedFields);
                                        break;
                                    case ".tsv":
                                        SaveDataAsCsv(dataToExport, saveFileDialog.FileName, '\t', selectedFields);
                                        break;
                                    case ".txt":
                                        SaveDataAsTxt(dataToExport, saveFileDialog.FileName, selectedFields);
                                        break;
                                    case ".pdf":
                                        SaveDataAsPdf(dataToExport, saveFileDialog.FileName, selectedFields);
                                        break;
                                    default:
                                        MessageBox.Show("Unsupported file format.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        break;
                                }

                                MessageBox.Show("Data saved successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error saving data: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void SaveDataAsJSon2(List<FlashcardItem> data, string filePath, List<string> selectedFields)
        {
            try
            {
                var filteredData = data.Select(item =>
                {
                    var jsonObject = new Dictionary<string, object>();
                    foreach (var field in selectedFields)
                    {
                        switch (field.ToLower())
                        {
                            case "id":
                                jsonObject["id"] = item.id;
                                break;
                            case "category":
                                jsonObject["category"] = item.category;
                                break;
                            case "title":
                                jsonObject["title"] = item.title;
                                break;
                            case "content":
                                jsonObject["content"] = item.content;
                                break;
                            case "favorite":
                                jsonObject["favorite"] = item.favorite;
                                break;
                            case "pinned":
                                jsonObject["pinned"] = item.pinned;
                                break;
                            case "timestamp":
                                jsonObject["timestamp"] = item.timestamp;
                                break;
                            case "backgroundcolor":
                                jsonObject["backgroundColor"] = item.backgroundColor;
                                break;
                            default:
                                break;
                        }
                    }
                    return jsonObject;
                }).ToList();

                var options = new JsonSerializerSettings
                {
                    Formatting = Formatting.Indented // JSON'u okunabilir şekilde biçimlendirir
                };

                string jsonString = JsonConvert.SerializeObject(filteredData, options);
                File.WriteAllText(filePath, jsonString, Encoding.UTF8);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error saving JSON data: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void SaveDataAsJSonForFirebase(List<FlashcardItem> data, string filePath)
        {
            try
            {
                // Verileri flashcards düğümü altında olacak şekilde düzenle
                var flashcards = new Dictionary<string, FlashcardItem>();
                foreach (var item in data)
                {
                    flashcards[item.id] = item; // Mevcut ID'yi kullan
                }

                var root = new Dictionary<string, object>
                {
                    { "flashcards", flashcards }
                };

                var options = new JsonSerializerSettings
                {
                    Formatting = Formatting.Indented // JSON'u okunabilir şekilde biçimlendirir
                };

                string jsonString = JsonConvert.SerializeObject(root, options);
                File.WriteAllText(filePath, jsonString, new UTF8Encoding(false)); //For firebase Json new UTF8Encoding(false) is must
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error saving JSON data: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// Saves data as a JSON file.
        /// </summary>
        private void SaveDataAsJSon(List<FlashcardItem> data, string filePath, List<string> selectedFields)
        {
            try
            {
                var filteredData = data.Select(item =>
                {
                    var jsonObject = new Dictionary<string, object>();
                    foreach (var field in selectedFields)
                    {
                        switch (field.ToLower())
                        {
                            case "id":
                                jsonObject["id"] = item.id;
                                break;
                            case "category":
                                jsonObject["category"] = item.category;
                                break;
                            case "title":
                                jsonObject["title"] = item.title;
                                break;
                            case "content":
                                jsonObject["content"] = item.content;
                                break;
                            case "favorite":
                                jsonObject["favorite"] = item.favorite;
                                break;
                            case "pinned":
                                jsonObject["pinned"] = item.pinned;
                                break;
                            case "timestamp":
                                jsonObject["timestamp"] = item.timestamp;
                                break;
                            case "backgroundcolor":
                                jsonObject["backgroundColor"] = item.backgroundColor;
                                break;
                            default:
                                break;
                        }
                    }
                    return jsonObject;
                }).ToList();

                var options = new JsonSerializerSettings
                {
                    Formatting = Formatting.Indented // JSON'u okunabilir şekilde biçimlendirir
                };

                string jsonString = JsonConvert.SerializeObject(filteredData, options);
                File.WriteAllText(filePath, jsonString, Encoding.UTF8);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error saving JSON data: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        /// <summary>
        /// Saves data as CSV or TSV file.
        /// </summary>
        private void SaveDataAsCsv(List<FlashcardItem> data, string filePath, char delimiter, List<string> selectedFields)
        {
            StringBuilder sb = new StringBuilder();

            // Başlık satırı
            sb.AppendLine(string.Join(delimiter.ToString(), selectedFields));

            foreach (var item in data)
            {
                List<string> fields = new List<string>();

                foreach (var field in selectedFields)
                {
                    switch (field.ToLower())
                    {
                        case "id":
                            fields.Add(EscapeCsvField(item.id));
                            break;
                        case "category":
                            fields.Add(EscapeCsvField(item.category));
                            break;
                        case "title":
                            fields.Add(EscapeCsvField(item.title));
                            break;
                        case "content":
                            fields.Add(EscapeCsvField(item.content));
                            break;
                        case "favorite":
                            fields.Add(item.favorite.ToString());
                            break;
                        case "pinned":
                            fields.Add(item.pinned.ToString());
                            break;
                        case "timestamp":
                            fields.Add(item.timestamp.ToString());
                            break;
                        case "backgroundcolor":
                            fields.Add(EscapeCsvField(item.backgroundColor));
                            break;
                        default:
                            fields.Add("");
                            break;
                    }
                }

                sb.AppendLine(string.Join(delimiter.ToString(), fields));
            }

            File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8);
        }

        /// <summary>
        /// Saves data as TXT file.
        /// </summary>
        private void SaveDataAsTxt(List<FlashcardItem> data, string filePath, List<string> selectedFields)
        {
            StringBuilder sb = new StringBuilder();

            foreach (var item in data)
            {
                foreach (var field in selectedFields)
                {
                    switch (field.ToLower())
                    {
                        case "id":
                            sb.AppendLine($"ID: {item.id}");
                            break;
                        case "category":
                            sb.AppendLine($"Category: {item.category}");
                            break;
                        case "title":
                            sb.AppendLine($"Title: {item.title}");
                            break;
                        case "content":
                            sb.AppendLine($"Content: {item.content}");
                            break;
                        case "favorite":
                            sb.AppendLine($"Favorite: {item.favorite}");
                            break;
                        case "pinned":
                            sb.AppendLine($"Pinned: {item.pinned}");
                            break;
                        case "timestamp":
                            DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(item.timestamp);
                            DateTime dateTime = dateTimeOffset.ToLocalTime().DateTime;
                            sb.AppendLine($"Timestamp: {dateTime.ToString("yyyy-MM-dd HH:mm:ss")}");
                            break;
                        case "backgroundcolor":
                            sb.AppendLine($"BackgroundColor: {item.backgroundColor}");
                            break;
                        default:
                            sb.AppendLine($"{field}: ");
                            break;
                    }
                }
                sb.AppendLine(new string('-', 50));
            }

            File.WriteAllText(filePath, sb.ToString(), Encoding.UTF8);
        }

        /// <summary>
        /// Saves data as PDF file using selected fields.
        /// </summary>
        private void SaveDataAsPdf(List<FlashcardItem> data, string filePath, List<string> selectedFields)
        {
            try
            {
                Document document = new Document(PageSize.A4, 25, 25, 30, 30);
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(filePath, FileMode.Create));
                document.Open();

                // Add Title
                iTextSharp.text.Font titleFont = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 16);
                Paragraph title = new Paragraph("Flashcards Export", titleFont)
                {
                    Alignment = Element.ALIGN_CENTER,
                    SpacingAfter = 20
                };
                document.Add(title);

                // Create a table with the number of selected fields
                PdfPTable table = new PdfPTable(selectedFields.Count);
                table.WidthPercentage = 100;

                // Add table headers
                iTextSharp.text.Font headerFont = FontFactory.GetFont(FontFactory.HELVETICA_BOLD, 12);
                foreach (var field in selectedFields)
                {
                    PdfPCell cell = new PdfPCell(new Phrase(field, headerFont))
                    {
                        HorizontalAlignment = Element.ALIGN_CENTER,
                        Padding = 5,
                        BackgroundColor = BaseColor.LIGHT_GRAY
                    };
                    table.AddCell(cell);
                }

                // Add table data
                iTextSharp.text.Font dataFont = FontFactory.GetFont(FontFactory.HELVETICA, 12);
                foreach (var item in data)
                {
                    foreach (var field in selectedFields)
                    {
                        string cellData = "";
                        switch (field.ToLower())
                        {
                            case "id":
                                cellData = item.id;
                                break;
                            case "category":
                                cellData = item.category;
                                break;
                            case "title":
                                cellData = item.title;
                                break;
                            case "content":
                                cellData = item.content;
                                break;
                            case "favorite":
                                cellData = item.favorite.ToString();
                                break;
                            case "pinned":
                                cellData = item.pinned.ToString();
                                break;
                            case "timestamp":
                                DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(item.timestamp);
                                DateTime dateTime = dateTimeOffset.ToLocalTime().DateTime;
                                cellData = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                                break;
                            case "backgroundcolor":
                                cellData = item.backgroundColor;
                                break;
                            default:
                                cellData = "";
                                break;
                        }

                        PdfPCell cell = new PdfPCell(new Phrase(cellData, dataFont))
                        {
                            HorizontalAlignment = Element.ALIGN_CENTER,
                            Padding = 5
                        };
                        table.AddCell(cell);
                    }
                }

                document.Add(table);
                document.Close();
                writer.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error saving PDF data: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// Escapes CSV fields containing delimiter or quotes.
        /// </summary>
        private string EscapeCsvField(string field)
        {
            if (field.Contains(",") || field.Contains("\"") || field.Contains("\r") || field.Contains("\n"))
            {
                return $"\"{field.Replace("\"", "\"\"")}\"";
            }
            else
            {
                return field;
            }
        }

        /// <summary>
        /// Handles the Light Mode menu item click.
        /// </summary>
        private void LightModeMenuItem_Click(object sender, EventArgs e)
        {
            SetTheme(Color.White, Color.Black, false);
        }

        /// <summary>
        /// Handles the Dark Mode menu item click.
        /// </summary>
        private void DarkModeMenuItem_Click(object sender, EventArgs e)
        {
            SetTheme(Color.FromArgb(45, 45, 48), Color.White, true);
        }

        /// <summary>
        /// Sets the application's theme colors.
        /// </summary>
        private void SetTheme(Color backColor, Color foreColor, bool isDarkMode)
        {
            this.BackColor = backColor;
            this.ForeColor = foreColor;

            foreach (Control control in this.Controls)
            {
                SetControlTheme(control, backColor, foreColor);
            }

            // DataGridView renklerini ayarla
            dataGridView.BackgroundColor = backColor;
            dataGridView.DefaultCellStyle.BackColor = backColor;
            dataGridView.DefaultCellStyle.ForeColor = foreColor;

            // Dark mode ise DataGridView kenarlarını, sütun başlıklarını ve yan seçim alanını portakal rengi yap
            if (isDarkMode)
            {
                dataGridView.GridColor = Color.Orange;
                dataGridView.EnableHeadersVisualStyles = false;
                dataGridView.ColumnHeadersDefaultCellStyle.BackColor = Color.Orange;
                dataGridView.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
                dataGridView.RowHeadersDefaultCellStyle.BackColor = Color.Orange;
                dataGridView.RowHeadersDefaultCellStyle.ForeColor = Color.Black;

                // Satır yüksekliğini ve yazı boyutunu ayarla
                dataGridView.RowTemplate.Height = 30; // Satır yüksekliği
                dataGridView.DefaultCellStyle.Font = new System.Drawing.Font("Arial", 12, FontStyle.Regular); // Yazı boyutu

                // Satır çizgilerini kaldır
                dataGridView.CellBorderStyle = DataGridViewCellBorderStyle.None;

            }
            else
            {
                dataGridView.EnableHeadersVisualStyles = true;
                dataGridView.GridColor = foreColor;

                dataGridView.ColumnHeadersDefaultCellStyle.BackColor = backColor;
                dataGridView.ColumnHeadersDefaultCellStyle.ForeColor = foreColor;
                dataGridView.RowHeadersDefaultCellStyle.BackColor = backColor;
                dataGridView.RowHeadersDefaultCellStyle.ForeColor = foreColor;
            }
        }

        /// <summary>
        /// Recursively sets theme colors for controls.
        /// </summary>
        private void SetControlTheme(Control control, Color backColor, Color foreColor)
        {
            control.BackColor = backColor;
            control.ForeColor = foreColor;

            if (control.HasChildren)
            {
                foreach (Control child in control.Controls)
                {
                    SetControlTheme(child, backColor, foreColor);
                }
            }
        }

        /// <summary>
        /// Handles CellContentClick events for CheckBox columns to toggle favorite and pinned statuses.
        /// </summary>
        private void DataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && (dataGridView.Columns[e.ColumnIndex].Name == "favorite" || dataGridView.Columns[e.ColumnIndex].Name == "pinned"))
            {
                var flashcard = (FlashcardItem)dataGridView.Rows[e.RowIndex].DataBoundItem;
                bool newValue = !(bool)dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;

                if (dataGridView.Columns[e.ColumnIndex].Name == "favorite")
                {
                    flashcard.favorite = newValue;
                }
                else
                {
                    flashcard.pinned = newValue;
                }

                _ = UpdateFlashcardInDatabase(flashcard);
            }
        }

        /// <summary>
        /// Updates a flashcard in the Firebase database and local storage.
        /// </summary>
        private async Task UpdateFlashcardInDatabase(FlashcardItem flashcard)
        {
            try
            {
                // Update local data
                var index = allFlashcards.FindIndex(f => f.id == flashcard.id);
                if (index >= 0)
                {
                    allFlashcards[index] = flashcard;
                    SaveLocalData(); // Save to local storage
                }

                if (isOnline)
                {
                    await firebaseClient
                        .Child("flashcards")
                        .Child(flashcard.id)
                        .PutAsync(flashcard);
                }
                else
                {
                    // Add to offline changes
                    offlineChanges.Add(new FlashcardChange { ChangeType = ChangeType.Update, Flashcard = flashcard });
                    SaveOfflineChanges(); // Offline changes'i kaydet

                    // Update local data is already done
                }

                ApplyFiltersAndSort();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error updating flashcard: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private async Task LoadDataAsync()
        {
            try
            {
                if (isOnline)
                {
                    // We assume that real-time listener will update the data
                    // So we don't fetch all data here
                }

                // After data is loaded, populate the ContextMenuStrip
                PopulateColumnContextMenu();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error loading data: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ApplyFiltersAndSort()
        {
            // Başlangıç olarak tüm flashcard'ları al
            IEnumerable<FlashcardItem> filtered = allFlashcards;

            // Favoriler filtresini uygula
            if (chkFilterFavorites.Checked)
            {
                filtered = filtered.Where(f => f.favorite);
            }

            // Sabitlenmiş filtresini uygula
            if (chkFilterPinned.Checked)
            {
                filtered = filtered.Where(f => f.pinned);
            }

            // Custom Tag seçili değilse kategori filtresini uygula
            if (string.IsNullOrEmpty(selectedCustomTag))
            {
                if (!string.IsNullOrEmpty(selectedTag))
                {
                    if (selectedTag.Equals("All Categories", StringComparison.OrdinalIgnoreCase))
                    {
                        // "All Categories" seçildiğinde, kategori filtresi uygulama
                        // Tüm kategoriler gösterilir
                    }
                    else if (selectedTag.Equals("uncategorized", StringComparison.OrdinalIgnoreCase))
                    {
                        // "uncategorized" seçildiğinde sadece bu kategoriye sahip flashcard'ları göster
                        filtered = filtered.Where(f => f.category.Equals("uncategorized", StringComparison.OrdinalIgnoreCase));
                    }
                    else
                    {
                        // Diğer kategoriler için normal filtreleme
                        filtered = filtered.Where(f => f.category.Equals(selectedTag, StringComparison.OrdinalIgnoreCase));
                    }
                }
            }

            // Arama filtresini uygula
            if (!string.IsNullOrWhiteSpace(currentSearchTerm))
            {
                filtered = filtered.Where(f =>
                    f.title.ToLower().Contains(currentSearchTerm) ||
                    f.category.ToLower().Contains(currentSearchTerm) ||
                    f.content.ToLower().Contains(currentSearchTerm));
            }

            // Listeye dönüştür
            List<FlashcardItem> filteredList = filtered.ToList();

            // Sıralama işlemini uygula
            if (!string.IsNullOrEmpty(currentSortColumn))
            {
                if (sortAscending)
                {
                    switch (currentSortColumn)
                    {
                        case "title":
                            filteredList = filteredList.OrderBy(f => f.title).ToList();
                            break;
                        case "timestamp":
                            filteredList = filteredList.OrderBy(f => f.timestamp).ToList();
                            break;
                    }
                }
                else
                {
                    switch (currentSortColumn)
                    {
                        case "title":
                            filteredList = filteredList.OrderByDescending(f => f.title).ToList();
                            break;
                        case "timestamp":
                            filteredList = filteredList.OrderByDescending(f => f.timestamp).ToList();
                            break;
                    }
                }
            }

            UpdateDataGridView(filteredList);
        }        /// Updates the DataGridView with the provided list of flashcards.
                 /// </summary>
        private void UpdateDataGridView(List<FlashcardItem> flashcards)
        {
            // SelectionChanged olayını geçici olarak devre dışı bırak
            dataGridView.SelectionChanged -= DataGridView_SelectionChanged;

            // DataGridView'i temizlemeden önce mevcut sütunları ve görünümleri kontrol et
            var columnSettings = new Dictionary<string, bool>();
            foreach (DataGridViewColumn column in dataGridView.Columns)
            {
                columnSettings[column.Name] = column.Visible;
            }

            dataGridView.DataSource = null;
            dataGridView.Columns.Clear();

            if (flashcards.Any())
            {
                dataGridView.AutoGenerateColumns = false;

                // Define DataGridView columns

                // ID Column - Hidden
                var idColumn = new DataGridViewTextBoxColumn
                {
                    DataPropertyName = "id",
                    HeaderText = "ID",
                    Name = "id",
                    Visible = false
                };
                dataGridView.Columns.Add(idColumn);

                // Category Column
                var categoryColumn = new DataGridViewTextBoxColumn
                {
                    DataPropertyName = "category",
                    HeaderText = "Category",
                    Name = "category",
                    SortMode = DataGridViewColumnSortMode.NotSortable
                };
                dataGridView.Columns.Add(categoryColumn);

                // Title Column
                var titleColumn = new DataGridViewTextBoxColumn
                {
                    DataPropertyName = "title",
                    HeaderText = "Title",
                    Name = "title",
                    SortMode = DataGridViewColumnSortMode.Programmatic
                };
                dataGridView.Columns.Add(titleColumn);

                // Content Column
                var contentColumn = new DataGridViewTextBoxColumn
                {
                    DataPropertyName = "content",
                    HeaderText = "Content",
                    Name = "content",
                    SortMode = DataGridViewColumnSortMode.NotSortable
                };
                dataGridView.Columns.Add(contentColumn);

                // Favorite Column (Checkbox)
                var favoriteColumn = new DataGridViewCheckBoxColumn
                {
                    DataPropertyName = "favorite",
                    HeaderText = "Favorite",
                    Name = "favorite",
                    SortMode = DataGridViewColumnSortMode.Automatic
                };
                dataGridView.Columns.Add(favoriteColumn);

                // Pinned Column (Checkbox)
                var pinnedColumn = new DataGridViewCheckBoxColumn
                {
                    DataPropertyName = "pinned",
                    HeaderText = "Pinned",
                    Name = "pinned",
                    SortMode = DataGridViewColumnSortMode.Automatic
                };
                dataGridView.Columns.Add(pinnedColumn);

                // Timestamp Column
                var timestampColumn = new DataGridViewTextBoxColumn
                {
                    DataPropertyName = "timestamp",
                    HeaderText = "Timestamp",
                    Name = "timestamp",
                    SortMode = DataGridViewColumnSortMode.Programmatic
                };
                dataGridView.Columns.Add(timestampColumn);

                // BackgroundColor Column
                var backgroundColorColumn = new DataGridViewTextBoxColumn
                {
                    DataPropertyName = "backgroundColor",
                    HeaderText = "Background Color",
                    Name = "backgroundColor",
                    SortMode = DataGridViewColumnSortMode.NotSortable
                };
                dataGridView.Columns.Add(backgroundColorColumn);

                dataGridView.DataSource = flashcards;
                dataGridView.ClearSelection(); // Seçimi temizle

                // Sütun görünürlüklerini geri yükle
                foreach (DataGridViewColumn column in dataGridView.Columns)
                {
                    if (columnSettings.ContainsKey(column.Name))
                    {
                        column.Visible = columnSettings[column.Name];
                    }
                }
            }
            else
            {
                // If no flashcards match the filters, display a message
                var messageColumn = new DataGridViewTextBoxColumn
                {
                    HeaderText = "Message",
                    Name = "Message",
                    AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
                };
                dataGridView.Columns.Add(messageColumn);
                dataGridView.Rows.Add("No flashcards found.");
            }

            // Restore column visibility state
            RestoreColumnVisibilityState();

            // Update the status label with the count
            statusLabel.Text = $"Total Items: {flashcards.Count}";

            // SelectionChanged olayını tekrar etkinleştir
            dataGridView.SelectionChanged += DataGridView_SelectionChanged;
        }

        /// <summary>
        /// Populates the ContextMenuStrip with the current DataGridView columns.
        /// Ensures no duplicate menu items are added.
        /// </summary>
        private void PopulateColumnContextMenu()
        {
            columnContextMenu.Items.Clear(); // Clear existing items to prevent duplication

            foreach (DataGridViewColumn column in dataGridView.Columns)
            {
                // Skip hidden or irrelevant columns if necessary
                // For example, you might want to skip the "ID" column
                if (column.Name == "id") continue;

                // Create a ToolStripMenuItem for the column
                var menuItem = new ToolStripMenuItem(column.HeaderText)
                {
                    Checked = column.Visible,
                    CheckOnClick = true,
                    Tag = column // Store the column in Tag for reference
                };
                menuItem.CheckedChanged += ColumnMenuItem_CheckedChanged;

                // Add the menu item to the ContextMenuStrip
                columnContextMenu.Items.Add(menuItem);
            }
        }

        /// <summary>
        /// Handles the CheckedChanged event of ContextMenuStrip items to toggle column visibility.
        /// </summary>
        private void ColumnMenuItem_CheckedChanged(object sender, EventArgs e)
        {
            if (sender is ToolStripMenuItem menuItem && menuItem.Tag is DataGridViewColumn column)
            {
                column.Visible = menuItem.Checked;
                columnVisibilityState[column.Name] = column.Visible; // Update the visibility state
            }
        }

        /// <summary>
        /// Shows the ContextMenuStrip when the user right-clicks on a column header.
        /// </summary>
        private void DataGridView_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                var hitTestInfo = dataGridView.HitTest(e.X, e.Y);
                if (hitTestInfo.Type == DataGridViewHitTestType.ColumnHeader)
                {
                    // Show the ContextMenuStrip at the mouse position
                    columnContextMenu.Show(dataGridView, new Point(e.X, e.Y));
                }
            }
        }

        /// <summary>
        /// Handles the Form Load event to initially load data and start real-time listener.
        /// </summary>
        private async void MainForm_Load(object sender, EventArgs e)
        {
            LoadCustomTags(); // Eklendi

            // Load local data first
            LoadLocalData();
            LoadOfflineChanges(); // Yeni eklenen
            ApplyFiltersAndSort();

            // Varsayılan sıralamayı ayarladık
            currentSortColumn = "timestamp";
            sortAscending = false;

            // Start online status timer
            onlineStatusTimer.Start();

            if (CheckInternetConnection())
            {
                isOnline = true;
                // Start real-time listener if not already started
                if (!isListening)
                {
                    RealTimeListener();
                }
                await ProcessOfflineChanges();
            }
            else
            {
                isOnline = false;
            }

            // Populate Filter Categories menu after data is loaded
            PopulateFilterCategoriesMenu();
        }

        /// <summary>
        /// Adds a new flashcard to the Firebase database and local storage.
        /// </summary>
        private async void AddData()
        {
            var newFlashcard = CreateFlashcardFromInputs();
            if (newFlashcard != null)
            {
                try
                {
                    // Check if the flashcard already exists to prevent duplicate entries
                    if (IsDuplicateFlashcard(newFlashcard))
                    {
                        MessageBox.Show("This flashcard already exists.", "Duplicate Entry", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }

                    newFlashcard.id = Guid.NewGuid().ToString();

                    if (isOnline)
                    {
                        await firebaseClient
                            .Child("flashcards")
                            .Child(newFlashcard.id)
                            .PutAsync(newFlashcard);

                        // Do not add to allFlashcards here; real-time listener will handle it
                    }
                    else
                    {
                        // Add to offline changes
                        offlineChanges.Add(new FlashcardChange { ChangeType = ChangeType.Add, Flashcard = newFlashcard });
                        SaveOfflineChanges(); // Offline changes'i kaydet

                        // Update local data
                        allFlashcards.Add(newFlashcard);
                        SaveLocalData();

                        ApplyFiltersAndSort();
                    }

                    ClearInputs();

                    // Refresh Filter Categories menu as a new category might have been added
                    PopulateFilterCategoriesMenu();
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error adding flashcard: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        /// <summary>
        /// Checks if a flashcard with the same content already exists.
        /// </summary>
        private bool IsDuplicateFlashcard(FlashcardItem newFlashcard)
        {
            return allFlashcards.Any(f =>
                f.title == newFlashcard.title &&
                f.category == newFlashcard.category &&
                f.content == newFlashcard.content);
        }

        /// <summary>
        /// Updates the selected flashcard in the Firebase database and local storage.
        /// </summary>
        private async void UpdateData()
        {
            if (dataGridView.SelectedRows.Count > 0)
            {
                var selectedFlashcard = (FlashcardItem)dataGridView.SelectedRows[0].DataBoundItem;
                var updatedFlashcard = CreateFlashcardFromInputs();
                if (updatedFlashcard != null)
                {
                    updatedFlashcard.id = selectedFlashcard.id;
                    updatedFlashcard.timestamp = selectedFlashcard.timestamp; // Zaman damgasını koru

                    // Check for duplicates excluding the current flashcard
                    if (IsDuplicateFlashcardExcludingCurrent(updatedFlashcard))
                    {
                        MessageBox.Show("A flashcard with the same content already exists.", "Duplicate Entry", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }

                    try
                    {
                        if (isOnline)
                        {
                            await firebaseClient
                                .Child("flashcards")
                                .Child(updatedFlashcard.id)
                                .PutAsync(updatedFlashcard);

                            // Do not update allFlashcards here; real-time listener will handle it
                        }
                        else
                        {
                            // Add to offline changes
                            offlineChanges.Add(new FlashcardChange { ChangeType = ChangeType.Update, Flashcard = updatedFlashcard });
                            SaveOfflineChanges(); // Offline changes'i kaydet

                            // Update local data
                            var index = allFlashcards.FindIndex(f => f.id == updatedFlashcard.id);
                            if (index >= 0)
                            {
                                allFlashcards[index] = updatedFlashcard;
                                SaveLocalData();

                                ApplyFiltersAndSort();
                            }
                        }

                        ClearInputs();

                        // Refresh Filter Categories menu as category might have changed
                        PopulateFilterCategoriesMenu();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show($"Error updating flashcard: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            else
            {
                MessageBox.Show("Please select a flashcard to update.", "No Selection", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        /// <summary>
        /// Checks for duplicates excluding the current flashcard being updated.
        /// </summary>
        private bool IsDuplicateFlashcardExcludingCurrent(FlashcardItem updatedFlashcard)
        {
            return allFlashcards.Any(f =>
                f.id != updatedFlashcard.id &&
                f.title == updatedFlashcard.title &&
                f.category == updatedFlashcard.category &&
                f.content == updatedFlashcard.content);
        }

        /// <summary>
        /// Deletes selected flashcards from the Firebase database and local storage.
        /// </summary>
        private async void DeleteData()
        {
            if (dataGridView.SelectedRows.Count > 0)
            {
                int selectedCount = dataGridView.SelectedRows.Count;
                var confirmResult = MessageBox.Show($"Are you sure you want to delete {selectedCount} flashcard(s)?",
                                                    "Confirm Delete",
                                                    MessageBoxButtons.YesNo,
                                                    MessageBoxIcon.Question);
                if (confirmResult == DialogResult.Yes)
                {
                    try
                    {
                        var idsToDelete = dataGridView.SelectedRows
                            .Cast<DataGridViewRow>()
                            .Select(row => ((FlashcardItem)row.DataBoundItem).id)
                            .ToList();

                        if (isOnline)
                        {
                            // Create a list of delete tasks
                            var deleteTasks = idsToDelete
                                .Select(id => firebaseClient.Child("flashcards").Child(id).DeleteAsync())
                                .ToList();

                            // Execute all delete tasks in parallel
                            await Task.WhenAll(deleteTasks);

                            // Do not remove from allFlashcards; real-time listener will handle it
                        }
                        else
                        {
                            // Add to offline changes
                            foreach (var id in idsToDelete)
                            {
                                var flashcard = allFlashcards.FirstOrDefault(f => f.id == id);
                                if (flashcard != null)
                                {
                                    offlineChanges.Add(new FlashcardChange { ChangeType = ChangeType.Delete, Flashcard = flashcard });
                                }
                            }
                            SaveOfflineChanges(); // Offline changes'i kaydet

                            // Remove from local data
                            allFlashcards.RemoveAll(f => idsToDelete.Contains(f.id));
                            SaveLocalData();

                            ApplyFiltersAndSort();
                        }

                        // Clear inputs
                        ClearInputs();

                        MessageBox.Show($"{selectedCount} flashcard(s) deleted successfully!",
                                        "Success",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Information);

                        // Refresh Filter Categories menu as categories might have been deleted
                        PopulateFilterCategoriesMenu();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show($"Error deleting flashcards: {ex.Message}",
                                        "Error",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                    }
                }
            }
            else
            {
                MessageBox.Show("Please select one or more flashcards to delete.",
                                "No Selection",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Warning);
            }
        }

        /// <summary>
        /// Creates a FlashcardItem object from the input fields.
        /// </summary>
        private FlashcardItem CreateFlashcardFromInputs()
        {
            string title = txtTitle.Text.Trim();
            string content = txtContent.Text.Trim();
            string backgroundColor = txtBackgroundColor.Text.Trim();

            // Kategori belirleme
            string category;
            if (!string.IsNullOrWhiteSpace(selectedCustomTag))
            {
                category = selectedCustomTag;
            }
            else if (!string.IsNullOrWhiteSpace(txtCategory.Text))
            {
                category = txtCategory.Text.Trim();
            }
            else
            {
                category = "uncategorized";
            }

            return new FlashcardItem
            {
                title = title,
                category = category,
                content = content,
                favorite = chkFavorite.Checked,
                pinned = chkPinned.Checked,
                timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                backgroundColor = backgroundColor
            };
        }

        /// <summary>
        /// Clears the input fields.
        /// </summary>
        private void ClearInputs()
        {
            txtTitle.Text = "";
            txtCategory.Text = "";
            txtContent.Text = "";
            txtBackgroundColor.Text = "";
            chkFavorite.Checked = false;
            chkPinned.Checked = false;
        }

        /// <summary>
        /// Handles the selection change in the DataGridView to populate the input fields.
        /// </summary>
        private void DataGridView_SelectionChanged(object sender, EventArgs e)
        {
            if (dataGridView.SelectedRows.Count > 0)
            {
                var selectedFlashcard = (FlashcardItem)dataGridView.SelectedRows[0].DataBoundItem;
                txtTitle.Text = selectedFlashcard.title;
                txtTitle.ForeColor = Color.Black;
                txtCategory.Text = selectedFlashcard.category;
                txtCategory.ForeColor = Color.Black;
                txtContent.Text = selectedFlashcard.content;
                txtContent.ForeColor = Color.Black;
                txtBackgroundColor.Text = selectedFlashcard.backgroundColor;
                txtBackgroundColor.ForeColor = Color.Black;
                chkFavorite.Checked = selectedFlashcard.favorite;
                chkPinned.Checked = selectedFlashcard.pinned;
            }
            else
            {
                // Seçim yoksa metin kutularını temizle
                ClearInputs();
            }
        }

        /// <summary>
        /// Sets up a real-time listener to Firebase to update data upon changes.
        /// </summary>
        private void RealTimeListener()
        {
            isListening = true;

            firebaseClient
                .Child("flashcards")
                .AsObservable<FlashcardItem>()
                .Subscribe(d =>
                {
                    if (d.Object != null)
                    {
                        HandleRealTimeUpdate(d.Key, d.EventType, d.Object);
                    }
                    else if (d.EventType == FirebaseEventType.Delete)
                    {
                        HandleRealTimeUpdate(d.Key, d.EventType, null);
                    }
                });
        }

        /// <summary>
        /// Handles real-time updates from Firebase.
        /// </summary>
        /// <param name="key">Firebase key</param>
        /// <param name="eventType">Event Type</param>
        /// <param name="flashcard">The updated flashcard item.</param>
        private void HandleRealTimeUpdate(string key, FirebaseEventType eventType, FlashcardItem flashcard)
        {
            Invoke((Action)(() =>
            {
                var index = allFlashcards.FindIndex(f => f.id == key);

                if (eventType == FirebaseEventType.Delete)
                {
                    if (index >= 0)
                    {
                        allFlashcards.RemoveAt(index);
                        SaveLocalData();
                        ApplyFiltersAndSort();

                        // Refresh Filter Categories menu as categories might have been removed
                        PopulateFilterCategoriesMenu();
                    }
                }
                else if (flashcard != null)
                {
                    // Ensure that the id is set properly
                    flashcard.id = key;

                    if (index >= 0)
                    {
                        // Update existing item
                        allFlashcards[index] = flashcard;
                    }
                    else
                    {
                        // Add new item only if it doesn't exist
                        allFlashcards.Add(flashcard);
                    }
                    SaveLocalData();
                    ApplyFiltersAndSort();

                    // Refresh Filter Categories menu as new categories might have been added
                    PopulateFilterCategoriesMenu();
                }
            }));
        }

        private void SaveLocalData()
        {
            try
            {
                string json = JsonConvert.SerializeObject(allFlashcards);
                File.WriteAllText(localDataFilePath, json);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error saving local data: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void LoadLocalData()
        {
            if (File.Exists(localDataFilePath))
            {
                try
                {
                    string json = File.ReadAllText(localDataFilePath);
                    allFlashcards = JsonConvert.DeserializeObject<List<FlashcardItem>>(json);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error loading local data: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                allFlashcards = new List<FlashcardItem>();
            }
        }

        /// <summary>
        /// Checks if there is an active internet connection.
        /// </summary>
        /// <returns>True if online, otherwise false.</returns>
        private bool CheckInternetConnection()
        {
            try
            {
                using (var client = new System.Net.WebClient())
                using (client.OpenRead("http://clients3.google.com/generate_204"))
                    return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// Handles the Search button click to apply search criteria.
        /// </summary>
        private void SearchData()
        {
            string searchText = txtSearch.Text;
            if (string.IsNullOrWhiteSpace(searchText))
            {
                currentSearchTerm = "";
            }
            else
            {
                currentSearchTerm = searchText.ToLower();
            }

            ApplyFiltersAndSort();
        }

        /// <summary>
        /// Clears the search input and resets search filter.
        /// </summary>
        private void ClearSearch()
        {
            txtSearch.Text = "";
            currentSearchTerm = "";
            ApplyFiltersAndSort();
        }

        /// <summary>
        /// Formats the timestamp column to display human-readable dates.
        /// </summary>
        private void DataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (dataGridView.Columns[e.ColumnIndex].Name == "timestamp")
            {
                if (e.Value != null && long.TryParse(e.Value.ToString(), out long timestamp))
                {
                    DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(timestamp);
                    DateTime dateTime = dateTimeOffset.ToLocalTime().DateTime;
                    e.Value = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
                    e.FormattingApplied = true;
                }
            }
        }

        /// <summary>
        /// Handles the column header click event to apply sorting.
        /// </summary>
        private void DataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            string columnName = dataGridView.Columns[e.ColumnIndex].Name;

            // Only allow sorting on 'title' and 'timestamp' columns
            if (columnName == "title" || columnName == "timestamp")
            {
                // Toggle sort direction if the same column is clicked
                if (currentSortColumn == columnName)
                {
                    sortAscending = !sortAscending;
                }
                else
                {
                    // Default to ascending if a new column is clicked
                    currentSortColumn = columnName;
                    sortAscending = true;
                }

                // Apply sorting and refresh DataGridView
                ApplyFiltersAndSort();

                // Reset sort glyphs on all columns
                foreach (DataGridViewColumn column in dataGridView.Columns)
                {
                    column.HeaderCell.SortGlyphDirection = SortOrder.None;
                }

                // Set sort glyph on the sorted column
                dataGridView.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = sortAscending ? SortOrder.Ascending : SortOrder.Descending;
            }
        }

        /// <summary>
        /// Handles CheckedChanged events for filtering CheckBoxes.
        /// </summary>
        private void FilterCheckBoxChanged(object sender, EventArgs e)
        {
            ApplyFiltersAndSort();
        }

        /// <summary>
        /// Restores the column visibility state from the stored dictionary.
        /// </summary>
        private void RestoreColumnVisibilityState()
        {
            foreach (DataGridViewColumn column in dataGridView.Columns)
            {
                if (columnVisibilityState.TryGetValue(column.Name, out bool isVisible))
                {
                    column.Visible = isVisible;
                }
            }
        }

        /// <summary>
        /// Handles MouseDown event on the background panel to clear inputs.
        /// </summary>
        private void BackgroundPanel_MouseDown(object sender, MouseEventArgs e)
        {
            ClearInputs();
        }

        // Yeni Eklenen Metodlar ve Event Handler'lar

        private void ClipboardOnMenuItem_Click(object sender, EventArgs e)
        {
            clipboardOnMenuItem.Checked = true;
            clipboardOffMenuItem.Checked = false;

            StartClipboardMonitoring();
        }

        private void ClipboardOffMenuItem_Click(object sender, EventArgs e)
        {
            clipboardOnMenuItem.Checked = false;
            clipboardOffMenuItem.Checked = true;

            // Stop monitoring if Language Mode is not active
            if (!isLanguageModeActive)
            {
                StopClipboardMonitoring();
            }
        }

        private void StartClipboardMonitoring()
        {
            clipboardOnMenuItem.Checked = true;
            clipboardOffMenuItem.Checked = false;

            // Panodaki mevcut metni alarak lastClipboardText'e atıyoruz
            if (Clipboard.ContainsText())
            {
                lastClipboardText = Clipboard.GetText();
            }
            else
            {
                lastClipboardText = null;
            }

            clipboardMonitorTimer.Start();
        }

        private void StopClipboardMonitoring()
        {
            clipboardOnMenuItem.Checked = false;
            clipboardOffMenuItem.Checked = true;

            clipboardMonitorTimer.Stop();
        }

        private async void ClipboardMonitorTimer_Tick(object sender, EventArgs e)
        {
            await CheckClipboard();
        }
        private void LanguageModeOnMenuItem_Click(object sender, EventArgs e)
        {
            // Enable Language Mode, which inherently enables Clipboard Monitoring as well
            languageModeOnMenuItem.Checked = true;
            languageModeOffMenuItem.Checked = false;
            isLanguageModeActive = true;
            StartClipboardMonitoring();
        }

        private void LanguageModeOffMenuItem_Click(object sender, EventArgs e)
        {
            // Disable Language Mode, which inherently disables Clipboard Monitoring as well
            languageModeOnMenuItem.Checked = false;
            languageModeOffMenuItem.Checked = true;
            isLanguageModeActive = false;
            // If Clipboard Mode is not active, stop monitoring
            if (clipboardOffMenuItem.Checked)
            {
                StopClipboardMonitoring();
            }
        }
        private async Task CheckClipboard()
        {
            try
            {
                if (Clipboard.ContainsText())
                {
                    string clipboardText = Clipboard.GetText();

                    if (clipboardText != lastClipboardText)
                    {
                        lastClipboardText = clipboardText;
                        string singleLineText = clipboardText.Replace(Environment.NewLine, " ");

                        if (isLanguageModeActive)
                        {
                            // Add text to buffer for Language Mode
                            clipboardBuffer.Add(singleLineText);

                            if (clipboardBuffer.Count == 2)
                            {
                                // Create Flashcard from buffer
                                string category = GetSelectedCategory();
                                var newFlashcard = new FlashcardItem
                                {
                                    title = clipboardBuffer[0],
                                    category = category,
                                    content = clipboardBuffer[1],
                                    favorite = false,
                                    pinned = false,
                                    timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                                    backgroundColor = ""
                                };

                                clipboardBuffer.Clear();  // Clear buffer
                                await SaveFlashcardToDatabase(newFlashcard);
                            }
                        }
                        else
                        {
                            // Normal Clipboard Mode - each clipboard entry creates a new flashcard
                            var newFlashcard = new FlashcardItem
                            {
                                title = singleLineText,
                                category = GetSelectedCategory(),
                                content = "",
                                favorite = false,
                                pinned = false,
                                timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                                backgroundColor = ""
                            };

                            await SaveFlashcardToDatabase(newFlashcard);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // Handle exception (e.g., access to the clipboard is blocked)
            }
        }
        private string GetSelectedCategory()
        {
            if (!string.IsNullOrWhiteSpace(selectedCustomTag))
            {
                return selectedCustomTag;
            }

            if (tagCheckedListBox.CheckedItems.Count > 0)
            {
                return tagCheckedListBox.CheckedItems[0].ToString();
            }

            return "uncategorized";
        }

        private async Task SaveFlashcardToDatabase(FlashcardItem flashcard)
        {
            try
            {
                // Check if the flashcard already exists to prevent duplicate entries
                if (IsDuplicateFlashcard(flashcard))
                {
                    // You can choose to notify the user here if desired
                    return;
                }

                flashcard.id = Guid.NewGuid().ToString();

                if (isOnline)
                {
                    await firebaseClient
                        .Child("flashcards")
                        .Child(flashcard.id)
                        .PutAsync(flashcard);

                    // Do not add to allFlashcards here; real-time listener will handle it
                }
                else
                {
                    // Add to offline changes
                    offlineChanges.Add(new FlashcardChange { ChangeType = ChangeType.Add, Flashcard = flashcard });
                    SaveOfflineChanges(); // Offline changes'i kaydet

                    // Add to local data
                    allFlashcards.Add(flashcard);
                    SaveLocalData();

                    ApplyFiltersAndSort();
                }

                // Refresh Filter Categories menu as a new category might have been added
                PopulateFilterCategoriesMenu();
            }
            catch (Exception ex)
            {
                // Hata yönetimi
            }
        }

        private void LoadTagsMenuItem_Click(object sender, EventArgs e)
        {
            using (FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog())
            {
                folderBrowserDialog.Description = "Klasör Seçin";
                if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
                {
                    string selectedFolder = folderBrowserDialog.SelectedPath;

                    // Klasördeki ve alt klasörlerdeki PDF dosyalarını al
                    string[] pdfFiles = Directory.GetFiles(selectedFolder, "*.pdf", SearchOption.AllDirectories);

                    // Dosya isimlerini al (uzantısız)
                    List<string> tags = pdfFiles.Select(file => Path.GetFileNameWithoutExtension(file)).ToList();

                    // CheckedListBox'ı güncelle
                    tagCheckedListBox.Items.Clear();
                    foreach (var tag in tags)
                    {
                        tagCheckedListBox.Items.Add(tag);
                    }
                }
            }
        }

        private void TagCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            // Eğer Custom Tag'de bir etiket seçilirse diğerlerini işaretlemeyi kaldır
            if (e.NewValue == CheckState.Checked)
            {
                for (int i = 0; i < tagCheckedListBox.Items.Count; i++)
                {
                    if (i != e.Index)
                    {
                        tagCheckedListBox.SetItemChecked(i, false);
                    }
                }
                selectedTag = tagCheckedListBox.Items[e.Index].ToString();

                // Custom Tag seçimini kaldır
                selectedCustomTag = null;
            }
            else
            {
                selectedTag = "uncategorized";
            }

            // Only apply filters if no custom tag is selected
            if (string.IsNullOrEmpty(selectedCustomTag))
            {
                BeginInvoke(new Action(() => ApplyFiltersAndSort()));
            }
        }
        private void AddTagMenuItem_Click(object sender, EventArgs e)
        {
            using (Form inputDialog = new Form())
            {
                inputDialog.Width = 300;
                inputDialog.Height = 150;
                inputDialog.Text = "Add Custom Tag";
                inputDialog.FormBorderStyle = FormBorderStyle.FixedDialog;
                inputDialog.StartPosition = FormStartPosition.CenterParent; // Ekranın ortasında açılsın
                inputDialog.MinimizeBox = false;
                inputDialog.MaximizeBox = false;
                inputDialog.AcceptButton = null; // We'll set the accept button later

                Label lblTag = new Label()
                {
                    Left = 20,
                    Top = 20,
                    Text = "Tag:",
                    AutoSize = false, // Otomatik boyutlandırmayı kapatıyoruz
                    Width = 40, // Daha dar bir genişlik veriyoruz
                    TextAlign = ContentAlignment.TopCenter // Metni sola hizalıyoruz
                };
                TextBox txtTag = new TextBox() { Left = lblTag.Left + lblTag.Width + 5, Top = lblTag.Top - 3, Width = 150 }; // Metin kutusunu etikete yaklaştırıyoruz
                Button btnOK = new Button() { Text = "OK", Left = 50, Width = 100, Top = txtTag.Top + txtTag.Height + 20 };
                Button btnCancel = new Button() { Text = "Cancel", Left = 150, Width = 100, Top = txtTag.Top + txtTag.Height + 20 };

                btnOK.Click += (s, args) =>
                {
                    string newTag = txtTag.Text.Trim();
                    if (!string.IsNullOrEmpty(newTag))
                    {
                        // Add tag to customTags list
                        customTags.Add(newTag);

                        // Save the custom tags to the file
                        SaveCustomTags(); // Eklendi

                        // Add tag as submenu item under customTagMenuItem
                        AddCustomTagMenuItem(newTag);
                        // Close the dialog
                        inputDialog.DialogResult = DialogResult.OK;
                        inputDialog.Close();
                    }
                    else
                    {
                        MessageBox.Show("Tag cannot be empty.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                };

                btnCancel.Click += (s, args) =>
                {
                    inputDialog.DialogResult = DialogResult.Cancel;
                    inputDialog.DialogResult = DialogResult.Cancel;
                    inputDialog.Close();
                };

                inputDialog.Controls.Add(lblTag);
                inputDialog.Controls.Add(txtTag);
                inputDialog.Controls.Add(btnOK);
                inputDialog.Controls.Add(btnCancel);
                inputDialog.AcceptButton = btnOK;

                inputDialog.ShowDialog(); // Show as modal dialog
            }
        }

        private void AddCustomTagMenuItem(string tag)
        {
            ToolStripMenuItem tagMenuItem = new ToolStripMenuItem(tag);
            tagMenuItem.Checked = false;
            tagMenuItem.CheckOnClick = true;

            tagMenuItem.Click += TagMenuItem_Click;

            // Insert the tag menu item after the "Manage Tags" menu item
            int insertIndex = customTagMenuItem.DropDownItems.IndexOf(manageTagsMenuItem) + 1;
            customTagMenuItem.DropDownItems.Insert(insertIndex, tagMenuItem);
        }

        private void TagMenuItem_Click(object sender, EventArgs e)
        {
            // Customize the functionality when a custom tag is clicked
            if (sender is ToolStripMenuItem clickedItem)
            {
                foreach (ToolStripMenuItem item in customTagMenuItem.DropDownItems)
                {
                    if (item != clickedItem && item != addTagMenuItem && item != manageTagsMenuItem)
                    {
                        item.Checked = false;
                    }
                }

                // Update the selectedCustomTag
                if (clickedItem.Checked)
                {
                    selectedCustomTag = clickedItem.Text;

                    // Deselect all category filters
                    foreach (ToolStripMenuItem item in filterCategoryMenuItems)
                    {
                        item.Checked = false;
                    }

                    // Clear selectedTag as it's not in use
                    selectedTag = "uncategorized";
                }
                else
                {
                    selectedCustomTag = null;
                }

                // Do not apply other filters if custom tag is selected
                if (string.IsNullOrEmpty(selectedCustomTag))
                {
                    ApplyFiltersAndSort();
                }
            }
        }

        // Event handler for "Manage Tags" menu item click
        private void ManageTagsMenuItem_Click(object sender, EventArgs e)
        {
            // Open a dialog to manage tags
            using (Form manageTagsForm = new Form())
            {
                manageTagsForm.Width = 300;
                manageTagsForm.Height = 400;
                manageTagsForm.Text = "Manage Tags";
                manageTagsForm.FormBorderStyle = FormBorderStyle.FixedDialog;
                manageTagsForm.StartPosition = FormStartPosition.CenterParent; // Ekranın ortasında açılsın
                manageTagsForm.MinimizeBox = false;
                manageTagsForm.MaximizeBox = false;

                ListBox lstTags = new ListBox() { Left = 10, Top = 10, Width = 260, Height = 300 };
                lstTags.DataSource = null;
                lstTags.DataSource = new List<string>(customTags);

                Button btnEdit = new Button() { Text = "Edit", Left = 10, Width = 80, Top = lstTags.Bottom + 10 };
                Button btnDelete = new Button() { Text = "Delete", Left = 100, Width = 80, Top = lstTags.Bottom + 10 };
                Button btnClose = new Button() { Text = "Close", Left = 190, Width = 80, Top = lstTags.Bottom + 10 };

                btnEdit.Click += (s, args) =>
                {
                    if (lstTags.SelectedItem != null)
                    {
                        string selectedTag = lstTags.SelectedItem.ToString();
                        using (Form editTagForm = new Form())
                        {
                            editTagForm.Width = 300;
                            editTagForm.Height = 150;
                            editTagForm.Text = "Edit Tag";
                            editTagForm.FormBorderStyle = FormBorderStyle.FixedDialog;
                            editTagForm.StartPosition = FormStartPosition.CenterParent; // Ekranın ortasında açılsın
                            editTagForm.MinimizeBox = false;
                            editTagForm.MaximizeBox = false;

                            Label lblTag = new Label()
                            {
                                Left = 10,
                                Top = 20,
                                Text = "Tag:",
                                AutoSize = false,
                                Width = 40, // Daha küçük bir genişlik veriyoruz
                                TextAlign = ContentAlignment.TopCenter
                            };
                            TextBox txtTag = new TextBox() { Left = lblTag.Left + lblTag.Width + 5, Top = lblTag.Top - 3, Width = 150 }; // Metin kutusunu etikete yaklaştırıyoruz
                            txtTag.Text = selectedTag;
                            Button btnOK = new Button() { Text = "OK", Left = 50, Width = 100, Top = txtTag.Top + txtTag.Height + 20 };
                            Button btnCancel = new Button() { Text = "Cancel", Left = 150, Width = 100, Top = txtTag.Top + txtTag.Height + 20 };

                            btnOK.Click += (s2, args2) =>
                            {
                                string newTag = txtTag.Text.Trim();
                                if (!string.IsNullOrEmpty(newTag))
                                {
                                    // Update the tag in customTags list
                                    int index = customTags.IndexOf(selectedTag);
                                    customTags[index] = newTag;

                                    // Save the custom tags to the file
                                    SaveCustomTags(); // Eklendi

                                    // Update the menu item text
                                    foreach (ToolStripMenuItem item in customTagMenuItem.DropDownItems)
                                    {
                                        if (item.Text == selectedTag)
                                        {
                                            item.Text = newTag;
                                            break;
                                        }
                                    }

                                    // Update selectedCustomTag if this tag was the selected one
                                    if (selectedCustomTag == selectedTag)
                                    {
                                        selectedCustomTag = newTag;
                                    }

                                    // Update the listbox
                                    lstTags.DataSource = null;
                                    lstTags.DataSource = new List<string>(customTags);

                                    // Close the edit form
                                    editTagForm.DialogResult = DialogResult.OK;
                                    editTagForm.Close();

                                    // Apply filters again in case category is changed
                                    ApplyFiltersAndSort();

                                    // Refresh Filter Categories menu as category has changed
                                    PopulateFilterCategoriesMenu();
                                }
                                else
                                {
                                    MessageBox.Show("Tag cannot be empty.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }
                            };

                            btnCancel.Click += (s2, args2) =>
                            {
                                editTagForm.DialogResult = DialogResult.Cancel;
                                editTagForm.Close();
                            };

                            editTagForm.Controls.Add(lblTag);
                            editTagForm.Controls.Add(txtTag);
                            editTagForm.Controls.Add(btnOK);
                            editTagForm.Controls.Add(btnCancel);
                            editTagForm.AcceptButton = btnOK;

                            editTagForm.ShowDialog();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Please select a tag to edit.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                };

                btnDelete.Click += (s, args) =>
                {
                    if (lstTags.SelectedItem != null)
                    {
                        string selectedTag = lstTags.SelectedItem.ToString();

                        var confirmResult = MessageBox.Show($"Are you sure you want to delete tag '{selectedTag}'?",
                                            "Confirm Delete",
                                            MessageBoxButtons.YesNo,
                                            MessageBoxIcon.Question);
                        if (confirmResult == DialogResult.Yes)
                        {
                            // Remove from customTags list
                            customTags.Remove(selectedTag);

                            // Save the custom tags to the file
                            SaveCustomTags(); // Eklendi

                            // Remove from menu items
                            ToolStripMenuItem itemToRemove = null;
                            foreach (ToolStripMenuItem item in customTagMenuItem.DropDownItems)
                            {
                                if (item.Text == selectedTag)
                                {
                                    itemToRemove = item;
                                    break;
                                }
                            }
                            if (itemToRemove != null)
                            {
                                customTagMenuItem.DropDownItems.Remove(itemToRemove);
                            }

                            // Clear selectedCustomTag if it was deleted
                            if (selectedCustomTag == selectedTag)
                            {
                                selectedCustomTag = null;
                                // Also uncheck any selected items
                                tagCheckedListBox.ItemCheck -= TagCheckedListBox_ItemCheck;
                                for (int i = 0; i < tagCheckedListBox.Items.Count; i++)
                                {
                                    tagCheckedListBox.SetItemChecked(i, false);
                                }
                                tagCheckedListBox.ItemCheck += TagCheckedListBox_ItemCheck;

                                ApplyFiltersAndSort();
                            }

                            // Update the listbox
                            lstTags.DataSource = null;
                            lstTags.DataSource = new List<string>(customTags);

                            // Refresh Filter Categories menu as a category might have been removed
                            PopulateFilterCategoriesMenu();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Please select a tag to delete.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                };

                btnClose.Click += (s, args) =>
                {
                    manageTagsForm.Close();
                };

                manageTagsForm.Controls.Add(lstTags);
                manageTagsForm.Controls.Add(btnEdit);
                manageTagsForm.Controls.Add(btnDelete);
                manageTagsForm.Controls.Add(btnClose);

                manageTagsForm.ShowDialog();
            }
        }

        // Custom Tags'i kaydetme metodu
        private void SaveCustomTags()
        {
            try
            {
                string json = JsonConvert.SerializeObject(customTags);
                File.WriteAllText(customTagsFilePath, json);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error saving custom tags: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        // Custom Tags'i yükleme metodu
        private void LoadCustomTags()
        {
            if (File.Exists(customTagsFilePath))
            {
                try
                {
                    string json = File.ReadAllText(customTagsFilePath);
                    customTags = JsonConvert.DeserializeObject<List<string>>(json);

                    // customTagMenuItem içindeki mevcut özel etiketleri temizleyelim (Add Tag ve Manage Tags hariç)
                    for (int i = customTagMenuItem.DropDownItems.Count - 1; i >= 0; i--)
                    {
                        var item = customTagMenuItem.DropDownItems[i];
                        if (item != addTagMenuItem && item != manageTagsMenuItem)
                        {
                            customTagMenuItem.DropDownItems.RemoveAt(i);
                        }
                    }

                    // customTags listesindeki etiketleri menüye ekleyelim
                    foreach (var tag in customTags)
                    {
                        AddCustomTagMenuItem(tag);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error loading custom tags: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private async void OnlineStatusTimer_Tick(object sender, EventArgs e)
        {
            bool currentlyOnline = CheckInternetConnection();
            if (currentlyOnline && !isOnline)
            {
                // We were offline, now online
                isOnline = true;
                await ProcessOfflineChanges();
                // Start real-time listener if not already started
                if (!isListening)
                {
                    RealTimeListener();
                }
            }
            else if (!currentlyOnline && isOnline)
            {
                // We were online, now offline
                isOnline = false;
            }
        }

        private async Task ProcessOfflineChanges()
        {
            if (offlineChanges == null || !offlineChanges.Any())
                return;

            foreach (var change in offlineChanges.ToList()) // ToList() kullanarak koleksiyonun değişmesini önler
            {
                try
                {
                    switch (change.ChangeType)
                    {
                        case ChangeType.Add:
                            // Assume change.Flashcard.id already set
                            await firebaseClient
                                .Child("flashcards")
                                .Child(change.Flashcard.id)
                                .PutAsync(change.Flashcard);
                            break;
                        case ChangeType.Update:
                            await firebaseClient
                                .Child("flashcards")
                                .Child(change.Flashcard.id)
                                .PutAsync(change.Flashcard);
                            break;
                        case ChangeType.Delete:
                            await firebaseClient
                                .Child("flashcards")
                                .Child(change.Flashcard.id)
                                .DeleteAsync();
                            break;
                    }
                }
                catch (Exception ex)
                {
                    // Herhangi bir hata durumunda süreci durdurabilir veya devam edebilirsiniz
                    MessageBox.Show($"Error processing offline change: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            // Tüm offline değişiklikler işlendi, listeyi temizle
            offlineChanges.Clear();
            SaveOfflineChanges();

            // Optional: Delete the offlineChangesFile if exists
            try
            {
                if (File.Exists(offlineChangesFilePath))
                {
                    File.Delete(offlineChangesFilePath);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error deleting offline changes file: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// Adds a new change to the offlineChanges list and saves it.
        /// </summary>
        private void AddOfflineChange(ChangeType changeType, FlashcardItem flashcard)
        {
            offlineChanges.Add(new FlashcardChange { ChangeType = changeType, Flashcard = flashcard });
            SaveOfflineChanges();
        }

        /// <summary>
        /// Saves the offlineChanges list to a local file.
        /// </summary>
        private void SaveOfflineChanges()
        {
            try
            {
                string json = JsonConvert.SerializeObject(offlineChanges);
                File.WriteAllText(offlineChangesFilePath, json);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error saving offline changes: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// Loads the offlineChanges list from a local file.
        /// </summary>
        private void LoadOfflineChanges()
        {
            if (File.Exists(offlineChangesFilePath))
            {
                try
                {
                    string json = File.ReadAllText(offlineChangesFilePath);
                    offlineChanges = JsonConvert.DeserializeObject<List<FlashcardChange>>(json) ?? new List<FlashcardChange>();
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Error loading offline changes: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    offlineChanges = new List<FlashcardChange>();
                }
            }
            else
            {
                offlineChanges = new List<FlashcardChange>();
            }
        }

        /// <summary>
        /// Populates the "Filter Categories" menu with current categories.
        /// Includes an "All Categories" option by default.
        /// </summary>
        private void PopulateFilterCategoriesMenu()
        {
            // Clear existing category items
            foreach (var item in filterCategoryMenuItems)
            {
                filterCategoriesMenuItem.DropDownItems.Remove(item);
            }
            filterCategoryMenuItems.Clear();

            // Add "All Categories" option if not already exists
            if (!filterCategoryMenuItems.Any(item => item.Text == "All Categories"))
            {
                ToolStripMenuItem allCategoriesItem = new ToolStripMenuItem("All Categories")
                {
                    Checked = selectedTag.Equals("All Categories", StringComparison.OrdinalIgnoreCase),
                    CheckOnClick = true
                };
                allCategoriesItem.Click += FilterCategoryMenuItem_Click;
                filterCategoryMenuItems.Add(allCategoriesItem);
                filterCategoriesMenuItem.DropDownItems.Add(allCategoriesItem);
            }

            // Get distinct categories including "uncategorized"
            List<string> categories = allFlashcards.Select(f => f.category).Distinct().Where(c => !string.IsNullOrWhiteSpace(c)).ToList();

            // Add each category as a menu item
            foreach (var category in categories)
            {
                ToolStripMenuItem categoryItem = new ToolStripMenuItem(category)
                {
                    Checked = selectedTag.Equals(category, StringComparison.OrdinalIgnoreCase),
                    CheckOnClick = true
                };
                categoryItem.Click += FilterCategoryMenuItem_Click;
                filterCategoryMenuItems.Add(categoryItem);
                filterCategoriesMenuItem.DropDownItems.Add(categoryItem);
            }

            // Eğer "All Categories" seçili değilse, hiçbir kategori seçili olmayabilir
            // Bu durumda, "All Categories" seçili olarak işaretlenmelidir
            if (!filterCategoryMenuItems.Any(item => item.Checked))
            {
                ToolStripMenuItem allCategoriesItem = filterCategoryMenuItems.FirstOrDefault(item => item.Text == "All Categories");
                if (allCategoriesItem != null)
                {
                    allCategoriesItem.Checked = true;
                    selectedTag = "All Categories";
                    ApplyFiltersAndSort();
                }
            }
        }
        private void FilterCategoryMenuItem_Click(object sender, EventArgs e)
        {
            if (sender is ToolStripMenuItem clickedItem)
            {
                if (clickedItem.Text == "All Categories")
                {
                    if (clickedItem.Checked)
                    {
                        // "All Categories" seçildiğinde, diğer tüm kategorileri işaretlemeyi kaldır
                        foreach (var item in filterCategoryMenuItems)
                        {
                            if (item.Text != "All Categories")
                            {
                                item.Checked = false;
                            }
                        }
                        selectedTag = "All Categories";
                    }
                    else
                    {
                        // "All Categories" seçeneği işaretlenmediğinde tekrar işaretle
                        // Böylece her zaman en az bir kategori seçili olur
                        clickedItem.Checked = true;
                    }
                }
                else
                {
                    if (clickedItem.Checked)
                    {
                        // Bir kategori seçildiğinde, "All Categories" ve diğer kategorileri işaretlemeyi kaldır
                        foreach (var item in filterCategoryMenuItems)
                        {
                            if (item.Text != clickedItem.Text && item.Text != "All Categories")
                            {
                                item.Checked = false;
                            }
                            else if (item.Text == "All Categories")
                            {
                                item.Checked = false;
                            }
                        }
                        selectedTag = clickedItem.Text;
                    }
                    else
                    {
                        // Bir kategori işaretlenmemişse, "All Categories" seçeneğini işaretle
                        ToolStripMenuItem allCategoriesItem = filterCategoryMenuItems.FirstOrDefault(item => item.Text == "All Categories");
                        if (allCategoriesItem != null)
                        {
                            allCategoriesItem.Checked = true;
                            selectedTag = "All Categories";
                        }
                    }
                }

                ApplyFiltersAndSort();
            }
        }        /// <summary>
                 /// Represents a Flashcard item.
                 /// </summary>
        public class FlashcardItem
        {
            public string id { get; set; }
            public string category { get; set; }
            public string title { get; set; }
            public string content { get; set; }
            public bool favorite { get; set; }
            public bool pinned { get; set; }
            public long timestamp { get; set; }
            public string backgroundColor { get; set; }
        }

        public enum ChangeType { Add, Update, Delete }

        public class FlashcardChange
        {
            public ChangeType ChangeType { get; set; }
            public FlashcardItem Flashcard { get; set; }
        }

        /// <summary>
        /// Form to select export settings such as fields to export and categories.

        public class ExportSettingsForm : Form
        {
            private CheckedListBox clbFields;
            private CheckedListBox clbCategories;
            private CheckBox chkSelectAllFields;
            private CheckBox chkSelectAllCategories;
            private Button btnOK, btnCancel;
            private RadioButton rdbExportAll, rdbExportByCategory; // Yeni RadioButton'lar

            private List<string> availableCategories;

            public bool ExportAll { get; private set; } = true; // Varsayılan olarak tümünü seç
            public bool ExportByCategory => !ExportAll;
            public List<string> SelectedCategories { get; private set; } = new List<string>();

            public ExportSettingsForm(List<string> categories)
            {
                availableCategories = categories;
                InitializeComponent();
            }

            private void InitializeComponent()
            {
                this.Text = "Export Options"; // Updated window title
                this.Size = new Size(400, 600); // Pencere boyutunu ayarlayın
                this.FormBorderStyle = FormBorderStyle.FixedDialog;
                this.StartPosition = FormStartPosition.CenterParent; // Ekranın ortasında açılsın
                this.MaximizeBox = false;
                this.MinimizeBox = false;

                Label lblSelectFields = new Label
                {
                    Text = "Select fields to export:",
                    Left = 10,
                    Top = 20,
                    Width = 360
                };
                this.Controls.Add(lblSelectFields);

                clbFields = new CheckedListBox
                {
                    Left = 10,
                    Top = lblSelectFields.Bottom + 10,
                    Width = 360,
                    Height = 100
                };
                clbFields.Items.AddRange(new object[]
                {
            "id",
            "category",
            "title",
            "content",
            "favorite",
            "pinned",
            "backgroundColor",
            "timestamp"
                });
                this.Controls.Add(clbFields);

                chkSelectAllFields = new CheckBox
                {
                    Text = "Select All Fields",
                    Left = 10,
                    Top = clbFields.Bottom + 10,
                    Width = 150
                };
                chkSelectAllFields.CheckedChanged += ChkSelectAllFields_CheckedChanged;
                this.Controls.Add(chkSelectAllFields);

                // Export Options GroupBox
                GroupBox grpExportOptions = new GroupBox
                {
                    Text = "Export Options",
                    Left = 10,
                    Top = chkSelectAllFields.Bottom + 10,
                    Width = 360,
                    Height = 100
                };
                this.Controls.Add(grpExportOptions);

                rdbExportAll = new RadioButton
                {
                    Text = "All Flashcards",
                    Left = 10,
                    Top = 20,
                    Checked = true // Varsayılan olarak seçili
                };
                rdbExportAll.CheckedChanged += RdbExportOptions_CheckedChanged;
                grpExportOptions.Controls.Add(rdbExportAll);

                rdbExportByCategory = new RadioButton
                {
                    Text = "Export by Category",
                    Left = 10,
                    Top = 50,
                    Checked = false
                };
                rdbExportByCategory.CheckedChanged += RdbExportOptions_CheckedChanged;
                grpExportOptions.Controls.Add(rdbExportByCategory);

                // Categories Selection
                Label lblSelectCategories = new Label
                {
                    Text = "Select categories to export:",
                    Left = 10,
                    Top = grpExportOptions.Bottom + 10,
                    Width = 360,
                    Visible = false
                };
                this.Controls.Add(lblSelectCategories);

                clbCategories = new CheckedListBox
                {
                    Left = 10,
                    Top = lblSelectCategories.Bottom + 40,
                    Width = 360,
                    Height = 100,
                    Visible = false
                };
                clbCategories.Items.AddRange(availableCategories.ToArray());
                this.Controls.Add(clbCategories);

                chkSelectAllCategories = new CheckBox
                {
                    Text = "Select All Categories",
                    Left = 10,
                    Top = clbCategories.Bottom + 10,
                    Width = 150,
                    Visible = false
                };
                chkSelectAllCategories.CheckedChanged += ChkSelectAllCategories_CheckedChanged;
                this.Controls.Add(chkSelectAllCategories);

                // Düğmeler aşağıda ve merkezde konumlandırılır
                btnOK = new Button
                {
                    Text = "OK",
                    Width = 80,
                    Top = chkSelectAllFields.Bottom + 155,
                    Left = 100,
                    DialogResult = DialogResult.OK
                };
                btnOK.Click += BtnOK_Click;
                this.Controls.Add(btnOK);

                btnCancel = new Button
                {
                    Text = "Cancel",
                    Width = 80,
                    Top = chkSelectAllFields.Bottom + 155,
                    Left = 200,
                    DialogResult = DialogResult.Cancel
                };
                this.Controls.Add(btnCancel);

                this.AcceptButton = btnOK;
                this.CancelButton = btnCancel;
            }

            private void ChkSelectAllFields_CheckedChanged(object sender, EventArgs e)
            {
                for (int i = 0; i < clbFields.Items.Count; i++)
                {
                    clbFields.SetItemChecked(i, chkSelectAllFields.Checked);
                }
            }

            private void ChkSelectAllCategories_CheckedChanged(object sender, EventArgs e)
            {
                for (int i = 0; i < clbCategories.Items.Count; i++)
                {
                    clbCategories.SetItemChecked(i, chkSelectAllCategories.Checked);
                }
            }

            private void RdbExportOptions_CheckedChanged(object sender, EventArgs e)
            {
                if (rdbExportAll.Checked)
                {
                    ExportAll = true;
                }
                else if (rdbExportByCategory.Checked)
                {
                    ExportAll = false;
                }

                // Kategori seçimlerinin görünürlüğünü ayarla
                bool isByCategory = rdbExportByCategory.Checked;
                clbCategories.Visible = isByCategory;
                chkSelectAllCategories.Visible = isByCategory;

                foreach (Control ctrl in this.Controls)
                {
                    if (ctrl is Label lbl && lbl.Text == "Select categories to export:")
                    {
                        lbl.Visible = isByCategory;
                        break;
                    }
                }

                // Eğer kategoriye göre export edilmiyorsa, tüm kategorileri işaretlemeyi kaldır
                if (!isByCategory)
                {
                    for (int i = 0; i < clbCategories.Items.Count; i++)
                    {
                        clbCategories.SetItemChecked(i, false);
                    }
                    chkSelectAllCategories.Checked = false;
                }
            }
            private void BtnOK_Click(object sender, EventArgs e)
            {
                // Ensure at least one field is selected
                if (clbFields.CheckedItems.Count == 0)
                {
                    MessageBox.Show("Please select at least one field to export.", "No Fields Selected", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    this.DialogResult = DialogResult.None; // Prevent the dialog from closing
                    return;
                }

                if (ExportByCategory)
                {
                    // Ensure at least one category is selected
                    if (clbCategories.CheckedItems.Count == 0)
                    {
                        MessageBox.Show("Please select at least one category to export.", "No Categories Selected", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        this.DialogResult = DialogResult.None; // Prevent the dialog from closing
                        return;
                    }

                    // Collect selected categories
                    SelectedCategories = clbCategories.CheckedItems.Cast<string>().ToList();
                }

                this.DialogResult = DialogResult.OK;
                this.Close();
            }

            /// <summary>
            /// Retrieves the list of selected fields.
            /// </summary>
            public List<string> GetSelectedFields()
            {
                return clbFields.CheckedItems.Cast<string>().ToList();
            }

            /// <summary>
            /// Retrieves the list of selected categories.
            /// </summary>
            public List<string> GetSelectedCategories()
            {
                return SelectedCategories;
            }

            /// <summary>
            /// Selects all fields by checking all items.
            /// </summary>
            public void SelectAllFields()
            {
                chkSelectAllFields.Checked = true;
            }

            /// <summary>
            /// Selects all categories by checking all items.
            /// </summary>
            public void SelectAllCategories()
            {
                chkSelectAllCategories.Checked = true;
            }
        }
    }
}
ASSISTANT
Anladığım kadarıyla, **Custom Tags** altında bir etiket seçimi kaldırıldığında, uygulamanız şu anda yalnızca "uncategorized" kategorilerini gösteriyor. Bunun yerine, tüm kategorilerin gösterilmesini istiyorsunuz. Bu durumu düzeltmek için, `selectedTag` değişkeninin doğru şekilde ayarlanmasını ve filtrasyon mantığının bu yeni durumu dikkate almasını sağlamamız gerekiyor.

Aşağıda, bu sorunu çözmek için yapmanız gereken adımları ve ilgili kod parçalarını bulabilirsiniz:

### 1. `selectedTag` Değişkenini "uncategorized" Yerine "All Categories" Olarak Ayarlayın

**Sorun:** `selectedTag` değişkeni, bir etiket seçimi kaldırıldığında "uncategorized" olarak ayarlanıyor.

**Çözüm:** Bu değeri "All Categories" olarak değiştirin ki tüm kategoriler gösterilsin.

**Değişiklik Yapılacak Yer:**
- `TagCheckedListBox_ItemCheck` metodu
- `TagMenuItem_Click` metodu

#### a. `TagCheckedListBox_ItemCheck` Metodu

Mevcut durumda şöyle görünüyor:

```csharp
private void TagCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e)
{
    // Eğer Custom Tag'de bir etiket seçilirse diğerlerini işaretlemeyi kaldır
    if (e.NewValue == CheckState.Checked)
    {
        for (int i = 0; i < tagCheckedListBox.Items.Count; i++)
        {
            if (i != e.Index)
            {
                tagCheckedListBox.SetItemChecked(i, false);
            }
        }
        selectedTag = tagCheckedListBox.Items[e.Index].ToString();

        // Custom Tag seçimini kaldır
        selectedCustomTag = null;
    }
    else
    {
        selectedTag = "uncategorized"; // Bu satırı değiştireceğiz
    }

    // Only apply filters if no custom tag is selected
    if (string.IsNullOrEmpty(selectedCustomTag))
    {
        BeginInvoke(new Action(() => ApplyFiltersAndSort()));
    }
}
```

**Yenilenmiş Hal:**

```csharp
private void TagCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e)
{
    // Eğer Custom Tag'de bir etiket seçilirse diğerlerini işaretlemeyi kaldır
    if (e.NewValue == CheckState.Checked)
    {
        for (int i = 0; i < tagCheckedListBox.Items.Count; i++)
        {
            if (i != e.Index)
            {
                tagCheckedListBox.SetItemChecked(i, false);
            }
        }
        selectedTag = tagCheckedListBox.Items[e.Index].ToString();

        // Custom Tag seçimini kaldır
        selectedCustomTag = null;
    }
    else
    {
        // selectedTag'i "All Categories" olarak ayarla
        selectedTag = "All Categories";
    }

    // Only apply filters if no custom tag is selected
    if (string.IsNullOrEmpty(selectedCustomTag))
    {
        BeginInvoke(new Action(() => ApplyFiltersAndSort()));
    }
}
```

#### b. `TagMenuItem_Click` Metodu

Mevcut durumda, eğer bir custom tag seçilmemişse `selectedTag` "uncategorized" olarak ayarlanıyor olabilir. Bunu da "All Categories" olarak değiştirmemiz gerekiyor.

**Mevcut Kod:**

```csharp
private void TagMenuItem_Click(object sender, EventArgs e)
{
    if (sender is ToolStripMenuItem clickedItem)
    {
        foreach (ToolStripMenuItem item in customTagMenuItem.DropDownItems)
        {
            if (item != clickedItem && item != addTagMenuItem && item != manageTagsMenuItem)
            {
                item.Checked = false;
            }
        }

        // Update the selectedCustomTag
        if (clickedItem.Checked)
        {
            selectedCustomTag = clickedItem.Text;

            // Deselect all category filters
            foreach (ToolStripMenuItem item in filterCategoryMenuItems)
            {
                item.Checked = false;
            }

            // Clear selectedTag as it's not in use
            selectedTag = "uncategorized"; // Bu satırı değiştireceğiz
        }
        else
        {
            selectedCustomTag = null;
        }

        // Do not apply other filters if custom tag is selected
        if (string.IsNullOrEmpty(selectedCustomTag))
        {
            ApplyFiltersAndSort();
        }
    }
}
```

**Yenilenmiş Hal:**

```csharp
private void TagMenuItem_Click(object sender, EventArgs e)
{
    if (sender is ToolStripMenuItem clickedItem)
    {
        foreach (ToolStripMenuItem item in customTagMenuItem.DropDownItems)
        {
            if (item != clickedItem && item != addTagMenuItem && item != manageTagsMenuItem)
            {
                item.Checked = false;
            }
        }

        // Update the selectedCustomTag
        if (clickedItem.Checked)
        {
            selectedCustomTag = clickedItem.Text;

            // Deselect all category filters
            foreach (ToolStripMenuItem item in filterCategoryMenuItems)
            {
                item.Checked = false;
            }

            // Clear selectedTag as it's not in use
            selectedTag = "All Categories"; // "uncategorized" yerine "All Categories" olarak değiştirildi
        }
        else
        {
            selectedCustomTag = null;
            selectedTag = "All Categories"; // Bu durumu da ekledik
        }

        // Do not apply other filters if custom tag is selected
        if (string.IsNullOrEmpty(selectedCustomTag))
        {
            ApplyFiltersAndSort();
        }
    }
}
```

### 2. `ApplyFiltersAndSort` Metodundaki Filtrasyon Mantığını Güncelleyin

`ApplyFiltersAndSort` metodunda, `selectedTag` "All Categories" olduğunda hiçbir kategori filtresi uygulanmaması gerekiyor, böylece tüm kategoriler gösterilir.

**Mevcut Kod:**

```csharp
private void ApplyFiltersAndSort()
{
    // Başlangıç olarak tüm flashcard'ları al
    IEnumerable<FlashcardItem> filtered = allFlashcards;

    // Favoriler filtresini uygula
    if (chkFilterFavorites.Checked)
    {
        filtered = filtered.Where(f => f.favorite);
    }

    // Sabitlenmiş filtresini uygula
    if (chkFilterPinned.Checked)
    {
        filtered = filtered.Where(f => f.pinned);
    }

    // Custom Tag seçili değilse kategori filtresini uygula
    if (string.IsNullOrEmpty(selectedCustomTag))
    {
        if (!string.IsNullOrEmpty(selectedTag))
        {
            if (selectedTag.Equals("All Categories", StringComparison.OrdinalIgnoreCase))
            {
                // "All Categories" seçildiğinde, kategori filtresi uygulama
                // Tüm kategoriler gösterilir
            }
            else if (selectedTag.Equals("uncategorized", StringComparison.OrdinalIgnoreCase))
            {
                // "uncategorized" seçildiğinde sadece bu kategoriye sahip flashcard'ları göster
                filtered = filtered.Where(f => f.category.Equals("uncategorized", StringComparison.OrdinalIgnoreCase));
            }
            else
            {
                // Diğer kategoriler için normal filtreleme
                filtered = filtered.Where(f => f.category.Equals(selectedTag, StringComparison.OrdinalIgnoreCase));
            }
        }
    }

    // Arama filtresini uygula
    if (!string.IsNullOrWhiteSpace(currentSearchTerm))
    {
        filtered = filtered.Where(f =>
            f.title.ToLower().Contains(currentSearchTerm) ||
            f.category.ToLower().Contains(currentSearchTerm) ||
            f.content.ToLower().Contains(currentSearchTerm));
    }

    // Listeye dönüştür
    List<FlashcardItem> filteredList = filtered.ToList();

    // Sıralama işlemini uygula
    if (!string.IsNullOrEmpty(currentSortColumn))
    {
        if (sortAscending)
        {
            switch (currentSortColumn)
            {
                case "title":
                    filteredList = filteredList.OrderBy(f => f.title).ToList();
                    break;
                case "timestamp":
                    filteredList = filteredList.OrderBy(f => f.timestamp).ToList();
                    break;
            }
        }
        else
        {
            switch (currentSortColumn)
            {
                case "title":
                    filteredList = filteredList.OrderByDescending(f => f.title).ToList();
                    break;
                case "timestamp":
                    filteredList = filteredList.OrderByDescending(f => f.timestamp).ToList();
                    break;
            }
        }
    }

    UpdateDataGridView(filteredList);
}
```

Bu metod zaten doğru mantığı izliyor: Eğer `selectedTag` "All Categories" ise, hiçbir kategori filtresi uygulanmıyor. Ancak, yukarıda yaptığımız değişiklikler doğrultusunda artık `selectedTag` doğru şekilde "All Categories" olarak ayarlanacak. Bu nedenle, ek bir değişiklik yapmanıza gerek yok olabilir. Ancak, `selectedTag`'in doğru şekilde ayarlandığından emin olmak için bu metodu gözden geçirelim.

### 3. `PopulateFilterCategoriesMenu` Metodunu Doğru Şekilde Güncelleyin

"All Categories" seçeneğinin her zaman kontrol altında olduğundan ve doğru şekilde işaretlendiğinden emin olun.

**Mevcut Kod:**

```csharp
private void PopulateFilterCategoriesMenu()
{
    // Clear existing category items
    foreach (var item in filterCategoryMenuItems)
    {
        filterCategoriesMenuItem.DropDownItems.Remove(item);
    }
    filterCategoryMenuItems.Clear();

    // Add "All Categories" option if not already exists
    if (!filterCategoryMenuItems.Any(item => item.Text == "All Categories"))
    {
        ToolStripMenuItem allCategoriesItem = new ToolStripMenuItem("All Categories")
        {
            Checked = selectedTag.Equals("All Categories", StringComparison.OrdinalIgnoreCase),
            CheckOnClick = true
        };
        allCategoriesItem.Click += FilterCategoryMenuItem_Click;
        filterCategoryMenuItems.Add(allCategoriesItem);
        filterCategoriesMenuItem.DropDownItems.Add(allCategoriesItem);
    }

    // Get distinct categories including "uncategorized"
    List<string> categories = allFlashcards.Select(f => f.category).Distinct().Where(c => !string.IsNullOrWhiteSpace(c)).ToList();

    // Add each category as a menu item
    foreach (var category in categories)
    {
        ToolStripMenuItem categoryItem = new ToolStripMenuItem(category)
        {
            Checked = selectedTag.Equals(category, StringComparison.OrdinalIgnoreCase),
            CheckOnClick = true
        };
        categoryItem.Click += FilterCategoryMenuItem_Click;
        filterCategoryMenuItems.Add(categoryItem);
        filterCategoriesMenuItem.DropDownItems.Add(categoryItem);
    }

    // Eğer "All Categories" seçili değilse, hiçbir kategori seçili olmayabilir
    // Bu durumda, "All Categories" seçili olarak işaretlenmelidir
    if (!filterCategoryMenuItems.Any(item => item.Checked))
    {
        ToolStripMenuItem allCategoriesItem = filterCategoryMenuItems.FirstOrDefault(item => item.Text == "All Categories");
        if (allCategoriesItem != null)
        {
            allCategoriesItem.Checked = true;
            selectedTag = "All Categories";
            ApplyFiltersAndSort();
        }
    }
}
```

Bu metod, "All Categories" seçeneğini doğru şekilde ekliyor ve işaretliyor. İlk adımda `selectedTag` "All Categories" olarak ayarlandığından, bu metodun doğru çalışması beklenmektedir.

### 4. `FilterCategoryMenuItem_Click` Metodunu Gözden Geçirin

Kategori filtreleme menüsündeki öğeler tıklandığında doğru şekilde `selectedTag` güncellendiğinden emin olun.

**Mevcut Kod:**

```csharp
private void FilterCategoryMenuItem_Click(object sender, EventArgs e)
{
    if (sender is ToolStripMenuItem clickedItem)
    {
        if (clickedItem.Text == "All Categories")
        {
            if (clickedItem.Checked)
            {
                // "All Categories" seçildiğinde, diğer tüm kategorileri işaretlemeyi kaldır
                foreach (var item in filterCategoryMenuItems)
                {
                    if (item.Text != "All Categories")
                    {
                        item.Checked = false;
                    }
                }
                selectedTag = "All Categories";
            }
            else
            {
                // "All Categories" seçeneği işaretlenmediğinde tekrar işaretle
                // Böylece her zaman en az bir kategori seçili olur
                clickedItem.Checked = true;
            }
        }
        else
        {
            if (clickedItem.Checked)
            {
                // Bir kategori seçildiğinde, "All Categories" ve diğer kategorileri işaretlemeyi kaldır
                foreach (var item in filterCategoryMenuItems)
                {
                    if (item.Text != clickedItem.Text && item.Text != "All Categories")
                    {
                        item.Checked = false;
                    }
                    else if (item.Text == "All Categories")
                    {
                        item.Checked = false;
                    }
                }
                selectedTag = clickedItem.Text;
            }
            else
            {
                // Bir kategori işaretlenmemişse, "All Categories" seçeneğini işaretle
                ToolStripMenuItem allCategoriesItem = filterCategoryMenuItems.FirstOrDefault(item => item.Text == "All Categories");
                if (allCategoriesItem != null)
                {
                    allCategoriesItem.Checked = true;
                    selectedTag = "All Categories";
                }
            }
        }

        ApplyFiltersAndSort();
    }
}
```

Bu metod da doğru şekilde çalışıyor. "All Categories" seçeneği tıklanırsa ve işaretlenirse, diğer tüm kategorilerin işaretlenmesi kaldırılıyor ve `selectedTag` "All Categories" olarak ayarlanıyor. Bu mantık doğru olduğu için başka bir değişikliğe gerek yok.

### 5. Genel Kontrol ve Test

Yukarıdaki değişiklikleri yaptıktan sonra, uygulamanızı şu şekilde test edin:

1. **Custom Tags Seçimi**: Bir custom tag seçili olsun ve DataGridView'de bu kategoriye ait flashcard'ların gösterildiğinden emin olun.

2. **Custom Tags Seçimini Kaldırma**: Bir custom tag seçimini kaldırdığınızda, artık yalnızca "uncategorized" değil, tüm kategorilerin gösterildiğini doğrulayın.

3. **Filter Categories İşletimi**: "All Categories" seçeneğinin, uygulamanın tüm kategorileri göstermesini sağladığını test edin.

4. **Diğer Filtreler**: Favori ve sabitlenmiş filtrelerin de doğru şekilde çalıştığını doğrulayın.

### 6. Kodda Yapılan Değişikliklerin Tamamı

Aşağıda, yukarıda bahsedilen değişiklikleri tümüyle içeren kod parçaları bulunmaktadır. Bu değişiklikleri, mevcut kodunuzla birleştirerek uygulamanızı güncelleyebilirsiniz.

#### a. `TagCheckedListBox_ItemCheck` Metodu

```csharp
private void TagCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e)
{
    // Eğer Custom Tag'de bir etiket seçilirse diğerlerini işaretlemeyi kaldır
    if (e.NewValue == CheckState.Checked)
    {
        for (int i = 0; i < tagCheckedListBox.Items.Count; i++)
        {
            if (i != e.Index)
            {
                tagCheckedListBox.SetItemChecked(i, false);
            }
        }
        selectedTag = tagCheckedListBox.Items[e.Index].ToString();

        // Custom Tag seçimini kaldır
        selectedCustomTag = null;
    }
    else
    {
        // selectedTag'i "All Categories" olarak ayarla
        selectedTag = "All Categories";
    }

    // Only apply filters if no custom tag is selected
    if (string.IsNullOrEmpty(selectedCustomTag))
    {
        BeginInvoke(new Action(() => ApplyFiltersAndSort()));
    }
}
```

#### b. `TagMenuItem_Click` Metodu

```csharp
private void TagMenuItem_Click(object sender, EventArgs e)
{
    if (sender is ToolStripMenuItem clickedItem)
    {
        foreach (ToolStripMenuItem item in customTagMenuItem.DropDownItems)
        {
            if (item != clickedItem && item != addTagMenuItem && item != manageTagsMenuItem)
            {
                item.Checked = false;
            }
        }

        // Update the selectedCustomTag
        if (clickedItem.Checked)
        {
            selectedCustomTag = clickedItem.Text;

            // Deselect all category filters
            foreach (ToolStripMenuItem item in filterCategoryMenuItems)
            {
                item.Checked = false;
            }

            // Clear selectedTag as it's not in use
            selectedTag = "All Categories"; // "uncategorized" yerine değiştirildi
        }
        else
        {
            selectedCustomTag = null;
            selectedTag = "All Categories"; // İşaret kaldırıldığında da "All Categories" olarak ayarlandı
        }

        // Do not apply other filters if custom tag is selected
        if (string.IsNullOrEmpty(selectedCustomTag))
        {
            ApplyFiltersAndSort();
        }
    }
}
```

### 7. Ekstra İyileştirmeler (Opsiyonel)

- **Varsayılan Seçenekler**: Uygulama başlatıldığında, "All Categories" seçeneğinin varsayılan olarak işaretli olduğundan emin olun.
  
- **Görsel Geri Bildirim**: Kullanıcının hangi filtrasyonların aktif olduğunu daha iyi anlaması için UI üzerinde görsel geri bildirimler eklemek faydalı olabilir.

- **Hata Yönetimi**: Filtrasyon işlemleri sırasında olası hataları yönetmek için ek kontroller ve kullanıcı bilgilendirmeleri ekleyebilirsiniz.

### 8. Sonuç

Yukarıda bahsettiğim değişiklikleri uyguladığınızda, **Custom Tags** altında bir etiket seçimi kaldırıldığında, sistemin tüm kategorileri göstermesi gerektiği şekilde davranacaktır. Bu, kullanıcı deneyimini iyileştirerek, daha esnek ve anlaşılır bir filtrasyon sistemi sağlar.

Umarım bu çözüm, karşılaştığınız sorunu etkin bir şekilde giderir. Başka sorularınız veya ek ihtiyaçlarınız olursa lütfen çekinmeden paylaşın!

turns-00033.parquet:1646

ec10e88ffa309c8ab192ea61
turn 1/1gpt-4o-2024-08-06ArabicTaiwan367 words
degenerate_repetitionAbsentFinal dense release
USER
Assistant: 
User: Generate a captivating product description for listing.
        Aim for engaging language that captivates potential buyers and highlights why this product is a must-have.
        Include details such as [points, sub-points, '
', '-']. 
        , Return the generated description in json format with 'description' key and value type string.
        The product is "خدمة عاصفة: ملاقط السيليكون سهلة الاستخدام مثالية للاستخدام على أواني الطبخ غير اللاصقة، مثالية لمهام المطبخ الأساسية، في الأماكن المغلقة أو الهواء الطلق، لشواء الذرة، تقديم اللحوم المشوية، تقليب البرغر، تقديم السلطة، المعكرونة، أو كأدوات تقليب للشواء وأكثر من ذلك بكثير
المواد: سيليكون آمن غذائيًا بنسبة 100%، غير لاصق، غير قابل للانزلاق، آمن على الأواني والمقالي المغلفة، مقاوم للحرارة حتى 220 درجة مئوية
العناية: آمنة للغسل في غسالة الأطباق، للحصول على لمعان إضافي، نوصي بغسلها يدويًا وتجفيفها جيدًا
مفيدة: الفتحة المصممة تجعل من السهل تعليق ملاقط المطبخ وتخزينها بسهولة
1 × ملاقط مطبخ سيليكون 35 سم، مساكة للطبخ والتقديم، ملاقط للسلطة والشواء، أواني مقاومة للحرارة، غير لاصقة، غير قابلة للخدش، متوفر بالوان متعدده يتم توفرها حسب الصورة الرئيسية او حسب المتوفر، 35  سم
" .
Assistant:
ASSISTANT
```json
{
    "description": "اكتشفوا السهولة والأداء العالي مع 'خدمة عاصفة: ملاقط السيليكون' المثالية لكل هواة الطبخ ومحترفيه. هذه الملاقط مصممة بدقة لسهولة الاستخدام في جميع أنواع المهام بالمطبخ سواء داخل المنزل أو في الهواء الطلق. \n - **تصميم متعدد الاستخدامات**: مثالي لشواء الذرة، تقديم اللحوم المشوية اللذيذة، تقليب البرغر للحصول على تلك الوجبة المثالية، أو حتى تقديم السلطات والمعكرونة بطريقة مريحة وسلسة. \n - **مواد عالية الجودة**: مصنوع من سيليكون آمن غذائيًا بنسبة 100%، هذه الملاقط غير لاصقة وغير قابلة للانزلاق للاستخدام المثالي مع الأواني والمقالي المغلفة. مقاومة للحرارة حتى 220 درجة مئوية، مما يجعلها خيارًا آمناً عند التعامل مع الأطعمة الساخنة. \n - **سهولة العناية والتنظيف**: ملاقط السيليكون آمنة للغسل في غسالة الأطباق. للحصول على لمعان إضافي، يوصى بغسلها يدويًا وتجفيفها جيدًا لتحافظ على جودتها ورونقها طويلًا. \n - **تصميم عملي للتخزين**: تأتي الملقط بفتحة مصممة خصيصًا لتسهيل تعليقها وتخزينها في المطبخ دون عناء. \n - **مواصفات المنتج**: طول 35 سم، متوفر بألوان متعددة تضفي لمسة من الأناقة على مطبخك. اختيارك الأمثل لأدوات الطهي التي تجمع بين الجودة والمتانة. \n احصل على راحتك في الطهي مع 'خدمة عاصفة: ملاقط السيليكون'، اللمسة السحرية لكل مهمة في مطبخك!"
}
```

turns-00033.parquet:1647

2f3b9952e7b9d63b3a5d602e
turn 1/1gpt-4o-2024-08-06ChineseSweden957 words
degenerate_repetitionAbsentFinal dense release
USER
Assistant: 
User: System: [{'type': 'text', 'text': "以下是key表示行业,value是行业下的标签列表,分析的时候,请根据评论所在行业的标签体系来进行分析,分析结果中的分类必须是行业限制下的标签:{'书籍': ['耐用性', '舒适度', '便捷性', '实用性', '粘黏性', '安全性', '色牢度', '厚薄度', '显示效果', '打印效果', '讲师服务', '内容资源', '排版', '系统性能', '性能', '折痕'], '养生保健': ['弹性', '溶解性', '保暖性', '吸收度', '透气性', '安全性', '制热效果', '食用效果', '实用性', '耐用性', '色牢度', '牢固度', '便捷性', '厚薄度', '舒适度', '上身效果', '新鲜度', '性能', '力度', '风力风速', '系统性能', '电池续航', '动力类型'], '厨卫家电': ['显示效果', '系统性能', '操作性', '性能', '保暖性', '持久性', '散热效果', '色牢度', '便捷性', '耐用性', '软硬度', '舒适度', '干净度', '制冷效果', '洗涤效果', '实用性', '脱水效果', '连网效果', '保温效果', '灯光效果', '稳定性', '保鲜效果', '承重能力', '清洁效果', '净化效果', '烘干效果', '出雾量', '通话效果', '熨烫效果', '加湿效果', '加热效果', '除湿效果', '防风效果', '出水性', '制热效果', '牢固度', '厚薄度', '内容资源', '内部配置', '机组构成', '屏幕', '避障类型', '水箱类型', '擦地方式', '拍打方式', '护发类型', '温控类型', '风嘴类型', '动力类型', '导轨', '变频定频', '放置方式', '制冷方式', '冷暖类型', '净化类型', '电池类型', '信号', '风力风速', '水压', '吸力', '箱门结构', '内存', '用水量', '传播距离', '电池续航', '能耗', '能效等级', '功率', '拖地类型', '导航技术', '虚拟墙技术', '亮度', '色彩', '清晰度', '色系', '震动', '醒花效果', '遮阳效果', '杀虫效果', '割草效果', '动力类型', '密度', '发芽率', '成活率', '安全性', '新鲜度', '摆放效果', '水分', '植物器官'], '宠物用品': ['吸收度', '透气性', '上身效果', '溶解性', '保暖性', '持久性', '清洁能力', '实用性', '驱虫效果', '便捷性', '药效', '成活率', '消毒效果', '过滤效果', '食用效果', '结团效果', '耐用性', '色牢度', '除味效果', '舒适度', '厚薄度', '牢固度', '软硬度', '营养价值', '安全性', '新鲜度', '适口性', '清洗方式', '清洗难度', '动物'], '家居家纺': ['显示效果', '遮光效果', '灯光效果', '上身效果', '装饰效果', '清洁能力', '制热效果', '防滑效果', '打印效果', '安全性', '透气性', '弹性', '保暖性', '缩水率', '溶解性', '承重能力', '便捷性', '持久性', '粘黏性', '出水性', '厚重感', '密封性', '立体感', '水冲力', '耐用性', '实用性', '舒适度', '软硬度', '厚薄度', '色牢度', '牢固度', '柔和度', '蓬松度', '吸收度', '亮度', '光照范围', '清洗难度', '内部配置', '灯光配置', '系统性能', '电池续航', '功率', '风力风速', '挡位', '能耗', '起球', '色差', '缩水', '褶皱'], '彩妆护肤': ['吸收度', '透气性', '持久性', '美白效果', '丰胸效果', '抗衰效果', '抗氧效果', '收毛孔效果', '遮瑕效果', '祛痘祛印效果', '隔离效果', '补水保湿效果', '防晒效果', '纤体效果', '紧致效果', '祛斑淡斑效果', '去黑头效果', '控油效果', '清洁效果', '色牢度', '密封性', '溶解性', '安全性', '便捷性'], '户外运动': ['安全性', '防水性', '稳定性', '粘黏性', '漏气', '服帖性', '便捷性', '透气性', '充气', '吸水性', '软硬度', '控球性', '实用性', '磁性', '保暖性', '耐用性', '牢固度', '弹性', '厚薄度', '色牢度', '圆度', '亮度', '球感', '拉力', '承重能力', '打印效果', '清洗效果', '舒适度', '飞行稳定性', '防滑效果', '减震效果', '上身效果', '骑行感受', '速干效果', '变速效果', '显示效果', '能耗', '性能', '动力类型', '电池续航', '系统性能', '轮子种类', '灯光配置', '刹车', '腰力', '色差'], '手机数码': ['显示效果', '拍照效果', '散热效果', '佩戴效果', '通话效果', '防指纹效果', '运行速度', '充电速度', '音效', '风力风速', '防窥效果', '指纹解锁', '打印效果', '操作性', '便捷性', '耐用性', '实用性', '保护性', '牢固度', '色牢度', '清晰度', '粘黏性', '灵敏度', '贴合度', '匹配度', '亮度', '软硬度', '舒适度', '厚薄度', '安全性', '能耗', '系统性能', '性能', '电池续航', '内部配置', '灯光配置', '按键', '孔位', '分辨率', '像素', '自带软件', '内存', '信号', '屏幕', '发热'], '日用百货': ['制热效果', '隔音效果', '驱蚊效果', '祛痘祛印效果', '清洁能力', '投影效果', '上身效果', '防护效果', '切割效果', '控油效果', '防粘效果', '补水保湿效果', '隔热效果', '散热效果', '美白效果', '止痒效果', '复印效果', '收纳效果', '过滤效果', '碎纸效果', '保温效果', '显示效果', '工作效率', '打印效果', '溶解性', '承重能力', '便捷性', '吸收度', '弹性', '操作性', '持久性', '安全性', '厚薄度', '刺激感', '透气性', '实用性', '保暖性', '舒适度', '清晰度', '锋利度', '耐用性', '密封性', '泡沫量', '亮度', '色牢度', '软硬度', '出水性', '浓稠度', '牢固度', '粘黏性', '清洗难度', '打印速度', '清洁难度', '系统性能', '性能', '能耗', '运作速度', '动力类型', '电池续航', '功率', '火力', '风力风速', '分辨率', '灯光配置', '清洁方式', '刷头类型', '内部结构', '包装形式', '不适感', '计量误差'], '母婴用品': ['软硬度', '吸收度', '透气性', '厚薄度', '安全性', '柔软度', '新鲜度', '便捷性', '上身效果', '弹性', '溶解性', '持久性', '保暖性', '食用效果', '补水保湿效果', '粘黏性', '色牢度', '实用性', '干净度', '冲泡效果', '贴身性', '舒适度', '耐用性', '控油效果', '浓稠度', '吸力', '营养价值', '饱腹感', '牢固度', '闭合方式', '电池续航', '性能'], '汽车': ['包装', '风格', '购买意向', '规格', '价格', '卖家服务', '明星红人', '品牌', '品质', '使用注意事项', '用户痛点', '外观', '物流', '性价比', '用户需求', '保修期', '维护保养', '颜色', '赠品', '正品', '整体感受', '质量', '科技', '技术', '专利', '概念亮点', '设计', '工艺', '声音', '产地', '品类', '异味', '香调', '香型', '气味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '款式', '版型', '图案印花', '面料材质', '填充物及含量', '安全性', '便捷性', '操控性', '顿挫感', '减震效果', '驾驶视野', '驾驶体验', '精确度', '科技感', '牢固度', '软硬度', '色牢度', '实用性', '舒适度', '稳定性', '显示效果', '音响效果', '隔音效果', '密封性', '耐用性', '安全配置', '变速箱类型', '玻璃', '后视镜', '车窗后视镜', '车辆配置', '车身车型', '车体结构', '灯光配置', '电池类型', '电动机类型', '电机布局方式', '操控配置', '多媒体配置', '辅助配置', '制动器类型', '座椅配置', '防盗配置', '外部配置', '整车配置', '转向助力类型', '4s店服务', '内部配置', '动力系统', '空间容量', '空调冰箱', '防盗系统', '挂挡换挡', '控制按键', '能源类型', '前悬架类型', '驱动电机数', '驱动形式', '四驱形式', '智驾维度', '智能辅助', '智能硬件', '智能影像', '安全装备', '驻车制动', '导航', '油耗', '能耗', '配件', '仪表盘', '性能', '系统性能', '制动性能', '转弯性能', '动力性能', '车联功能', '传动性能', '电池续航', '雷达功能', '不良反应', '配置', '功能功效'], '玩具': ['便捷性', '安全性', '持久性', '实用性', '舒适度', '承重能力', '耐用性', '色牢度', '稳定性', '软硬度', '粘黏性', '弹性', '牢固度', '厚薄度', '显示效果', '骑行感受', '打印效果', '性能', '系统性能', '灯光配置', '电池续航', '内容资源', '磁力'], '珠宝配饰': ['佩戴效果', '厚薄度', '透气性', '弹性', '能耗', '软硬度', '打印效果', '性能', '色牢度', '显示效果', '变色效果', '遮阳效果', '便捷性', '实用性', '舒适度', '偏光效果', '安全性', '操作性', '耐用性', '清晰度', '牢固度', '防水性', '防蓝光效果', '粘黏性', '防辐射效果', '系统性能', '内部配置', '度数', '走时', '校准'], '男装女装': ['透气性', '软硬度', '弹性', '厚薄度', '吸收度', '保暖性', '安全性', '便捷性', '色泽度', '色牢度', '耐穿性', '实用性', '上身效果', '防晒效果', '遮阳效果', '佩戴效果', '聚拢效果', '破洞', '缩水', '线头', '起球', '色差', '钢圈类型', '海绵垫', '证书'], '礼品文娱': ['上身效果', '灯光效果', '打印效果', '速干效果', '显示效果', '便捷性', '安全性', '耐用性', '舒适度', '实用性', '牢固度', '色牢度', '弹性', '软硬度', '厚薄度', '粘黏性', '亮度', '流畅度', '系统性能', '灯光配置', '内部结构', '内容资源', '排版', '漏气', '折痕'], '美食饮品': ['烹饪效果', '软硬度', '酒精度数', '新鲜度', '发酵程度', '持久性', '溶解性', '厚薄度', '泡发性', '辣度', '咸度', '成熟度', '耐泡度', '甜度', '黏粘性', '冲泡效果', '饱腹感', '便捷性', '醉酒性', '醒酒时间', '烹饪时间', '色牢度', '实用性', '干净度', '食用效果', '肉质', '胶质', '酒质', '粉质', '水分', '含油量', '年份'], '花鸟绿植': ['功能功效', '醒花效果', '舒适度', '遮阳效果', '杀虫效果', '割草效果', '动力', '性能', '密度', '软硬度', '厚薄度', '发芽率', '成活率', '安全性', '便捷性', '实用性', '新鲜度', '牢固度', '色牢度', '耐用性', '摆放效果', '水分', '植物器官'], '通用': ['保质期', '包装', '产地', '风格', '概念亮点', '工艺', '购买意向', '规格', '价格', '技术', '科技', '卖家服务', '明星红人', '品类', '品牌', '品质', '声音', '设计', '使用注意事项', '外观', '物流', '性价比', '颜色', '用户痛点', '用户需求', '赠品', '正品', '整体感受', '质量', '专利', '用户疑问', '节日', '功能功效', '配置', '不良反应', '异味', '香调', '香型', '气味', '味道', '口味', '个头大小', '体积', '尺码', '重量', '容量', '空间', '安装', '安装师傅', '安装费用', '肤色', '肤质', '脸型', '身体部位', '人群', '场景', '质地', '质感', '手感', '肤感', '妆感', '妆容', '口感', '成分配料', '成分特点', '款式', '版型', '图案印花', '面料材质', '填充物及含量'], '鞋帽箱包': ['硬度', '厚薄度', '软硬度', '吸收度', '弹性', '透气性', '舒适度', '保暖性', '便捷性', '色牢度', '实用性', '密封性', '牢固度', '上身效果', '性能', '闭合方式', '是否带锁', '内部结构', '拉杆种类', '筒高', '鞋型', '隔层', '轮子种类', '鞋底鞋跟', '拉链', '色差']}"}, {'type': 'text', 'text': '请分析并拆分这句话中的出现的每个关键词以及对应的关键词分类、关键词子句、关键词,关键词舆情。关键词碰到标点符号要拆开,不要总结,只做抽取。请按案例格式输出'}]
User: [{'type': 'text', 'text': "案例:'自从用了这个粉底,上妆再也不卡粉了,流汗也不脱妆,非常好用"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'功能功效', '关键词子句':'上妆再也不卡粉了','关键词':'不卡粉','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'流汗也不脱妆','关键词':'不脱妆','关键词舆情':'正面'},{'关键词分类':'功能功效', '关键词子句':'非常好用','关键词':'好用','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'这个产品好不好用'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'这个产品好不好用','关键词':'好不好用','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': "案例:'他家的口红很持久,而且重点是不沾杯,涂起来也非常丝滑,而且含有极地保湿因子,同学极力推荐,非常nice'"}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'持久度','关键词子句':'他家的口红很持久','关键词':'持久','关键词舆情':'正面'},{'关键词分类':'特性','关键词子句':'而且重点是不沾杯','关键词':'不沾杯','关键词舆情':'正面'},{'关键词分类':'使用感受','关键词子句':'涂起来也非常丝滑','关键词':'丝滑','关键词舆情':'正面'},{'关键词分类':'成分','关键词子句':'而且含有极地保湿因子','关键词':'极地保湿因子','关键词舆情':'正面'},{'关键词分类':'推荐度','关键词子句':'同学极力推荐','关键词':'极力推荐','关键词舆情':'正面'},{'关键词分类':'总体评价','关键词子句':'非常nice','关键词':'nice','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': "案例:'服务态度:好 性价比:高 包装:好 物流速度:快 发货速度:快'"}]
Assistant: [{'type': 'text', 'text': "[    {'关键词分类':'卖家服务','关键词子句':'服务态度:好','关键词':'服务态度','关键词舆情':'正面'},{'关键词分类':'性价比','关键词子句':'性价比:高','关键词':'性价比','关键词舆情':'正面'},{'关键词分类':'包装','关键词子句':'包装:好','关键词':'包装','关键词舆情':'正面'},{'关键词分类':'物流','关键词子句':'物流速度:快','关键词':'物流速度','关键词舆情':'正面'},{'关键词分类':'卖家服务','关键词子句':'发货速度:快','关键词':'发货速度','关键词舆情':'正面'}]"}]
User: [{'type': 'text', 'text': '这段时间最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下啊,给女儿在学校用'}]
Assistant: [{'type': 'text', 'text': "[{'关键词分类':'用户疑问', '关键词子句':'我最近长了一脸痘痘,有没有什么特别好用的面霜推荐一下','关键词':'好用的面霜','关键词舆情':'中性'},{'关键词分类':'用户痛点', '关键词子句':'我最近长了一脸痘痘','关键词':'一脸痘痘','关键词舆情':'负面'},{'关键词分类':'人群', '关键词子句':'给女儿在学校用','关键词':'女儿','关键词舆情':'中性'},{'关键词分类':'场景', '关键词子句':'给女儿在学校用','关键词':'学校','关键词舆情':'中性'}]"}]
User: [{'type': 'text', 'text': '这款被子的制热效果非常好,晚上盖着就像被小火炉包围着一样,特别暖和,以前冬天睡觉总是冻得瑟瑟发抖,换了这个被子后,一整晚都暖烘烘的,感觉像是置身于温暖的阳光之下。'}]
Assistant:
Assistant:
ASSISTANT
```json
[
    {
        "关键词分类": "制热效果",
        "关键词子句": "这款被子的制热效果非常好",
        "关键词": "制热效果",
        "关键词舆情": "正面"
    },
    {
        "关键词分类": "体验感受",
        "关键词子句": "晚上盖着就像被小火炉包围着一样,特别暖和",
        "关键词": "暖和",
        "关键词舆情": "正面"
    },
    {
        "关键词分类": "用户痛点",
        "关键词子句": "以前冬天睡觉总是冻得瑟瑟发抖",
        "关键词": "冻得瑟瑟发抖",
        "关键词舆情": "负面"
    },
    {
        "关键词分类": "体验感受",
        "关键词子句": "换了这个被子后,一整晚都暖烘烘的,感觉像是置身于温暖的阳光之下",
        "关键词": "暖烘烘",
        "关键词舆情": "正面"
    }
]
```