我需要输入一个单词的输入文本文件。然后,我需要使用wordnet查找lemma_names,单词的同义词集的定义和示例。我读过这本书:"使用NLTK 2.0食谱进行Python文本处理"和"使用NLTK进行自然语言处理",以帮助我朝这个方向发展。尽管我已经知道可以使用终端来完成此操作,但是我无法使用文本编辑器来完成此操作。
例如,如果输入文本具有单词" flabbergasted",则输出需要采用以下方式:
吓坏的
(动词)吃惊的,吃惊的,吃惊的克服;"这使人感到困惑!"
(形容词)傻眼的,傻眼的,吃惊的,震惊的,雷击过的,傻眼的,傻傻的-仿佛惊奇而惊奇地傻了起来;"由于否认曾见过这起事故,一个警察圈感到震惊";"饱受摧残的al徒无语";"被他晋升的消息震惊了"
同义词集,定义和例句可直接从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 '
-----
'.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']
有没有一种方法可以检索词性以及引理名称组?
如果您重新登录到SO,则应该接受Andreys的回答。 因为他不仅回答了问题,还回应了您的评论以帮助您。
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']
非常感谢!! :)真是个愚蠢的错误!
有没有一种方法可以仅从同义词集中提取单词并将其作为参数传递?例如,对于单词flabbergasted,您将获得Synset(flabbergast.v.01)和Synset(dumbfounded.s.01)。如何将它们作为参数传递给lemma_name函数?
从nltk.corpus导入wordnet syns = wordnet.synsets(car)[s.lemmas [0]。s在syns中的名称] >>> [汽车,汽车,汽车,汽车,电缆车]
我更新了答案
万分感谢!!我已经用输出更新了代码。有没有一种方法可以同时检索词类和词组名称呢?例如,字词是flabbergast,boggle和bowl over。有没有办法将其与输出结合在一起?
要获得词性,请使用[s.lemmas中l的l.synset.pos对于syns中s的使用]
打印[s.lemmas()中l的syns中s的s的l.name()]
我如何使用自己的火车数据?
在这里,我创建了一个易于使用(导入)的模块,并将一个字符串传递给它,它将返回该字符串的所有引理词。
模块:
#!/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 import lemmalist"
>>> from lemma import lemmalist
>>> lemmalist('car')
['car', 'auto', 'automobile', 'machine', 'motorcar', 'car', 'railcar', 'railway_car', 'railroad_car', 'car', 'gondola', 'car', 'elevator_car', 'cable_car', 'car']
干杯!
出现错误no ImportError: No module named lemma
synonyms = []
for syn in wordnet.synsets("car"):
for l in syn.lemmas():
synonyms.append(l.name())
print synonyms
请修改您的答案以包含更多信息。不建议使用仅代码和"尝试此"答案,因为它们不包含可搜索的内容,并且不解释为什么有人应该"尝试此"。
在NLTK 3.0中,lemma_names已从属性更改为方法。 因此,如果出现错误提示:
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'
]