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

16 投票
4 回答
23133 浏览
提问于 2025-04-16 15:02

我需要处理一个输入文本文件,里面只有一个单词。接着,我需要使用WordNet找到这个单词的词根名称、定义和例句。我看过《Python文本处理与NLTK 2.0食谱》和《使用NLTK进行自然语言处理》这两本书,想要帮助我完成这个任务。虽然我明白如何在终端中做到这一点,但在文本编辑器中却遇到了困难。

举个例子,如果输入文本中有单词“flabbergasted”,那么输出应该是这样的:

flabbergasted
(动词) flabbergast, boggle, bowl over - 让人感到惊讶;“这真让人难以置信!”
(形容词) dumbfounded, dumfounded, flabbergasted, stupefied, thunderstruck, dumbstruck, dumbstricken - 就像被惊讶和震惊所震撼;“一圈警察因她否认看到事故而感到震惊”;“那些感到震惊的市议员们无言以对”;“他因晋升的消息而感到震惊”

这些词汇、定义和例句都是直接从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']

有没有办法同时获取词性和词根名称的组呢?

4 个回答

1
synonyms = []
for syn in wordnet.synsets("car"):
    for l in syn.lemmas():
        synonyms.append(l.name())
print synonyms

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

5

在这里,我创建了一个模块,这个模块可以很方便地被使用(导入)。只要给它传一个字符串,它就会返回这个字符串的所有词根。

模块:

#!/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,所以用“from 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']

谢谢!

21
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']

撰写回答