python - 删除同一列中的部分重复项,同时保留较长的文本?
问题描述
所以我是 Python 新手,我希望在同一列中删除部分相似的条目。例如,这些是数据框中的一列中的条目-
第 1 行 - “我有你的沐浴露,我想知道它是否含有动物成分。另外,哪些动物成分?我不喜欢使用含有动物成分的产品。”
第 2 行 - “这上面也没有 ADA。这是假牙膏模仿你的吗?”
第 3 行 - “我有你的沐浴露,我想知道它是否含有动物成分。我不喜欢使用含有动物成分的产品。”
第 4 行 - “我没有看到这个盒子上的 ADA 印章。我只是想确保它仍然可以安全使用?”
第 5 行 - “您好,我只是想知道新牙膏是否获得 ADA 批准?包装上没有说明”
第 6 行 - “您好,我只是想知道新牙膏是否获得 ADA 批准?盒子上没有写明。”
所以在这一列中,第 1 行和第 3 行以及第 5 行和第 6 行是相似的(部分重复)。我希望 python 将这些识别为重复,保留较长的句子并删除较短的句子并将新数据导出到 csv 文件。
预期输出 - 第 1 行 - “我有你的沐浴露,我想知道它是否含有动物成分。另外,哪些动物成分?我不喜欢使用含有动物成分的产品。”
第 2 行 - “这上面也没有 ADA。这是假牙膏模仿你的吗?”
第 3 行 - “我没有看到这个盒子上的 ADA 印章。我只是想确保它仍然可以安全使用?”
第 4 行 - “您好,我只是想知道新牙膏是否获得 ADA 批准?包装上没有说明”
我尝试使用 FuzzyWuzzy,其中我使用了相似性排序功能,但它没有给我预期的输出。有没有更简单的代码?
解决方案
这是我的方法,希望评论是不言自明的。
from fuzzywuzzy import fuzz,process
rows = ["I have your Body Wash and I wonder if it contains animal ingredients. Also, which animal ingredients? I prefer not to use product with animal ingredients.","This also doesn't have the ADA on there. Is this a fake toothpaste an imitation of yours?","I have your Body Wash and I wonder if it contains animal ingredients. I prefer not to use product with animal ingredients.","I didn't see the ADA stamp on this box. I just want to make sure it was still safe to use?","Hello, I was just wondering if the new toothpaste is ADA approved? It doesn’t say on the packaging","Hello, I was just wondering if the new toothpaste is ADA approved? It doesn’t say on the box."]
clean = []
threshold = 80 # this is arbitrary
for row in rows:
# score each sentence against each other sentence
# [('string', score),..]
scores = process.extract(row, rows, scorer=fuzz.token_set_ratio)
# basic idea is if there is a close second match we want to evaluate
# and keep the longer of the two
if scores[1][1] > threshold:
clean.append(max([x[0] for x in scores[:2]],key=len))
else:
clean.append(scores[0][0])
# remove dupes
clean = set(clean)
推荐阅读
- c - 为什么vim成为孤儿进程时会崩溃?
- javascript - 为 React 中不存在的 DOM 元素设置选中的属性 true
- javascript - 解决错误 500;“初始化前无法访问‘对象’”}
- node.js - Discord JS/MongoDB SyntaxError: Unexpected token '}'
- javascript - 如何使用 discord.js 进行嵌入
- javascript - 试图重新创建 getElementsByClassName
- arrays - Map 不是 Objects React 中数组中的函数
- image - 如何在颤动中将图像下载到画廊
- python - 通过在 Python 中等待协程来设置类属性
- regex - 带有可选参数的 RewriteRule 用于 .htacces 中的重定向