Python 如何打印Wordnet的全部内容(最好使用NLTK)?

Python 如何打印Wordnet的全部内容(最好使用NLTK)?,python,nlp,nltk,wordnet,corpus,Python,Nlp,Nltk,Wordnet,Corpus,NLTK提供了打印布朗(或古腾堡)语料库中所有单词的功能。但是等效函数在Wordnet上似乎不起作用 有没有办法通过NLTK做到这一点?如果没有,怎么做呢 这项工作: from nltk.corpus import brown as b print b.words() 这会导致AttributeError: from nltk.corpus import wordnet as wn print wn.words() 请尝试以下操作: for word in wn.words(): p

NLTK提供了打印布朗(或古腾堡)语料库中所有单词的功能。但是等效函数在Wordnet上似乎不起作用

有没有办法通过NLTK做到这一点?如果没有,怎么做呢

这项工作:

from nltk.corpus import brown as b
print b.words()
这会导致AttributeError:

from nltk.corpus import wordnet as wn
print wn.words()

请尝试以下操作:

for word in wn.words():
    print word

这应该是可行的,因为
wn.words()
实际上是一个生成字符串序列的迭代器,而不是像
b.words这样的字符串列表。
for
循环使迭代器一次生成一个单词。

对于wordnet,它是一个词义资源,因此资源中的元素按词义索引(也称为
语法集

要遍历
语法集

>>> from nltk.corpus import wordnet as wn
>>> for ss in wn.all_synsets():
...     print ss
...     print ss.definition()
...     break
... 
Synset('able.a.01')
(usually followed by `to') having the necessary means or skill or know-how or authority to do something
对于每个语法集(意义/概念),都有一个附加的单词列表,称为
引理
:引理是我们在查字典时使用的单词的规范(“根”)形式

要使用一行程序在wordnet中获得完整的引理列表,请执行以下操作:

>>> lemmas_in_wordnet = set(chain(*[ss.lemma_names() for ss in wn.all_synsets()]))
有趣的是,
wn.words()

>>> lemmas_in_words  = set(i for i in wn.words())
>>> len(lemmas_in_wordnet)
148730
>>> len(lemmas_in_words)
147306
但奇怪的是,使用
wn.words()
收集的单词总数存在一些差异

“将wordnet的全部内容打印成文本”似乎过于雄心勃勃,因为
wordnet
的结构有点像一个层次图,语法集相互关联,每个语法集都有自己的属性。这就是为什么wordnet文件不能简单地作为一个文本文件保存

要查看语法集包含的内容,请执行以下操作:

>>> first_synset = next(wn.all_synsets())
>>> dir(first_synset)
['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '__unicode__', '__weakref__', '_all_hypernyms', '_definition', '_examples', '_frame_ids', '_hypernyms', '_instance_hypernyms', '_iter_hypernym_lists', '_lemma_names', '_lemma_pointers', '_lemmas', '_lexname', '_max_depth', '_min_depth', '_name', '_needs_root', '_offset', '_pointers', '_pos', '_related', '_shortest_hypernym_paths', '_wordnet_corpus_reader', 'also_sees', 'attributes', 'causes', 'closure', 'common_hypernyms', 'definition', 'entailments', 'examples', 'frame_ids', 'hypernym_distances', 'hypernym_paths', 'hypernyms', 'hyponyms', 'instance_hypernyms', 'instance_hyponyms', 'jcn_similarity', 'lch_similarity', 'lemma_names', 'lemmas', 'lexname', 'lin_similarity', 'lowest_common_hypernyms', 'max_depth', 'member_holonyms', 'member_meronyms', 'min_depth', 'name', 'offset', 'part_holonyms', 'part_meronyms', 'path_similarity', 'pos', 'region_domains', 'res_similarity', 'root_hypernyms', 'shortest_path_distance', 'similar_tos', 'substance_holonyms', 'substance_meronyms', 'topic_domains', 'tree', 'unicode_repr', 'usage_domains', 'verb_groups', 'wup_similarity']

查看此
howto
将有助于了解如何访问wordnet中所需的信息:

这将生成synset中所有单词的同义词输出:

from nltk.corpus import wordnet as wn
synonyms=[]
for word in wn.words():
    print (word,end=":")
    for syn in wn.synsets(word):
      for l in syn.lemmas():
        synonyms.append(l.name())
    print(set(synonyms),end="\n")
    synonyms.clear()

我有:AttributeError:'WordNetCorpusReader'对象没有属性'words'Hmmm…请尝试以下两行代码,看看是否得到与我相同的响应:wn.words Out[10]:wn.words()Out[11]:不,抱歉。您正在使用哪个NLTK?我在3.0.4上,我正在使用NLTK 3.0.3和
lemmas\U in_words=set(我在wn.words()中代表我)
给我:AttributeError:'WordNetCorpusReader'对象没有属性'words',请将其升级到NLTK 3.1
pip安装-U NLTK
=)谢谢。这就成功了。顺便说一句,我知道你在台大。今年我访问了TW几个月,非常喜欢它。我很高兴答案对我有所帮助。顺便说一句,“NTU”是模棱两可的,
wn.synsets('NTU')=[Synset('Nanyang\u technology\u University.n.1')、Synset('National\u Taiwan\u University.n.1')]
!这将生成synset中所有单词的同义词输出。请用详细信息编辑您的问题。只有代码的答案往往会被标记为删除,因为它们是“低质量的”。