Привет, я создал скрипт 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)

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

2
philmckendry 9 Мар 2015 в 17:20

2 ответа

Лучший ответ

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

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

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

appleSentiment = cl.classify(db.Apple)
                              ^

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

1
styvane 10 Мар 2015 в 17:39

Вот как можно проводить анализ настроений с помощью 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'])
0
Mona Jalal 3 Дек 2017 в 01:10