我正在使用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(),被描述为“在电影评论语料库中训练朴素贝叶斯分类器”。它是否在每次运行之前在内部训练分析仪?我希望不会。
有没有人知道如何加快这个速度?
答案 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 行。
希望对您有所帮助。