如何计算Python中两个单词含义的距离

时间:2017-04-13 03:04:50

标签: python nlp nltk

我想知道是否可以计算Python中两个相关单词之间的距离/相似度(例如"欺诈"和#34;窃取")。这两个词本身并不是同义词,但它们显然是相关的。 NLP中是否有任何概念/算法能够以数字方式显示这种关系?也许是通过NLTK?

我不是在寻找Levenshtein距离,因为它与构成单词的单个角色有关。我正在寻找意义的关系。

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

我的建议如下:

  • 将每个单词放在同一个词库中,以获取同义词列表。
  • 获取两个单词的相似同义词集的大小。
  • 这是衡量单词之间相似性的指标。

如果您想进行更全面的分析:

  • 同时获取两个单词的反义词。
  • 获取两个单词的反义词集合的交集大小。

如果你想更进一步!...

  • 将每个单词放在同一个词库中,以获取同义词列表。
  • 使用查询结果中的前n(= 5或其他)单词来启动新查询。
  • 重复此操作至您认为足够的深度。
  • 从重复的同义词查询中收集同义词。
  • 从两个同义词集合中获取两个单词的相似同义词集合的大小。
  • 这是衡量单词之间相似性的指标。

答案 1 :(得分:0)

NLTK的wordnet是您要用于此目的的工具。首先使用以下命令获取每个单词的所有含义的集合:

synonymSet = wordnet.synsets(word)

然后遍历两个单词中每个单词的每种可能含义,并在嵌套循环中将它们相互比较:

similarity = synonym1.res_similarity(synonym2,semcor_ic)

将该值取平均值或使用找到的最大值;由你决定。

此示例使用的单词相似度比较使用“ IC”或信息内容。如果单词更具体或包含更多信息,则相似性得分会更高,因此通常而言,它与我们在考虑单词相似性时的含义更接近。

要使用这些内容,您需要导入和变量:

import nltk    
from nltk.corpus import wordnet
from nltk.corpus import wordnet_ic
semcor_ic = wordnet_ic.ic('ic-semcor.dat')