我有以下代码用于从输入文本文件中获取单词并使用WordNet打印单词的同义词,定义和示例句子。它根据词性将同义词与synset分开,即动词的同义词和形容词的同义词分别打印出来。
flabbergasted这个词的例子同义词是1)flabbergast,boggle,碗是动词和2)傻眼,笨拙,大惊小怪,恍恍惚惚,雷鸣般的,笨拙的,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
答案 0 :(得分:1)
看起来你搞砸了你的缩进:
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
答案 1 :(得分:0)
引理具有synset
属性,该属性在其pos
属性中具有自己的词性。所以,如果我们有一个引理l
,我们可以像这样访问它的部分:
>>> 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
我将把这两者作为读者的练习进行调和。
答案 2 :(得分:0)
只需在同义集上调用pos()
。列出引理的所有POS:
>>> from nltk.corpus import wordnet as wn
>>> syns = wn.synsets('dog')
>>> set([x.pos() for x in syns])
{'n', 'v'}
不幸的是,除了source code以外,其他地方似乎都没有记录,{{3}}显示了可以在同义集上调用的其他方法。
同义词集属性,可通过具有相同名称的方法访问:
name
:此同义词集的规范名称,使用该同义词集的第一个引理形成。请注意,这可能与名称不同 如果该字符串使用了不同的引理来传递给构造函数,则
识别同义词集。pos
:同义词集的语音部分,与模块级别属性ADJ,ADJ_SAT,ADV,NOUN或VERB之一匹配。lemmas
:此同义词集的引理对象的列表。definition
:此同义词集的定义。examples
:此同义词集的示例字符串的列表。offset
:此同义词集在WordNet dict文件中的偏移量。lexname
:包含此同义词集的词典编辑器文件的名称。