我有以下代码,用于从输入文本文件中提取一个单词,并使用WordNet打印该单词的同义词、定义和例句。它根据词性将同义词从同义词集中分离出来,即动词同义词和形容词同义词分别打印。
这个词的同义词有: 1) flabbergast,boggle,bowl,上面是动词;2) stupefied,dumfounded,flabbergasted,stupefied,thunderstruck,dumbstricken,dumbstricken,这些都是形容词。
如何打印词性和同义词?到目前为止,我已经提供了下面的代码:
import nltk
from nltk.corpus import wordnet as wn
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
fp = open('sample.txt','r')
data = fp.read()
tokens= nltk.wordpunct_tokenize(data)
text = nltk.Text(tokens)
words = [w.lower() for w in text]
for a in words:
print a
syns = wn.synsets(a)
for s in syns:
print
print "definition:" s.definition
print "synonyms:"
for l in s.lemmas:
print l.name
print "examples:"
for b in s.examples:
print b
print 发布于 2019-11-26 19:42:35
只需对同义词集调用pos()即可。要列出一个引理的所有POS:
>>> from nltk.corpus import wordnet as wn
>>> syns = wn.synsets('dog')
>>> set([x.pos() for x in syns])
{'n', 'v'}不幸的是,除了source code之外,似乎没有任何地方记录这一点,它显示了可以在同义词集上调用的其他方法。
同步集属性,可通过具有相同名称的方法访问:
name:此同义词集的规范名称,使用此同义词集的第一个引理形成。请注意,如果该字符串使用不同的引理,则该名称可能与传递给构造函数的名称不同识别同义词集的词性,匹配模块级属性ADJ、synset.
pos:、ADV、NOUN或VERB.
lemmas:此synset.
definition:的词条对象列表此synset.
examples:的定义此synset.
offset:的示例字符串列表此synset.
lexname:的WordNet字典文件中的偏移量包含此同义词的词典编排文件的名称。发布于 2011-05-12 03:02:12
看起来你弄乱了你的缩进:
for a in words:
print a
syns = wn.synsets(a)看起来syns = wn.synsets(a)应该在words for循环中,这样你就可以对每个单词执行以下操作:
for w in words:
print w
syns = wn.synsets(w)
for s in syns:
print
print "definition:", s.definition
print "synonyms:"
for l in s.lemmas:
print l.name
print "examples:"
for b in s.examples:
print b
print发布于 2011-06-08 18:18:30
引理有一个synset属性,在它的pos属性中有它自己的词性。因此,如果我们有一个引理作为l,我们可以像这样访问它在spech中的一部分:
>>> l = Lemma('gladden.v.01.joy')
>>> l.synset.pos
'v'更一般地,我们可以将其扩展到一个循环中,以读取您的文件。我使用with语句,因为一旦循环完成,它就可以很好地关闭文件。
>>> with open('sample.txt') as f:
... raw = f.read()
... for sentence in nltk.sent_tokenize(raw):
... sentence = nltk.wordpunct_tokenize(sentence)
... for word in sentence:
... for synset in wn.synsets(word):
... for lemma in synset.lemmas:
... print lemma.name, lemma.synset.pos
...如果你想确保你只选择词性与你当前谈论的词具有相同词性的词元,那么你也需要识别该词的词性:
>>> import nltk
>>> from nltk.corpus import wordnet as wn
>>> with open('sample.txt') as f:
... raw = f.read()
... for sentence in nltk.sent_tokenize(raw):
... sentence = nltk.pos_tag(nltk.wordpunct_tokenize(sentence))
... for word, pos in sentence:
... print word, pos我把协调这两个问题留给读者作为练习。
https://stackoverflow.com/questions/5966773
复制相似问题