Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TextBlob NaiveBayesAnalyzer非常慢(与模式相比)_Python_Naivebayes_Textblob - Fatal编程技术网

Python TextBlob NaiveBayesAnalyzer非常慢(与模式相比)

Python TextBlob NaiveBayesAnalyzer非常慢(与模式相比),python,naivebayes,textblob,Python,Naivebayes,Textblob,我正在使用TextBlob for python对推特进行情绪分析。TextBlob中的默认分析器是PatternAnalyzer,它工作得非常好,速度也相当快 sent = TextBlob(tweet.decode('utf-8')).sentiment 我现在尝试切换到NaiveBayesAnalyzer,发现运行时不适合我的需要。(每条推文接近5秒。) 我以前使用过NaiveBayes分类器的scikit learn实现,但没有发现它这么慢,所以我想知道在这种情况下是否正确使用了它 我

我正在使用TextBlob for python对推特进行情绪分析。TextBlob中的默认分析器是PatternAnalyzer,它工作得非常好,速度也相当快

sent = TextBlob(tweet.decode('utf-8')).sentiment
我现在尝试切换到NaiveBayesAnalyzer,发现运行时不适合我的需要。(每条推文接近5秒。)

我以前使用过NaiveBayes分类器的scikit learn实现,但没有发现它这么慢,所以我想知道在这种情况下是否正确使用了它

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


有人知道加快速度的方法吗?

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

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

print tb("sentence you want to test")

如果您在数据框中有表数据,并且希望使用textblob的NaiveBayesAnalyzer,那么这将是Alan非常有用的答案。只需更改相关字符串序列的
word\u列表

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]
上面将
情绪
返回的元组拆分为三个独立的序列

如果序列都是字符串,但它有混合的数据类型,这一点很有效,因为
对象
数据类型可能存在问题,那么您可能需要在其周围放置try/except块来捕获异常

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


希望这有帮助。

这太棒了!我的测试文件的运行时间从5个多小时降到了7秒以下@马特姆。您发现哪种分析仪更好?模式库或nltk?@soham.m17中的NaiveBayes我没有对它们进行广泛的比较,但我似乎记得(至少出于我的目的)它们的性能相当。我正在使用PatternAnalyzer,但这需要很多时间。有没有办法加快速度?@Alan,我正在用你的代码测试这个精确的东西,似乎需要一段时间?我大概需要多少钱?
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]