Выполнение анализа настроений в коллекции mongodb, содержащей элементы JSON (твиты) в Python

Привет, я создал скрипт Python, используя tweepy для потоковой передачи твитов на основе массива ключевых слов в коллекцию mongodb на основе имени элемента в массиве, по которому он был отфильтрован через pymongo, т.е. (твиты Apple сохранены в коллекции Apple). Этот скрипт сохраняет их в формате JSON, и теперь я хочу выполнить анализ тональности этих сохраненных твитов.

Я прочитал несколько руководств по этому вопросу и решил использовать NaiveBayesClassifier, встроенный в модуль TextBlob. Я создал некоторые данные поезда и передал их в классификатор (просто обычный текстовый массив с настроением в конце каждого элемента), но я не уверен, как применить этот классификатор к моим уже сохраненным твитам. Я думаю, что это как показано ниже, но это не работает, так как выдает ошибку:

Traceback (most recent call last):
  File "C:/Users/Philip/PycharmProjects/FinalYearProject/TrainingClassification.py", line 25, in <module>
    cl = NaiveBayesClassifier(train)
  File "C:\Python27\lib\site-packages\textblob\classifiers.py", line 192, in __init__
    self.train_features = [(self.extract_features(d), c) for d, c in self.train_set]
ValueError: too many values to unpack

Вот мой код:

from textblob.classifiers import NaiveBayesClassifier
import pymongo

train = [
    'I love this sandwich.', 'pos',
    'I feel very good about these beers.', 'pos',
    'This is my best work.', 'pos',
    'What an awesome view", 'pos',
    'I do not like this restaurant', 'neg',
    'I am tired of this stuff.', 'neg',
    'I can't deal with this', 'neg',
    'He is my sworn enemy!', 'neg',
    'My boss is horrible.', 'neg'
]

cl = NaiveBayesClassifier(train)
conn = pymongo.MongoClient('localhost', 27017)
db = conn.TwitterDB

appleSentiment = cl.classify(db.Apple)
print ("Sentiment of Tweets about Apple is " + appleSentiment)

Любая помощь будет принята с благодарностью.


person philmckendry    schedule 09.03.2015    source источник


Ответы (2)


Цитирование документации

classify: Классифицирует строку текста.

Но вместо этого вы передаете ему коллекцию. db.Apple - это коллекция, а не текст строки.

appleSentiment = cl.classify(db.Apple)
                              ^

Вам нужно написать запрос и использовать результат запроса в качестве аргумента для classify Например, чтобы найти какой-либо конкретный твит, можно использовать найти_один. Дополнительные сведения см. в документации. .

person styvane    schedule 10.03.2015

Вот как вы можете выполнять анализ тональности с помощью TextBlob и PyMongo:

from textblob import TextBlob
import re

def clean_tweet(tweet):
    return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t]) | (\w +:\ / \ / \S +)", " ", tweet).split())


def tweet_sentiment(tweet):
    tweet_analysis = TextBlob(clean_tweet(tweet))
    if tweet_analysis.polarity > 0:
        return 'positive'
    elif tweet_analysis.polarity == 0:
        return 'neutral'
    else:
        return 'positive'

for tweet in tweets:
    print(tweet_sentiment(tweet['text']), " sentiment for the tweet: ", tweet['text'])
person Mona Jalal    schedule 03.12.2017