改进我的SentiwordNet评分功能(摆脱NoneType对象没有'name'参数)

时间:2018-06-05 09:57:59

标签: python-3.x nlp senti-wordnet

我是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专家帮助我:

  1. 此代码适用于标准句子,例如:“我喜欢咸焦糖冰淇淋。”但是,当我在句子中添加一些特殊字符时,此功能失败,例如“我非常喜欢咸焦糖冰淇淋@#$!”具有以下异常:AttributeError:'NoneType'对象没有属性'name'。我试图查看类似的问题,但找不到可能与我的用例有关的东西,因此我绝望地呼救。如果找不到PtB和WN标签之间的映射,则潜在的罪魁祸首是penn2morpy函数输出“None”。如何消除这个错误?

  2. 您是否会建议进一步改进此代码?例如,为了让它更快?或者您认为数据清理是否与Sentiwordnet结合使用Lesk?如果是这样,那么在Sentiwordnet - Lesk组合中你会推荐什么类型的清理任务?

  3. 你能否向我解释究竟是什么行

    如果returnNone else“

  4. 返回None

    呢?我通过查看stackoverflow和/或在线教程开发了这段代码,除了它以某种方式工作之外我不确定我理解这个。

    感谢您对我的承诺并提前回答我的问题! 问候, 巴特

0 个答案:

没有答案