尝试在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")
在完成最后一行之后("快速的棕色狐狸跳过懒狗"))它给我的错误就是这样:
只能将列表(不是"方法")连接到列表
那种情况似乎有什么不妥?
答案 0 :(得分:1)
错误位于synonyms()
中:lemmas
是Synset
的类方法,name
是Lemma
的类方法。这意味着你必须通过提供()
来明确地将它们称为函数,如下所示:
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)
如果你解决了这个问题,你的错误信息就会消失。