【问题标题】:nltk: how to search connection between some words?nltk:如何搜索一些单词之间的联系?
【发布时间】:2019-02-11 18:30:51
【问题描述】:

我正在使用 nltk 和 wordnet 来链接属于某些关系组的单词。例如“停车”和“建筑”应该有一些父联系。我使用上位词,但有些词没有联系。

x = wordnet.synset('parking.n.01')
y = wordnet.synset('building.n.01')

print(x._shortest_hypernym_paths(y))
print(y._shortest_hypernym_paths(x))

{Synset('parking.n.01'): 0, Synset('room.n.02'): 1, Synset('position.n.07'): 2, Synset('relation.n.01'): 3, Synset('abstraction.n.06'): 4, Synset('entity.n.01'): 5, Synset('ROOT'): 6} {Synset('building.n.01'): 0, Synset('structure.n.01'): 1, Synset('artifact.n.01'): 2, Synset('whole.n.02'): 3, Synset('object.n.01'): 4, Synset('physical_entity.n.01'): 5, Synset('entity.n.01'): 6, 同义词集('ROOT'): 7}

在这里,连接通过“entity.n.01”,老实说,它是几乎所有物理名词的词根。我怎样才能得到比这更好的东西?

我想要'停车' -> '结构' -> '建筑'之类的东西;它可以更长,但“外星人”字样不应该出现在那里,例如“猴子”,它也可以压缩到实体。

【问题讨论】:

    标签: python nltk wordnet


    【解决方案1】:

    找到了一些有用的方法来查看可能性:

    def getShortestHypernymPath(word1, word2, nulls=False):
        syns1 = wordnet.synsets(word1)
        syns2 = wordnet.synsets(word2)
        for s1 in syns1:
            for s2 in syns2:
                lch = s2.lowest_common_hypernyms(s1)
                if len(lch) > 0 or nulls:
                    print(s1, '<-->', s2, '===', lch)
    
    nlpf.getShortestHypernymPath('parking', 'building', nulls=False)
    

    这会返回:

    Synset('parking.n.01') Synset('building.n.01') === [Synset('entity.n.01')] Synset('parking.n.01') Synset('construction.n.01') === [Synset('abstraction.n.06')] Synset('parking.n.01') Synset('construction.n.07') === [Synset('abstraction.n.06')] Synset('parking.n.01') Synset('building.n.04') === [Synset('abstraction.n.06')] Synset('parking.n.02') Synset('building.n.01') === [Synset('entity.n.01')] Synset('parking.n.02') Synset('construction.n.01') === [Synset('act.n.02')] Synset('parking.n.02') Synset('construction.n.07') === [Synset('act.n.02')] Synset('parking.n.02') Synset('building.n.04') === [Synset('abstraction.n.06')] Synset('park.v.02') Synset('build.v.05') === [Synset('control.v.01')]

    所以我至少可以调解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-06
      • 2023-01-09
      • 2022-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多