在列表中匹配和分组彼此相关(相关)的相似词

Posted

技术标签:

【中文标题】在列表中匹配和分组彼此相关(相关)的相似词【英文标题】:Match and Group similar words that are related to each other (relevant) in a list 【发布时间】:2022-01-03 01:27:00 【问题描述】:

这不仅是对相似性的单词进行分组,而且是对含义进行分组。假设我有以下列表:

func = ['Police Man','Police Officer','Police','Admin','Administrator','Dietitian','Food specialist','Administrative Assistant','Economist','Economy Consultant']

我想找到具有相似含义和功能的单词。我尝试了fuzzywuzzy,但它没有达到我想要的效果:

for i in func:
    for n in func:
        print(i,":",n)
        print(fuzz.ratio(i, n))

这是 fuzzing 的一部分,它不能完成这项工作:

Dietitian : Dietitian
100
Dietitian : Food specialist
25

我认为我应该使用库 nltk 或词干提取?在列表中查找相关单词和功能的最佳方法是什么?

【问题讨论】:

【参考方案1】:

我认为我应该使用 ... 词干提取?

您绝对不想使用词干提取。词干只会把词带到词根,所以 stem("running") = "run"。它不会根据含义做任何事情,所以 stem("sprinting") = "sprint" != "run"。 :(

我相信我应该使用 nltk ...

WordNet 将让您搜索称为“synsets”的同义词集,您可以通过 nltk 甚至通过 Web 界面访问它。不过,它不擅长复合词。 :( 主要是单字。

因此,您可以查找"officer" and "policeman" 并查看它们具有重叠的含义。当然,“官”还有其他含义;词必须有多接近才能符合您的搜索条件?例如。如果“食品专家”与“营养师”相同,那么“食品专家”与“厨师”相同吗?

如果 WordNet 看起来确实是一个有用的工具,请查看他们的 Python API。你会想要类似的东西

common = [synset for synset in wn.synsets("officer") if synset in wn.synsets("policeman")
return len(common) > 0

【讨论】:

以上是关于在列表中匹配和分组彼此相关(相关)的相似词的主要内容,如果未能解决你的问题,请参考以下文章

python中的相似词分组

mongoDB聚合将相似的文档彼此相邻分组

对相似参数进行分组的逻辑

R语言ggplot2可视化线图(line)自定义配置标题文本相关内容颜色和图例(legend)颜色相匹配(和分组线图的颜色相匹配match colors of groups)

根据 .dat 文件中的相似文本将行类别分组到列表中

如何对相似的类别进行分组?