TextBlob NaiveBayesAnalyzer极慢(与Pattern相比)

时间:2015-10-20 16:23:10

标签: python naivebayes textblob

我正在使用TextBlob for python对推文进行一些情绪分析。 TextBlob中的默认分析器是PatternAnalyzer,它可以很好地工作并且速度非常快。

sent = TextBlob(tweet.decode('utf-8')).sentiment

我现在尝试切换到NaiveBayesAnalyzer,发现运行时对我的需求不切实际。 (每条推文接近5秒。)

sent = TextBlob(tweet.decode('utf-8'), analyzer=NaiveBayesAnalyzer()).sentiment

我之前使用过朴素贝叶斯分类器的scikit学习实现,并没有发现它这么慢,所以我想知道我是否在这种情况下正确使用它。

我假设分析仪是预训练的,至少the documentation个状态为“Naive Bayes分析仪,它是根据电影评论数据集进行训练的。”但是它还有一个函数train(),被描述为“在电影评论语料库中训练朴素贝叶斯分类器”。它是否在每次运行之前在内部训练分析仪?我希望不会。

有没有人知道如何加快这个速度?

2 个答案:

答案 0 :(得分:9)

是的,Textblob将在每次运行前训练分析仪。您可以使用以下代码来避免每次训练分析仪。

from textblob import Blobber
from textblob.sentiments import NaiveBayesAnalyzer
tb = Blobber(analyzer=NaiveBayesAnalyzer())

print tb("sentence you want to test")

答案 1 :(得分:0)

如果您在数据框中有表数据并想使用 textblob 的 NaiveBayesAnalyzer,则添加到 Alan 的非常有用的答案中,然后这会起作用。只需将 word_list 更改为您的相关字符串系列。

import textblob
import pandas as pd

tb = textblob.Blobber(analyzer=NaiveBayesAnalyzer())
for index, row in df.iterrows():
    sent = tb(row['word_list']).sentiment
    df.loc[index, 'classification'] = sent[0]
    df.loc[index, 'p_pos'] = sent[1]
    df.loc[index, 'p_neg'] = sent[2]

以上将 sentiment 返回的元组拆分为三个独立的系列。

如果系列都是字符串,但如果它具有混合数据类型,这可能会起作用,这在带有 object 数据类型的 Pandas 中可能会出现问题,那么您可能想要在它周围放置一个 try/except 块来捕获异常。

在我的测试中,它在大约 4.7 秒内按时完成了 1000 行。

希望对您有所帮助。