【问题标题】:Usage of nltk Sentiwordnet with python在 python 中使用 nltk Sentiwordnet
【发布时间】:2016-03-01 18:40:49
【问题描述】:

我正在使用 python NLTK 对 Twitter 数据进行情感分析。我需要一本字典,其中包含单词的 +ve 和 -ve 极性。我已经阅读了很多关于 sentiwordnet 的内容,但是当我将它用于我的项目时,它并没有提供高效和快速的结果。我想我没有正确使用它。谁能告诉我正确的使用方法?以下是我到目前为止所做的步骤:

  1. 推文的标记化
  2. 令牌的 POS 标记
  3. 将每个标签传递给哨兵

我正在使用 nltk 包进行标记化和标记。请参阅下面的部分代码:

import nltk
from nltk.stem import *
from nltk.corpus import sentiwordnet as swn

tokens=nltk.word_tokenize(row) #for tokenization, row is line of a file in which tweets are saved.
tagged=nltk.pos_tag(tokens) #for POSTagging

for i in range(0,len(tagged)):
     if 'NN' in tagged[i][1] and len(swn.senti_synsets(tagged[i][0],'n'))>0:
            pscore+=(list(swn.senti_synsets(tagged[i][0],'n'))[0]).pos_score() #positive score of a word
            nscore+=(list(swn.senti_synsets(tagged[i][0],'n'))[0]).neg_score()  #negative score of a word
    elif 'VB' in tagged[i][1] and len(swn.senti_synsets(tagged[i][0],'v'))>0:
           pscore+=(list(swn.senti_synsets(tagged[i][0],'v'))[0]).pos_score()
           nscore+=(list(swn.senti_synsets(tagged[i][0],'v'))[0]).neg_score()
    elif 'JJ' in tagged[i][1] and len(swn.senti_synsets(tagged[i][0],'a'))>0:
           pscore+=(list(swn.senti_synsets(tagged[i][0],'a'))[0]).pos_score()
           nscore+=(list(swn.senti_synsets(tagged[i][0],'a'))[0]).neg_score()
    elif 'RB' in tagged[i][1] and len(swn.senti_synsets(tagged[i][0],'r'))>0:
           pscore+=(list(swn.senti_synsets(tagged[i][0],'r'))[0]).pos_score()
           nscore+=(list(swn.senti_synsets(tagged[i][0],'r'))[0]).neg_score()

最后,我将计算有多少条推文是正面的,有多少条推文是负面的。 我哪里错了?我应该如何使用它?还有其他类似的易于使用的字典吗?

【问题讨论】:

  • 我不完全明白你的问题是什么。速度?
  • 没有。我有大约 4000 条推文。通过使用 sentiwordnet,我只得到 10 条正面推文和 18 条负面推文,这肯定不是正确的结果。当然速度也是一个问题,但主要问题是效率。编码有错误吗??
  • sentiwordnet 覆盖范围小于您从推文中获得的嘈杂输入,您必须对真实推文中的单词进行归一化以适应 sentiwordnet,例如u're -> you + are
  • 好的。那么有什么方法可以用 python 规范化这样的词吗?我的意思是任何类型的库或包或任何外部字典?因为手动编写会非常困难。

标签: python python-2.7 twitter nltk senti-wordnet


【解决方案1】:

是的,您还可以使用其他词典。您可以在这里找到一小部分词典:http://sentiment.christopherpotts.net/lexicons.html#resources 看来刘冰的意见词典很好用。

除了链接到那些词典之外,该网站还是一个非常好的情感分析教程。

【讨论】:

    【解决方案2】:

    计算情绪

    alist = [all_tokens_in_doc]
    
    totalScore = 0
    
    count_words_included = 0
    
    for word in all_words_in_comment:
    
        synset_forms = list(swn.senti_synsets(word[0], word[1]))
    
        if not synset_forms:
    
            continue
    
        synset = synset_forms[0] 
    
        totalScore = totalScore + synset.pos_score() - synset.neg_score()
    
        count_words_included = count_words_included +1
    
    final_dec = ''
    
    if count_words_included == 0:
    
        final_dec = 'N/A'
    
    elif totalScore == 0:
    
        final_dec = 'Neu'        
    
    elif totalScore/count_words_included < 0:
    
        final_dec = 'Neg'
    
    elif totalScore/count_words_included > 0:
    
        final_dec = 'Pos'
    
    return final_dec
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-30
      • 2013-03-17
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      相关资源
      最近更新 更多