我有一个2万个tweets的CSV文件,其中包含所有信息,例如位置,用户名和日期,我想通过Python为每个tweet分配一个标签正/中/负。我将以下textblob库中的Python代码用于Tweets Sentiment Analysis。
import csv
from textblob import TextBlob
import sys
# Do some version specific stuff
if sys.version[0] == '3':
from importlib import reload
sntTweets = csv.writer(open("sentimentTweets.csv", "w", newline=''))
if sys.version[0] == '2':
reload(sys)
sys.setdefaultencoding("utf-8")
sntTweets = csv.writer(open("sentimentTweets.csv", "w"))
alltweets = csv.reader(open("Corona.csv", 'r'))
for row in alltweets:
blob = TextBlob(row[2])
print (blob.sentiment.polarity)
if blob.sentiment.polarity > 0:
sntTweets.writerow([row[0], row[1], row[2], row[3], blob.sentiment.polarity, "positive"])
elif blob.sentiment.polarity < 0:
sntTweets.writerow([row[0], row[1], row[2], row[3], blob.sentiment.polarity, "negative"])
elif blob.sentiment.polarity == 0.0:
sntTweets.writerow([row[0], row[1], row[2], row[3], blob.sentiment.polarity, "neutral"])
此代码运行完美,并生成了sentimentTweets.csv文件。我喜欢这样的想法:对于每个推文,它都给我两个标签:-1和1之间的数字,并且还将推文分类为负面/中性/正面。
但不准确。例如,对于以下推文,它将分配正数,编号为:0.285714285714285。“ RT @eliyudin:“我会带电晕...拿着病毒!!-爸爸现在在佛罗里达某处度假”]但是如您所知,上述推文的情绪应该是负面的。如何使它准确?以及如何找到输出的准确性?
TextBlob根据输入的单词和块的极性(此处为代码:https://github.com/sloria/TextBlob/blob/e6cd9791ae42e37b5a2132676f9ca69340e8d8c0/textblob/_text.py#L854)来估计极性。这种方法很容易与诸如Tweets之类的嘈杂文本混淆。这很难改善,因为它取决于基础语言资源的质量。
我建议使用完全机器学习的模型,例如Flair:
import flair
flair_sentiment = flair.models.TextClassifier.load('en-sentiment')
s = flair.data.Sentence(sentence)
flair_sentiment.predict(s)
total_sentiment = s.labels
在FastText中训练模型也应该很容易:https://github.com/charlesmalafosse/FastText-sentiment-analysis-for-tweets