首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印词性和单词的同义词

打印词性和单词的同义词
EN

Stack Overflow用户
提问于 2011-05-11 23:30:00
回答 3查看 4.4K关注 0票数 3

我有以下代码,用于从输入文本文件中提取一个单词,并使用WordNet打印该单词的同义词、定义和例句。它根据词性将同义词从同义词集中分离出来,即动词同义词和形容词同义词分别打印。

这个词的同义词有: 1) flabbergast,boggle,bowl,上面是动词;2) stupefied,dumfounded,flabbergasted,stupefied,thunderstruck,dumbstricken,dumbstricken,这些都是形容词。

如何打印词性和同义词?到目前为止,我已经提供了下面的代码:

代码语言:javascript
复制
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 
EN

回答 3

Stack Overflow用户

发布于 2019-11-26 19:42:35

只需对同义词集调用pos()即可。要列出一个引理的所有POS:

代码语言:javascript
复制
>>> 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字典文件中的偏移量包含此同义词的词典编排文件的名称。
票数 2
EN

Stack Overflow用户

发布于 2011-05-12 03:02:12

看起来你弄乱了你的缩进:

代码语言:javascript
复制
for a in words:
   print a 
syns = wn.synsets(a)

看起来syns = wn.synsets(a)应该在words for循环中,这样你就可以对每个单词执行以下操作:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-06-08 18:18:30

引理有一个synset属性,在它的pos属性中有它自己的词性。因此,如果我们有一个引理作为l,我们可以像这样访问它在spech中的一部分:

代码语言:javascript
复制
>>> l = Lemma('gladden.v.01.joy')
>>> l.synset.pos
'v'

更一般地,我们可以将其扩展到一个循环中,以读取您的文件。我使用with语句,因为一旦循环完成,它就可以很好地关闭文件。

代码语言:javascript
复制
>>> 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
...

如果你想确保你只选择词性与你当前谈论的词具有相同词性的词元,那么你也需要识别该词的词性:

代码语言:javascript
复制
>>> 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

我把协调这两个问题留给读者作为练习。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5966773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档