Python 使用WordNet查找同义词、定义和例句

Python 使用WordNet查找同义词、定义和例句,python,nltk,wordnet,Python,Nltk,Wordnet,我需要一个带有一个单词的输入文本文件。然后我需要使用wordnet查找单词的引理名称、定义和语法集示例。我已经阅读了《使用NLTK 2.0进行Python文本处理的烹饪书》和《使用NLTK进行自然语言处理》这本书来帮助我实现这一目标。虽然我已经理解了如何使用终端来实现这一点,但我无法使用文本编辑器来实现这一点 例如,如果输入文本包含单词“flabbergated”,则输出需要采用以下方式: 目瞪口呆 (动词)目瞪口呆,发抖,大吃一惊;“这让人难以置信!” (形容词)目瞪口呆,哑巴,目瞪口呆,目瞪

我需要一个带有一个单词的输入文本文件。然后我需要使用wordnet查找单词的引理名称、定义和语法集示例。我已经阅读了《使用NLTK 2.0进行Python文本处理的烹饪书》和《使用NLTK进行自然语言处理》这本书来帮助我实现这一目标。虽然我已经理解了如何使用终端来实现这一点,但我无法使用文本编辑器来实现这一点

例如,如果输入文本包含单词“flabbergated”,则输出需要采用以下方式:

目瞪口呆 (动词)目瞪口呆,发抖,大吃一惊;“这让人难以置信!” (形容词)目瞪口呆,哑巴,目瞪口呆,目瞪口呆,雷霆万钧,目瞪口呆,目瞪口呆——仿佛惊讶和惊讶地哑口无言;“一圈警察因为她否认看到了事故而目瞪口呆”;“目瞪口呆的议员说不出话来”;“他被提升的消息惊呆了”

语法集、定义和例句直接从WordNet获得

我有以下代码:


from __future__ import division
import nltk
from nltk.corpus import wordnet as wn


tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
fp = open("inpsyn.txt")
data = fp.read()

#to tokenize input text into sentences

print '\n-----\n'.join(tokenizer.tokenize(data))# splits text into sentences

#to tokenize the tokenized sentences into words

tokens = nltk.wordpunct_tokenize(data)
text = nltk.Text(tokens)
words = [w.lower() for w in text]  
print words     #to print the tokens

for a in words:
    print a

syns = wn.synsets(a)
print "synsets:", syns

for s in syns:
    for l in s.lemmas:
        print l.name
    print s.definition
    print s.examples

我得到以下输出:


flabbergasted

['flabbergasted']
flabbergasted
synsets: [Synset('flabbergast.v.01'), Synset('dumbfounded.s.01')]
flabbergast
boggle
bowl_over
overcome with amazement
['This boggles the mind!']
dumbfounded
dumfounded
flabbergasted
stupefied
thunderstruck
dumbstruck
dumbstricken
as if struck dumb with astonishment and surprise
['a circle of policement stood dumbfounded by her denial of having seen the accident', 'the flabbergasted aldermen were speechless', 'was thunderstruck by the news of his promotion']
有没有办法检索词性和一组引理名称

def synset(word):
    wn.synsets(word)
不返回任何内容,因此默认情况下您将获得
None

你应该写

def synset(word):
    return wn.synsets(word)
提取引理名称:

from nltk.corpus import wordnet
syns = wordnet.synsets('car')
syns[0].lemmas[0].name
>>> 'car'
[s.lemmas[0].name for s in syns]
>>> ['car', 'car', 'car', 'car', 'cable_car']


[l.name for s in syns for l in s.lemmas]
>>>['car', 'auto', 'automobile', 'machine', 'motorcar', 'car', 'railcar', 'railway_car', 'railroad_car', 'car', 'gondola', 'car', 'elevator_car', 'cable_car', 'car']

在这里,我创建了一个易于使用(导入)的模块,通过向其传递一个字符串,该模块将返回该字符串的所有引理词

模块:

#!/usr/bin/python2.7
''' pass a string to this funciton ( eg 'car') and it will give you a list of
words which is related to cat, called lemma of CAT. '''
from nltk.corpus import wordnet as wn
import sys
#print all the synset element of an element
def lemmalist(str):
    syn_set = []
    for synset in wn.synsets(str):
        for item in synset.lemma_names:
            syn_set.append(item)
    return syn_set
用法:

注:模块名为lemma.py,因此为“从lemma导入lemmalist”

干杯

在中,
引理名称
已从属性更改为方法。因此,如果您得到一个错误,说:

synonyms = []
for syn in wordnet.synsets("car"):
    for l in syn.lemmas():
        synonyms.append(l.name())
print synonyms
TypeError: 'method' object is not iterable
您可以使用以下方法修复它:

>>> from nltk.corpus import wordnet as wn
>>> [item for sysnet in wn.synsets('car') for item in sysnet.lemma_names()]
这将输出:

>>> [
       'car', 'auto', 'automobile', 'machine', 'motorcar', 'car', 
       'railcar', 'railway_car', 'railroad_car', 'car', 'gondola', 
       'car', 'elevator_car', 'cable_car', 'car'
    ]

有没有一种方法可以只从语法集中提取单词并将其作为参数传递?例如,对于单词flabbergated,您可以得到Synset('flabbergast.v.01')和Synset('dumbbeasted.s.01')。如何将这些作为参数传递给lemma_name函数?从nltk.corpus导入wordnet syns=wordnet.synsets('car')[s.lemmas[0]。syns中s的名称]>>>['car'、'car'、'car'、'car'、'cable_car']非常感谢!!我已经用输出更新了代码。有没有一种方法可以分别检索词性和一组引理名称?例如,flabbast、boggle和bowlover是动词。有没有办法将其与输出一起获得?要获得词性,请使用[l.synset.pos for l in s.lemmas for s in syns]打印[l.name()for s in syns for l in s.lemmas()]如果您重新登录,您应该接受Andrey的回答,尤其是因为他不仅回答了,但也回应了您的评论以帮助您。请编辑您的答案以包含更多信息。不鼓励只编写代码和“尝试这个”答案,因为它们不包含可搜索的内容,也不解释为什么有人应该“尝试这个”。结果出现错误无导入错误:没有名为lemma的模块
>>> [
       'car', 'auto', 'automobile', 'machine', 'motorcar', 'car', 
       'railcar', 'railway_car', 'railroad_car', 'car', 'gondola', 
       'car', 'elevator_car', 'cable_car', 'car'
    ]