我是 Python 和 NLTK 的新手,所以请多多包涵。我希望在句子的上下文中找到一个词的意义。我正在使用 Lesk WSD 算法,但每次运行它都会给出不同的输出。我知道 Lesk 有一定程度的不准确。但是,我认为 POS 标签会提高准确性。
Lesk 算法将 POS 标记作为参数,但它以 'n'、's'、'v' 作为输入,而不是 'NN'、'VBP' 或 pos_tag() 函数输出的其他 POS 标记. 我想知道如何以'n','s','v'的形式标记单词,或者是否有一种方法可以将'NN','VBP'和其他标签转换为'n ','s','v',所以我可以将它们作为 lesk(context_sentence,word,pos_tag) 函数的输入。
之后我正在使用 SentiWordNet 计算每个单词的情感分数。
from nltk.wsd import lesk
from nltk import word_tokenize
import nltk, re, pprint
from nltk.corpus import sentiwordnet as swn
def word_sense():
sent = word_tokenize("He should be happy.")
word = "be"
pos = "v"
score = lesk(sent,word,pos)
print(score)
print (str(score),type(score))
set1 = re.findall("'([^']*)'",str(score))[0]
print (set1)
bank = swn.senti_synset(str(set1))
print (bank)
word_sense()