将 wordnet txt 转换为 python nltk 中的列表
transforming wordnet txt into lists in python 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)))
它returns一长串wordnet中的所有名词名称:
例如
epoch
Caliphate
Christian_era
Common_era
day
year_of_grace
Y2K
generation
anniversary
如何将这个既不是字符串也不是列表的输出转换为列表?非常感谢。
而不是打印到标准输出:
print lemma.name()
为什么不将其附加到列表中并 return 列表?
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)))
它没有 return 任何东西。您的功能是打印,而不是return打印。
您需要 return 一个列表。作为旁注,您应该将函数参数重命名为 list
。你会无意中破坏某些东西。
一个选择是稍微修改您的函数以附加到列表,然后 return 即:
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()]
这两个功能 return 具有相同信息的列表。请注意,我删除了 wn.all_synsets(wn.NOUN)
周围的 list()
函数包装器,因为函数 return 是 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
如果列表的长度不同或不相等,assert
语句将抛出异常。
如果您只需要词条列表,请查看 OMW(Open Multilingual WordNet)http://compling.hss.ntu.edu.sg/omw/
$ wget http://compling.hss.ntu.edu.sg/omw/wns/eng.zip
$ unzip eng.zip
$ cut -f3 eng/wn-data-eng.tab | (read;cat)
我是运行以下函数:
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)))
它returns一长串wordnet中的所有名词名称:
例如
epoch
Caliphate
Christian_era
Common_era
day
year_of_grace
Y2K
generation
anniversary
如何将这个既不是字符串也不是列表的输出转换为列表?非常感谢。
而不是打印到标准输出:
print lemma.name()
为什么不将其附加到列表中并 return 列表?
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)))
它没有 return 任何东西。您的功能是打印,而不是return打印。
您需要 return 一个列表。作为旁注,您应该将函数参数重命名为 list
。你会无意中破坏某些东西。
一个选择是稍微修改您的函数以附加到列表,然后 return 即:
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()]
这两个功能 return 具有相同信息的列表。请注意,我删除了 wn.all_synsets(wn.NOUN)
周围的 list()
函数包装器,因为函数 return 是 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
如果列表的长度不同或不相等,assert
语句将抛出异常。
如果您只需要词条列表,请查看 OMW(Open Multilingual WordNet)http://compling.hss.ntu.edu.sg/omw/
$ wget http://compling.hss.ntu.edu.sg/omw/wns/eng.zip
$ unzip eng.zip
$ cut -f3 eng/wn-data-eng.tab | (read;cat)