我是NLP爱好者的新手Python,目前正在使用基于SentiWordNet的情绪判断。
我将PennTreeBank标签转换为WordNet标签的功能如下:
def penn2morphy(penntag, returnNone=False):
morphy_tag = {"NN":wn.NOUN, "JJ":wn.ADJ, "VB":wn.VERB, "RB":wn.ADV}
try:
return morphy_tag[penntag[:2]]
except:
return None if returnNone else ""
第二个函数执行实际情绪计算:
def swn_polarity(sentence):
sentiment = 0
tokens_count = 0
pos_tagged = pos_tag(word_tokenize(sentence))
senti_synsets=[]
for token, pos in pos_tagged:
wn_tag = penn2morphy(pos)
if wn_tag not in (wn.NOUN, wn.ADJ, wn.ADV, wn.VERB):
continue
senti_synset = swn.senti_synset(lesk(word_tokenize(sentence), token, pos=wn_tag).name())
senti_synsets.append(senti_synset)
for senti_synset in senti_synsets:
sentiment += senti_synset.pos_score() - senti_synset.neg_score()
tokens_count += 1
if not tokens_count:
return 0
if sentiment >= 0:
return 4
return 0
如果为正,则此函数返回4,如果为负,则返回0。这特定于我用于测试的STS_Gold_Tweet数据集。现在我的问题/问题是我会爱你NLP / Python专家帮助我:
此代码适用于标准句子,例如:“我喜欢咸焦糖冰淇淋。”但是,当我在句子中添加一些特殊字符时,此功能失败,例如“我非常喜欢咸焦糖冰淇淋@#$!”具有以下异常:AttributeError:'NoneType'对象没有属性'name'。我试图查看类似的问题,但找不到可能与我的用例有关的东西,因此我绝望地呼救。如果找不到PtB和WN标签之间的映射,则潜在的罪魁祸首是penn2morpy函数输出“None”。如何消除这个错误?
您是否会建议进一步改进此代码?例如,为了让它更快?或者您认为数据清理是否与Sentiwordnet结合使用Lesk?如果是这样,那么在Sentiwordnet - Lesk组合中你会推荐什么类型的清理任务?
你能否向我解释究竟是什么行
如果returnNone else“返回None 醇>
呢?我通过查看stackoverflow和/或在线教程开发了这段代码,除了它以某种方式工作之外我不确定我理解这个。
感谢您对我的承诺并提前回答我的问题! 问候, 巴特