在python nltk中将wordnet txt转换为列表

在python nltk中将wordnet txt转换为列表,python,list,function,nltk,Python,List,Function,Nltk,我正在运行以下功能: import nltk from nltk.corpus import wordnet as wn def noun_names(list): for synset in list: for lemma in synset.lemmas(): print lemma.name() noun_names(list(wn.all_synsets(wn.NOUN))) 并返回wordnet中所有名词名称的长列表: impor

我正在运行以下功能:

import nltk
from nltk.corpus import wordnet as wn

def noun_names(list): 
    for synset in list:
        for lemma in synset.lemmas():
            print lemma.name()

noun_names(list(wn.all_synsets(wn.NOUN)))
并返回wordnet中所有名词名称的长列表:

import nltk
from nltk.corpus import wordnet as wn

def noun_names(list): 
    for synset in list:
        for lemma in synset.lemmas():
            print lemma.name()

noun_names(list(wn.all_synsets(wn.NOUN)))
e、 g


如何将这个既不是字符串也不是列表的输出转换为列表?非常感谢

而不是使用以下命令打印到标准输出:

print lemma.name()
为什么不将其附加到列表并返回列表

def noun_names(list):
    names = []
    for synset in list:
        for lemma in synset.lemmas():
            names.append(lemma.name())
    return names

names = noun_names(list(wn.all_synsets(wn.NOUN)))

它没有归还任何东西。您的功能是打印,而不是返回

您需要返回一个列表。作为旁注,您应该从
列表中重命名函数参数。你会无意中用那东西砸到东西

一个选项是稍微修改函数以附加到列表中,然后返回:

def noun_names(word_list):
    lemma_list = []
    for synset in word_list:
        for lemma in synset.lemmas():
            lemma_list.append(lemma.name())
    return lemma_list
另一个选项是将上述内容更改为列表:

def noun_names(word_list): 
    return [lemma.name() for synset in word_list for lemma in synset.lemmas()]

这两个函数都返回具有相同信息的列表。请注意,我删除了
list()
函数在
wn.all\u synsets(wn.noon)
周围的包装,因为该函数返回
list

lemma_list1 = noun_names(wn.all_synsets(wn.NOUN))
lemma_list2 = noun_names_1(wn.all_synsets(wn.NOUN))
print len(lemma_list1), len(lemma_list2), len(lemma_list1) == len(lemma_list2), lemma_list1 == lemma_list2
最终打印报表输出:

146347 146347 True True
这表明两个列表具有相同数量的元素(
146347
每个元素和第一个
True
),并且列表本身是相等的。代码中更合适的测试是:

assert len(lemma_list1) == len(lemma_list2)
assert lemma_list1 == lemma_list2

如果列表长度不相同或不相等,则断言语句将抛出异常。

如果您只需要引理列表,请查看OMW(打开多语言WordNet)


非常感谢你。我以前尝试过这样做,但我忘记了完成循环的最后一行“returnnames”。非常有帮助!不用担心——您可能也应该注意Andy的警告——用python命名一个列表“list”通常是一个危险的提议。非常感谢Andy的建议和详细的回复。我是NLP的新手,很高兴看到这样一个有用的在线社区。
$ wget http://compling.hss.ntu.edu.sg/omw/wns/eng.zip
$ unzip eng.zip
$ cut -f3 eng/wn-data-eng.tab | (read;cat)