首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫名称的聚类/聚类

熊猫名称的聚类/聚类
EN

Stack Overflow用户
提问于 2019-06-20 10:36:00
回答 2查看 594关注 0票数 3

我有一个名字段的dataframe,如:

代码语言:javascript
复制
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.

现在,我想把所有类似的名字合并成一个类别,这样最后的dataframe看起来就像这样:

代码语言:javascript
复制
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.’表示唯一计数时计算为不同的实体)。

因此,是否有任何方案办法来处理这种情况?

我试着使用difflibfuzzywuzzy库运行模糊匹配,但是即使它的最终结果也不具体。通常情况下,difflib只会根据诸如“限制”、“联想”等单词进行匹配,尽管它们会使用两个不同的名称,其中只有“联想”或“有限”。

任何帮助都是非常感谢的。

编辑:

即使我创建了一个停止词的列表,比如“联合”、“有限”、“合作”、“组”等等,但如果以不同的方式提到这些停止词,也有可能会遗漏这些停止词的名字。例如,如果“协会”和“有限公司”被称为“assoc.”、“ltd”和“ltd.”我有可能会错过把其中的一些添加到停止词列表中。

我已经尝试过用LDA和NMF进行主题建模--结果与我之前使用difflibfuzzywuzzy库所取得的结果非常相似。是的,在这些方法之前,我做了所有的预处理(转换为更低的情况,学习,额外的空白处理)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-21 10:39:24

延迟回答,集中讨论一个小时,您可以使用difflib.SequenceMatcher并过滤比0.6大的比率,以及大量的代码.此外,我只需删除每个列表的最后一个字,在修改后的names列中,得到最长的单词,这显然会得到您想要的结果,这里是.

代码语言:javascript
复制
import difflib
df2 = df.copy()
df2.loc[df2.names.str.contains('America'), 'names'] = 'US'
df2['names'] = df2.names.str.replace('.', '').str.lstrip()
df2.loc[df2.names.str.contains('REL'), 'names'] = 'Reliance'
df['group_name'] = df2.names.apply(lambda x: max(sorted([i.rsplit(None, 1)[0] for i in df2.names.tolist() if difflib.SequenceMatcher(None, x, i).ratio() > 0.6]), key=len))
print(df)

输出:

代码语言:javascript
复制
                                names             group_name
0                              U.S.A.                    USA
1            United States of America                    USA
2                                 USA                    USA
3                          US America                    USA
4               Kenyan Footbal League  Kenya Football League
5              Kenyan Football League  Kenya Football League
6        Kenya Football League Assoc.  Kenya Football League
7    Kenya Footbal League Association  Kenya Football League
8                         Tata Motors            Tata Motors
9                           Tat Motor            Tata Motors
10                   Tata Motors Ltd.            Tata Motors
11                 Tata Motor Limited            Tata Motors
12                                REL               Reliance
13                   Reliance Limited               Reliance
14                       Reliance Co.               Reliance

用我最大的努力。

票数 1
EN

Stack Overflow用户

发布于 2019-06-20 11:03:15

据我所知。我不认为这样你可以得到准确的结果,但是你可以做一些有助于你清理数据的事情

  1. 首先使用.lower()降低字符串
  2. 删除字符串,以使用条带()删除额外的空格。
  3. 标记字符串
  4. 数据的词干和归纳

应该研究python中存在的多个类库,如gensim、nltk。

https://radimrehurek.com/gensim/tutorial.html

https://spacy.io/

https://www.nltk.org/

即使我创建了非常基本的文档相似项目,您也可以检查这个github

https://github.com/tawabshakeel/Document-similarity-NLP-

我希望所有这些都能帮助你解决问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56684159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档