algorithm - 什么是 "least common subsumer"以及如何计算它?

标签 algorithm wordnet

我想使用 Wu 和 Palmer 方法在 wordnet 中计算相似度,

wp = (2 X depth(lcs)) / (depth(synset1) + depth(synset2))

其中 lcssynset1synset2 的“最不常见的子消费者”

我的问题是:

  1. 什么是“最不常见的子消费者”?
  2. 如何计算?

最佳答案

根据这个paper ,两个概念A和B的Least Common Subsumer是“最具体的概念,它是A和B的祖先”,其中概念树由is-a关系定义。一个概念被定义为另一个概念的祖先,就像你在人类家谱中定义祖先的方式一样,它是另一个概念的 parent ,祖 parent ,等等。例如:

  1. 汽车是汽车,汽车是交通工具
  2. 船是一种交通工具。
  3. 车辆是一个对象。

图表:

    Object
      |
    Vehicle
      |
  ---------
  |       |
 Boat  Automobile
          |
         Car

在这种情况下,“automobile”是“car”的父级(也是祖先),而“vehicle”是“car”的祖先。 “车”也是“船”的始祖。在这种情况下,“船”和“汽车”的 LCS 是“车辆”,因为它是最具体的概念,是“船”和“汽车”的祖先。请注意,虽然“object”是“boat”和“car”的共同子类,但它并不是最不重要的,因为“object”(在本例中是“vehicle”)仍然有一个子类,这也是一个常见的“车”和“船”的总称。 “Automobile”并不是最不常见的子类,因为它不是“boat”的祖先。

为了计算相似度,我建议你使用可用的库,否则你需要自己构建概念图,这很麻烦。

在 Perl 中,您可以使用 WordNet::Similarity package

在 Python 中,您可以使用 nltk 包,具体来说,wup_similarity

在 Java 中,您可以使用 ws4j package

关于algorithm - 什么是 "least common subsumer"以及如何计算它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18629469/

相关文章:

algorithm - 将 k block 石头放在 n * m 的网格上,以最大化每个角上有一 block 石头的矩形的数量

python - 将字符串列表转换为同义词集列表

java - 遵循只能增加的值集合中的最小值

python - 根据 Pandas 中的当前值填充序列先前值

javascript - 字符串拆分映射组合的时间复杂度

algorithm - 最长公共(public)前缀 - 分而治之方法复杂性分析

python - 如何使用nltk找出英语中是否存在单词

python - 使用 python 通过 wordnet 消除 YAGO 类的歧义

java - Wordnet ws4j 混淆 lesk 值,迭代所有同义词集