有没有办法提高nltk.sentiment.vader情感分析器的性能?

时间:2017-07-25 07:41:21

标签: python performance data-manipulation sentiment-analysis vader

我的文字来自社交网络,所以你可以想象它的本质,我认为文字是干净的,尽可能少的;进行以下消毒后:

  • 没有网址,没有用户名
  • 没有标点符号,没有重音符号
  • 没有数字
  • 没有停止词(我认为vader无论如何都这样做)

我认为运行时间是线性的,我不打算进行任何并行化,因为更改可用代码所需的工作量很大, 例如,对于大约1000个文本,范围从~50 kb到~150 kb字节,需要大约

我的机器上的运行时间大约是10分钟。

有没有更好的方法来喂养算法以加快烹饪时间? 代码就像SentimentIntensityAnalyzer一样简单,这里是主要部分

sid = SentimentIntensityAnalyzer()

c.execute("select body, creation_date, group_id from posts where (substring(lower(body) from (%s))=(%s)) and language=\'en\' order by creation _ date DESC (s,s,)")
conn.commit()
if(c.rowcount>0):
                dump_fetched = c.fetchall()

textsSql=pd.DataFrame(dump_fetched,columns=['body','created_at', 'group_id'])
del dump_fetched
gc.collect()
texts = textsSql['body'].values
# here, some data manipulation: steps listed above
polarity_ = [sid.polarity_scores(s)['compound'] for s in texts]

1 个答案:

答案 0 :(得分:1)

/ 1。您无需删除停用词,nltk + vader已经这样做了。

/ 2。除了处理开销之外,您无需删除标点,因为这也会影响维达的极性计算。所以,继续使用标点符号。

    >>> txt = "this is superb!"
    >>> s.polarity_scores(txt)
    {'neg': 0.0, 'neu': 0.313, 'pos': 0.687, 'compound': 0.6588}
    >>> txt = "this is superb"
    >>> s.polarity_scores(txt)
    {'neg': 0.0, 'neu': 0.328, 'pos': 0.672, 'compound': 0.6249}

/3。你也应该引入句子标记化,因为它会提高准确性,然后根据句子计算段落的平均极性。例如:https://github.com/cjhutto/vaderSentiment/blob/master/vaderSentiment/vaderSentiment.py#L517

/ 4。极性计算完全相互独立,可以使用multiprocessing pool表示小尺寸,比如10,以提高速度。

polarity_ = [sid.polarity_scores(s)['compound'] for s in texts]