Python:在NLTK中向Wordnet Synsets方法传递变量

2024-04-28 13:22:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要做一个需要NLTK的项目,所以我两周前开始学习Python,但是很难理解Python和NLTK。在

从NLTK文档中,我可以理解以下代码,如果我在下面的代码中手动添加单词apple和pear,它们就可以正常工作。在

from nltk.corpus import wordnet as wn

apple = wn.synset('apple.n.01')
pear = wn.synset('pear.n.01')

print apple.lch_similarity(pear)

Output: 2.53897387106

但是,我需要使用NLTK来处理项目列表。例如,我有一个下面的项目列表,我想比较列表1和列表2中的项目-例如:将列表1中的单词1与列表2中的每个单词进行比较,然后将列表1中的单词2与列表2中的每个单词进行比较,直到将列表1中的所有单词进行比较。在

^{pr2}$

上面的代码当然会出错。有人能告诉我如何将一个变量传递到synset方法中吗[wn.synset公司(*pass_variable_in_here*)]这样我就可以使用双循环来获取它们的lch_相似性值。谢谢您。在


Tags: 项目代码from文档apple列表corpus手动
1条回答
网友
1楼 · 发布于 2024-04-28 13:22:41

wordnet.synset需要一个格式为3-part name的字符串: word.pos.nn。在

您没有为list1和中的每个单词指定pos.nn部分 list2。在

假设所有的词都是名词似乎是合理的,所以我们可以试试 将字符串'.n.01'附加到list1list2中的每个字符串:

for word1, word2 in IT.product(list1, list2):
    wordFromList1 = wordnet.synset(word1+'.n.01')
    wordFromList2 = wordnet.synset(word2+'.n.02')

然而,这并不奏效。wordnet.synset('drinks.n.01')引发WordNetError。在

另一方面,same doc page表示可以 使用synsets方法查找类似单词:

例如,wordnet.synsets('drinks')返回列表:

^{pr2}$

所以在这一点上,你需要考虑一下你想让程序做什么。如果您可以选择列表中的第一项作为drinks的代理, 那你就可以利用

for word1, word2 in IT.product(list1, list2):
    wordFromList1 = wordnet.synsets(word1)[0]
    wordFromList2 = wordnet.synsets(word2)[0]

这将导致程序如下所示:

import nltk.corpus as corpus
import itertools as IT

wordnet = corpus.wordnet
list1 = ["apple", "honey", "drinks", "flowers", "paper"]
list2 = ["pear", "shell", "movie", "fire", "tree", "candle"]

for word1, word2 in IT.product(list1, list2):
    # print(word1, word2)
    wordFromList1 = wordnet.synsets(word1)[0]
    wordFromList2 = wordnet.synsets(word2)[0]
    print('{w1}, {w2}: {s}'.format(
        w1 = wordFromList1.name,
        w2 = wordFromList2.name,
        s = wordFromList1.lch_similarity(wordFromList2)))

它产生了

apple.n.01, pear.n.01: 2.53897387106
apple.n.01, shell.n.01: 1.07263680226
apple.n.01, movie.n.01: 1.15267950994
apple.n.01, fire.n.01: 1.07263680226
...

相关问题 更多 >