为了账号安全,请及时绑定邮箱和手机立即绑定

如何从单词列表中删除相似的单词?

如何从单词列表中删除相似的单词?

婷婷同学_ 2021-06-04 13:45:04
list1=['Usha', 'Das', 'Anas', 'Chand', 'Tokyo', 'Milkha Singh', 'Gurbachan Singh Randhawa', 'PT Usha', 'KM Beenamol', 'Hima Das', 'under-20', 'Muhammed Anas', 'Dutee Chand', 'the Asian Games', 'Asian Games', 'Olympic Games']从上面的列表中可以看到Das和Hima Das在重复。我只想要全名是Hima Das。与 Usha 和 PT Usha 类似。o/p 我需要什么['Tokyo', 'Milkha Singh', 'Gurbachan Singh Randhawa', 'PT Usha', 'KM Beenamol', 'Hima Das', 'under-20', 'Muhammed Anas', 'Dutee Chand', 'Asian Games', 'Olympic Games']
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

我使用Fuzzy Wuzzy库解决了类似的问题。它将根据多种因素返回与列表中其他项目相似的单词。


all_names=['Usha', 'Das', 'Anas', 'Chand', 'Tokyo', 'Milkha Singh', 'Gurbachan Singh Randhawa', 'PT Usha', 'KM Beenamol', 'Hima Das', 'under-20', 'Muhammed Anas', 'Dutee Chand', 'the Asian Games', 'Asian Games', 'Olympic Games']


for name in list1:

    matches = fuzzy.extractBests(name, list1)

从这里您可以找到匹配列表中最长的匹配并将其视为您的“候选”匹配。例如,“Das”将在一定程度上匹配“Hima Das”,因此它们将被返回,并根据长度选择“Hima Das”。


然后将候选匹配项添加到集合中以确保它们是唯一的。


查看完整回答
反对 回复 2021-06-06
?
RISEBY

TA贡献1856条经验 获得超5个赞

使用多个单词从列表中的每个元素创建一组单个单词。


然后使用列表理解来过滤完全在该集合中的元素。


此解决方案是O(n)您在效率方面可以做到的最佳解决方案(比仅按原样检查列表更好O(n^2))。


parts = {w for e in list1 if ' ' in e for w in e.split()}

out = [e for e in list1 if e not in parts]


查看完整回答
反对 回复 2021-06-06
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

也许是列表理解 + any

print([i for i in list1 if not any(i in x and i!=x for x in list1)])


查看完整回答
反对 回复 2021-06-06
  • 3 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信