что такое точное решение для анализа настроений в Твиттере с Python? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть CSV-файл из 20K твитов со всей информацией, такой как местоположение, имя пользователя и дата, которой я хочу назначить ярлык положительный / нейтральный / отрицательный для каждого твита по Python. Я использовал следующий Python код из библиотеки textblob для 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:" У меня есть Корона ... держите вирус! "- папа сейчас в отпуске где-то во Флориде"
но, как вы понимаете, чувство вышеуказанный твит должен быть отрицательным. Как я могу сделать это точно? и как я могу найти точность моего вывода?

1 Ответ

1 голос
/ 21 апреля 2020

TextBlob оценивает полярность на основе полярности слов и блоков ввода (код здесь: https://github.com/sloria/TextBlob/blob/e6cd9791ae42e37b5a2132676f9ca69340e8d8c0/textblob/_text.py#L854). Такой подход можно легко спутать с шумными текстами, такими как твиты. Это довольно трудно улучшить, потому что это зависит от качества базовых языковых ресурсов.

Я бы предложил использовать полностью машинную модель, такую ​​как 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

...