我有一个dataframe,其中names字段为:
print(df)
names
--------------------------------
0 U.S.A.
1 United States of America
2 USA
4 US America
5 Kenyan Footbal League
6 Kenyan Football League
7 Kenya Football League Assoc.
8 Kenya Footbal League Association
9 Tata Motors
10 Tat Motor
11 Tata Motors Ltd.
12 Tata Motor Limited
13 REL
14 Reliance Limited
15 Reliance Co.
现在我想将所有这些类似的名称合并到一个类别中,这样最终的数据帧看起来像这样:
print(df)
names group_name
---------------------------------------------
0 U.S.A. USA
1 United States of America USA
2 USA USA
4 US America USA
5 Kenyan Footbal League Kenya Football League
6 Kenyan Football League Kenya Football League
7 Kenya Football League Assoc. Kenya Football League
8 Kenya Footbal League Association Kenya Football League
9 Tata Motors Tata Motors
10 Tat Motor Tata Motors
11 Tata Motors Ltd. Tata Motors
12 Tata Motor Limited Tata Motors
13 REL Reliance
14 Reliance Limited. Reliance
15 Reliance Co. Reliance
现在只有16条记录,所以很容易查找所有可能的名称和名称中的异常,并创建一个映射字典。但实际上,我有一个包含5800个唯一名称的数据框(注意:在说明唯一名称的计数时,“USA”和“U.S.a.”被算作不同的实体)。
那么,有什么程序化的方法来解决这种情况吗?你知道吗
我尝试使用difflib
和fuzzywuzzy
库运行fuzzy match,但即使是它的最终结果也不具体。通常情况下,difflib
只会根据“limited”、“association”等词进行匹配,即使它们指的是两个不同的名称,其中只有“association”或“limited”作为常用词。
感谢您的帮助。你知道吗
编辑:
即使我创建了一个包含“association”、“limited”、“cooprations”、“group”等单词的停止词列表,当以不同方式提及时,也有可能遗漏这些停止词名称。例如,如果“association”和“limited”只是指“assoc.”、“ltd”和“ltd.”,那么我很可能会错过将其中一些添加到停止词列表中的机会。你知道吗
我已经尝试过,用LDA和NMF进行主题建模,结果与我之前使用difflib
和fuzzywuzzy
库所获得的结果非常相似。是的,在这些方法之前,我做了所有的预处理(转换成小写,leamtization,额外的空格处理)
迟答,集中一个小时,你可以用
difflib.SequenceMatcher
过滤大于0.6
的比率,还有一大块代码。。。另外,我只需删除每个列表的最后一个单词,在它被修改后的names
列中,得到最长的单词,它显然得到了您想要的结果,这里是。。。你知道吗输出:
尽我最大努力的一个代码。你知道吗
据我所知。我不这么认为,你可以有准确的结果,但你可以做一些事情,这将有助于你清理你的数据
你应该研究句子的相似性,python中有多个库,比如gensim,nltk
https://radimrehurek.com/gensim/tutorial.html
https://spacy.io/
https://www.nltk.org/
即使我创建了非常基本的文档相似性项目,您也可以查看这个github
https://github.com/tawabshakeel/Document-similarity-NLP-
我希望这些都能帮助你解决问题。你知道吗
相关问题 更多 >
编程相关推荐