Автор оригинала: Dzaky Widya Putra.
Представьте себе, что вы являетесь владельцем продукта, который хочет знать, что люди говорят о вашем продукте в социальных сетях. Возможно, ваша компания запустила новый продукт, и вы хотите знать, как люди отреагировали на него. Возможно, вы захотите использовать интернет-анализатор, например Монкелеар или Talkwalker Отказ Но не было бы неплохо, если бы мы могли сделать наши собственные настроения Analyzer? Давайте сделаем это тогда!
В этом руководстве мы собираемся сделать бот Telegram, которая сделает анализ настроений твитов, связанных с ключевым словом, который мы определяем.
Если это ваше впервые построение телеграммы бота, вы можете прочитать Это пост первый.
Начиная
1. Установите библиотеки
Мы собираемся использовать Tweepy собрать данные Tweet. Мы будем использовать NLTK Чтобы помочь нам очистить твиты. Google натуральный язык API сделает анализ настроений. Python-Telegram-Bot отправит результат через Telegram Chat.
pip3 install tweepy nltk google-cloud-language python-telegram-bot
2. Получите ключи API Twitter
Чтобы иметь возможность собрать твиты из Twitter, нам нужно создать учетную запись разработчика, чтобы сначала получить ключи API Twitter.
Перейти к Разработчик Twitter Сайт и создайте учетную запись, если у вас нет одного.
Открыть Приложения Страница, нажмите «Создать приложение», заполните форму и нажмите «Создать».
Нажмите на вкладку «Клавиши и токенс», скопируйте клавишу API и секретный ключ API в разделе «Клавиши API потребителей».
Нажмите кнопку «Создать» в разделе «Token Token & Access Token Token». Скопируйте токен доступа и доступ к секрету доступа, которые были созданы.
Большой! Теперь у вас должна быть четыре ключа – ключ API, секретный ключ API, токен доступа и секрет токена доступа. Сохраните эти ключи для последующего использования.
3. Включить API Google натурального языка
Нам нужно включить API Google Natural язык сначала, если мы хотим использовать услугу.
Перейти к Консоль разработчиков Google и создать новый проект (или выберите тот, который у вас есть).
На панели инструментов проекта нажмите «Включить APIS и Services» и найдите API облачного натурального языка.
Нажмите «Включить», чтобы включить API.
4. Создание ключа учетной записи службы
Если мы хотим использовать службы Google Cloud, такие как Google Natural Language, нам нужен ключ учетной записи услуг. Это похоже на наши учетные данные для использования услуг Google.
Перейти к Консоль разработчиков Google , нажмите «Учетные данные» вкладку, выберите «Создать учетные данные» и нажмите «Ключ учетной записи службы».
Выберите «Учет службы службы по умолчанию приложений по умолчанию» и JSON в качестве типа клавиши, затем нажмите «Создать».
Есть файл .json, который будет автоматически загружен, назовите его Credsss.json
Отказ
Установите Google_application_credentials
С пути нашего Credsss.json
Файл в терминале.
export GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'
Если все хорошо, то пришло время написать нашу программу.
Напишите программу
Эта программа соберет все твиты, содержащие определенное ключевое слово в последние 24 часа максимум 50 твитов. Затем он проанализирует настроения твитов один за другим. Мы вышлем результат (среднее значение настроения) через чат Telegram.
Это простой рабочий процесс нашей программы.
Давайте сделаем одну функцию для определения каждого потока.
1. Подключитесь к API Twitter
Первое, что нам нужно сделать, это собрать данные твитов, поэтому мы должны сначала подключиться к Twitter API.
Импортируйте Tweepy Library.
import tweepy
Определите ключи, которые мы генерировали ранее.
ACC_TOKEN = 'YOUR_ACCESS_TOKEN' ACC_SECRET = 'YOUR_ACCESS_TOKEN_SECRET' CONS_KEY = 'YOUR_CONSUMER_API_KEY' CONS_SECRET = 'YOUR_CONSUMER_API_SECRET_KEY'
Сделать функцию под названием Аутентификация
Для подключения к API с четырьмя параметрами являются все клавиши.
def authentication(cons_key, cons_secret, acc_token, acc_secret): auth = tweepy.OAuthHandler(cons_key, cons_secret) auth.set_access_token(acc_token, acc_secret) api = tweepy.API(auth) return api
2. Поиск в твитах
Мы можем искать твиты с двумя критериями, основанными на времени или количестве. Если он основан на времени, мы определяем интервал времени, и если он основан на количестве, мы определяем общие твиты, которые мы хотим собрать. Поскольку мы хотим собрать твиты из последних 24 часов с максимальными твитамими 50, мы будем использовать оба критерия.
Поскольку мы хотим собрать твиты за последние 24 часа, давайте возьмем вчерашнюю дату в качестве нашего временного параметра.
from datetime import datetime, timedelta today_datetime = datetime.today().now() yesterday_datetime = today_datetime - timedelta(days=1) today_date = today_datetime.strftime('%Y-%m-%d') yesterday_date = yesterday_datetime.strftime('%Y-%m-%d')
Подключите к API Twitter с помощью функции, которую мы определены ранее.
api = authentication(CONS_KEY,CONS_SECRET,ACC_TOKEN,ACC_SECRET)
Определите наши параметры поиска. Q
Где мы определяем наше ключевое слово, С
Является ли дата начала нашего поиска, RESLACT_TYPE = «недавнее»
означает, что мы собираемся взять новейшие твиты, lang = 'en'
собирается взять только английские твиты, а Предметы (Total_tweets)
Где мы определяем максимальные твиты, которые мы собираемся взять.
search_result = tweepy.Cursor(api.search, q=keyword, since=yesterday_date, result_type='recent', lang='en').items(total_tweets)
Оберните эти коды в функции под названием search_tweets
с ключевое слово
. и total_tweets
как параметры.
def search_tweets(keyword, total_tweets): today_datetime = datetime.today().now() yesterday_datetime = today_datetime - timedelta(days=1) today_date = today_datetime.strftime('%Y-%m-%d') yesterday_date = yesterday_datetime.strftime('%Y-%m-%d') api = authentication(CONS_KEY,CONS_SECRET,ACC_TOKEN,ACC_SECRET) search_result = tweepy.Cursor(api.search, q=keyword, since=yesterday_date, result_type='recent', lang='en').items(total_tweets) return search_result
3. Очистите твиты
Прежде чем мы проанализируем настроение Tweets, нам нужно немного очистить твиты, поэтому API Google Natural Language может их лучше определить.
Мы будем использовать библиотеки NLTK и REGEX, чтобы помочь нам в этом процессе.
import re from nltk.tokenize import WordPunctTokenizer
Мы удаляем имя пользователя в каждом Tweet, поэтому в основном мы можем удалить все, что начинается с @
И мы используем Regex, чтобы сделать это.
user_removed = re.sub(r'@[A-Za-z0-9]+','',tweet.decode('utf-8'))
Мы также удаляем ссылки в каждом Tweet.
link_removed = re.sub('https?://[A-Za-z0-9./]+','',user_removed)
Числа также удаляются со всех твитов.
number_removed = re.sub('[^a-zA-Z]',' ',link_removed)
Последнее, преобразуйте все символы в нижнее пространство, затем удалите каждое ненужное пространство.
lower_case_tweet = number_removed.lower() tok = WordPunctTokenizer() words = tok.tokenize(lower_case_tweet) clean_tweet = (' '.join(words)).strip()
Оберните эти коды в функцию, называемую Clean_tweets
с Tweet
как наш параметр.
def clean_tweets(tweet): user_removed = re.sub(r'@[A-Za-z0-9]+','',tweet.decode('utf-8')) link_removed = re.sub('https?://[A-Za-z0-9./]+','',user_removed) number_removed = re.sub('[^a-zA-Z]', ' ', link_removed) lower_case_tweet= number_removed.lower() tok = WordPunctTokenizer() words = tok.tokenize(lower_case_tweet) clean_tweet = (' '.join(words)).strip() return clean_tweet
4. Получить настроение Tweet
Чтобы иметь возможность получить настроение Tweet, мы будем использовать API Google натурального языка.
API предоставляет анализ настроения, анализ объектов и анализ синтаксиса. Мы будем использовать только анализ настроений для этого руководства.
В анализе настроений Google есть Оценка
и величина
Отказ Оценка
Является ли оценка чувств настроения от -1,0 (очень отрицательно) до 1,0 (очень положительного). Величина
это сила настроения и колеблется от 0 до бесконечности.
Ради простоты этого урока, мы только рассмотрим Оценка
Отказ Если вы думаете о том, чтобы сделать глубокий анализ NLP, вы должны рассмотреть величина
тоже.
Импортируйте библиотеку Google натуральной языки.
from google.cloud import language from google.cloud.language import enums from google.cloud.language import types
Сделать функцию под названием get_sentiment_score
который берет Tweet
как параметр, и возвращает настроения
счет.
def get_sentiment_score(tweet): client = language.LanguageServiceClient() document = types\ .Document(content=tweet, type=enums.Document.Type.PLAIN_TEXT) sentiment_score = client\ .analyze_sentiment(document=document)\ .document_sentiment\ .score return sentiment_score
5. Проанализировать твиты
Давайте сделаем функцию, которая будет петить список твитов, которые мы получаем от search_tweets
функция и получите оценку настроения каждого твита, используя get_sentiment_score
функция. Затем мы рассчитаем среднее значение. Средний балл определит, имеет ли данное ключевое слово положительное, нейтральное или отрицательное настроение.
Определить Оценка
равна 0
Затем используйте search_tweets
Функция, чтобы получить твиты, связанные с ключевым словом, которое мы определяем.
score = 0 tweets = search_tweets(keyword, total_tweets)
Петля через список твитов и сделать очистку, используя Clean_tweets
Функция, которую мы создали раньше.
for tweet in tweets: cleaned_tweet = clean_tweets(tweet.text.encode('utf-8'))
Получите оценку настроения, используя get_sentiment_score
Функция и увеличивать Оценка
Добавляя sentiment_score
Отказ
for tweet in tweets: cleaned_tweet = clean_tweets(tweet.text.encode('utf-8')) sentiment_score = get_sentiment_score(cleaned_tweet) score += sentiment_score
Давайте распечатаем каждый твит и его настроение, чтобы мы могли видеть детали прогресса в терминале.
for tweet in tweets: cleaned_tweet = clean_tweets(tweet.text.encode('utf-8')) sentiment_score = get_sentiment_score(cleaned_tweet) score += sentiment_score print('Tweet: {}'.format(cleaned_tweet)) print('Score: {}\n'.format(sentiment_score))
Рассчитайте средний балл и передайте его на Final_score
Переменная. Оберните все коды в Analyze_tweets
Функция, с ключевое слово
. и total_tweets
как параметры.
def analyze_tweets(keyword, total_tweets): score = 0 tweets = search_tweets(keyword, total_tweets) for tweet in tweets: cleaned_tweet = clean_tweets(tweet.text.encode('utf-8')) sentiment_score = get_sentiment_score(cleaned_tweet) score += sentiment_score print('Tweet: {}'.format(cleaned_tweet)) print('Score: {}\n'.format(sentiment_score)) final_score = round((score / float(total_tweets)),2) return final_score
6. Отправить оценку настроения Tweet
Давайте сделаем последнюю функцию в рабочем процессе. Эта функция получит ключевое слово пользователя и рассчитать среднюю оценку настроения. Тогда мы отправим его через телеграмму бота.
Получите ключевое слово от пользователя.
keyword = update.message.text
Использовать Analyze_tweets
Функция, чтобы получить окончательный счет, ключевое слово
. Как наш параметр, и установите total_tweets
Так как мы хотим собрать 50 твитов.
final_score = analyze_tweets(keyword, 50)
Определим, считается ли данный балл отрицательным, нейтральным или положительным с использованием диапазона баллов Google, так как мы видим на рисунке ниже.
if final_score <= -0.25: status = 'NEGATIVE ❌' elif final_score <= 0.25: status = 'NEUTRAL ?' else: status = 'POSITIVE ✅'
Наконец, отправьте Final_score
и Статус
через телеграмму бота.
bot.send_message(chat_id=update.message.chat_id, text='Average score for ' + str(keyword) + ' is ' + str(final_score) + ' ' + status)
Оберните коды в функцию, называемую send_the_result
Отказ
def send_the_result(bot, update): keyword = update.message.text final_score = analyze_tweets(keyword, 50) if final_score <= -0.25: status = 'NEGATIVE ❌' elif final_score <= 0.25: status = 'NEUTRAL ?' else: status = 'POSITIVE ✅' bot.send_message(chat_id=update.message.chat_id, text='Average score for ' + str(keyword) + ' is ' + str(final_score) + ' ' + status)
7. Основная программа
Наконец, создайте другую функцию под названием Главная
Чтобы запустить нашу программу. Не забудьте изменить Your_token
к токену вашего бота.
from telegram.ext import Updater, MessageHandler, Filters def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(MessageHandler(Filters.text, send_the_result)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
В конце концов, ваш код должен выглядеть так
import tweepy import re from telegram.ext import Updater, MessageHandler, Filters from google.cloud import language from google.cloud.language import enums from google.cloud.language import types from datetime import datetime, timedelta from nltk.tokenize import WordPunctTokenizer ACC_TOKEN = 'YOUR_ACCESS_TOKEN' ACC_SECRET = 'YOUR_ACCESS_TOKEN_SECRET' CONS_KEY = 'YOUR_CONSUMER_API_KEY' CONS_SECRET = 'YOUR_CONSUMER_API_SECRET_KEY' def authentication(cons_key, cons_secret, acc_token, acc_secret): auth = tweepy.OAuthHandler(cons_key, cons_secret) auth.set_access_token(acc_token, acc_secret) api = tweepy.API(auth) return api def search_tweets(keyword, total_tweets): today_datetime = datetime.today().now() yesterday_datetime = today_datetime - timedelta(days=1) today_date = today_datetime.strftime('%Y-%m-%d') yesterday_date = yesterday_datetime.strftime('%Y-%m-%d') api = authentication(CONS_KEY,CONS_SECRET,ACC_TOKEN,ACC_SECRET) search_result = tweepy.Cursor(api.search, q=keyword, since=yesterday_date, result_type='recent', lang='en').items(total_tweets) return search_result def clean_tweets(tweet): user_removed = re.sub(r'@[A-Za-z0-9]+','',tweet.decode('utf-8')) link_removed = re.sub('https?://[A-Za-z0-9./]+','',user_removed) number_removed = re.sub('[^a-zA-Z]', ' ', link_removed) lower_case_tweet= number_removed.lower() tok = WordPunctTokenizer() words = tok.tokenize(lower_case_tweet) clean_tweet = (' '.join(words)).strip() return clean_tweet def get_sentiment_score(tweet): client = language.LanguageServiceClient() document = types\ .Document(content=tweet, type=enums.Document.Type.PLAIN_TEXT) sentiment_score = client\ .analyze_sentiment(document=document)\ .document_sentiment\ .score return sentiment_score def analyze_tweets(keyword, total_tweets): score = 0 tweets = search_tweets(keyword,total_tweets) for tweet in tweets: cleaned_tweet = clean_tweets(tweet.text.encode('utf-8')) sentiment_score = get_sentiment_score(cleaned_tweet) score += sentiment_score print('Tweet: {}'.format(cleaned_tweet)) print('Score: {}\n'.format(sentiment_score)) final_score = round((score / float(total_tweets)),2) return final_score def send_the_result(bot, update): keyword = update.message.text final_score = analyze_tweets(keyword, 50) if final_score <= -0.25: status = 'NEGATIVE ❌' elif final_score <= 0.25: status = 'NEUTRAL ?' else: status = 'POSITIVE ✅' bot.send_message(chat_id=update.message.chat_id, text='Average score for ' + str(keyword) + ' is ' + str(final_score) + ' ' + status) def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(MessageHandler(Filters.text, send_the_result)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
Сохраните файл и назовите его main.py
Затем запустите программу.
python3 main.py
Перейдите в свою телеграмму BOT, доступая к этому URL: https://telegram.me/your_bot_username Отказ Введите любой продукт, имя человека или все, что вы хотите, и отправьте его на свой бот. Если все работает, должна быть подробная оценка настроения для каждого твита в терминале. Бот ответит со средним оценкой настроения.
Изображения ниже приведены пример, если я вводит Валентино Росси
и отправьте его до бота.
Если вам удалось следить за шагами до конца этого учебника, это потрясающе! У вас сейчас есть ваш анализатор чувств, насколько круто это!?
Вы также можете проверить мой Github получить код. Пожалуйста, не стесняйтесь подключаться и оставить сообщение в моем LinkedIn Профиль, если вы хотите спросить о чем угодно.
Пожалуйста, оставьте комментарий, если вы думаете, что в моем коде есть какие-либо ошибки.
Спасибо, удачи!:)