在Python中使用NLTK方法释义

时间:2017-02-28 12:03:15

标签: python nltk

尝试在NLTK中使用标记化来做简单的释义。

执行以下功能:

from nltk.tokenize import word_tokenize
from nltk.tag import pos_tag
from nltk.corpus import wordnet as wn

def tag(sentence):
 words = word_tokenize(sentence)
 words = pos_tag(words)
 return words

def paraphraseable(tag):
 return tag.startswith('NN') or tag == 'VB' or tag.startswith('JJ')

def pos(tag):
 if tag.startswith('NN'):
  return wn.NOUN
 elif tag.startswith('V'):
  return wn.VERB

def synonyms(word, tag):
 return set([lemma.name for lemma in sum([ss.lemmas for ss in    wn.synsets(word, pos(tag))],[])])

def synonymIfExists(sentence):
 for (word, t) in tag(sentence):
   if paraphraseable(t):
    syns = synonyms(word, t)
    if syns:
     if len(syns) > 1:
      yield [word, list(syns)]
      continue
   yield [word, []]

def paraphrase(sentence):
 return [x for x in synonymIfExists(sentence)]

paraphrase("The quick brown fox jumps over the lazy dog")

在完成最后一行之后("快速的棕色狐狸跳过懒狗"))它给我的错误就是这样:

只能将列表(不是"方法")连接到列表

那种情况似乎有什么不妥?

1 个答案:

答案 0 :(得分:1)

错误位于synonyms()中:lemmasSynset的类方法,nameLemma的类方法。这意味着你必须通过提供()来明确地将它们称为函数,如下所示:

def synonyms(word, tag):
    lemma_lists = [ss.lemmas() for ss in wn.synsets(word, pos(tag))]
    lemmas = [lemma.name() for lemma in sum(lemma_lists, [])]
    return set(lemmas)

如果你解决了这个问题,你的错误信息就会消失。