Привет, я создал скрипт 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 ответа
Цитата из документации
classify: классифицирует строку текста.
Но вместо этого вы передаете ему коллекцию. db.Apple
- это набор, а не строковый текст.
appleSentiment = cl.classify(db.Apple)
^
Вам нужно написать запрос и использовать результат запроса в качестве аргумента для classify
Например, чтобы найти какой-либо конкретный твит, можно использовать find_one . Дополнительную информацию вы можете найти в документации . .
Вот как можно проводить анализ настроений с помощью 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'])
Похожие вопросы
Новые вопросы
python-2.7
Python 2.7 является последней основной версией в серии 2.x и больше не поддерживается с 1 января 2020 года. Используйте общий тег [python] во всех вопросах Python. Не добавляйте этот тег просто для указания версии Python, которую вы используете, если только вопрос не касается проблемы, специфичной для Python 2.7.