Для работы использую Google Colaboratory.
Шаг 1. Получение API ID и Hash.
До начала работы с API Telegram необходимо получить собственный API ID и Hash. Это можно сделать пройдя по ссылке https://my.telegram.org/auth?to=apps, указав номер телефона привязанный к профилю, и заполнив App title и Short name. Platform - можно выбрать “Other (specify in description)”. Остальные параметры можно оставить пустыми.
После того как все шаги выполнены вы получите собственные API ID и Hash.
Важно: В Telegram в настройках конфиденциальности должна быть отключена двухэтапная аутентификация.
Шаг 2. Вход в аккаунт Telegram.
Теперь переходим в Google Colab и первым делом устанавливаем библиотеку telethon:
pip install telethon
Для начала работы нам понадобятся две библиотеки: pandas и TelegramClient:
import pandas as pd
from telethon.sync import TelegramClient
После того, как библиотеки установлены подключаемся к Telegram с помощью полученных ранее API ID и Hash:
api_id = Ваш API ID
api_hash = 'Ваш Hash'
phone = 'ваш номер телефона, привязанный к профилю'
client = TelegramClient(phone, api_id, api_hash)
await client.start()
print(await client.get_me())
Если данные введены корректно, Google Colab запросит ваш телефон. Вводить телефон надо с 8 (не с +7).
После ввода телефона Telegram пришлет код подтверждения. Этот код используется для входа в ваш аккаунт в Telegram. Введите полученный код в ячейку с запросом.
Если все верно, Telegram пришлет сообщение, что вход выполнен.
Шаг 3. Парсим группу.
Создадим переменную адресом чата (начинается с https://t.me/….), сообщения из которого хотим спарсить (адрес можно посмотреть в Group info )
chat = 'адрес чата'
Если есть необходимость, можно посмотреть участников группы. Для этого создадим пустой список, в который спарсим данные участников группы и затем создадим датафрейм, для более удобного анализа:
data_item = []
part_item = await client.get_participants(chat)
for item in part_item:
data_item.append([item.first_name, item.last_name, item.id])
df = pd.DataFrame(data_item, columns=['first_name', 'last_name', 'id'])
df
Однако нас интересуют сообщения участников группы. Шаги выполнения те же, что при парсинге участников группы, за единственным исключением - необходимо установить количество сообщений, которые хотим загрузить. Например, limit=100 позволяет выгрузить последние 100 сообщений. Если есть необходимость выгрузить все сообщения, limit=100 можно просто убрать.
data_message = []
part_mes= await client.get_messages(chat, limit=100)
for message in part_mes:
data_message.append([message.sender_id, message.text])
df_message = pd.DataFrame(data_message, columns=['user_id', 'text'])
df_message
При желании полученный датафрейм можно сохранить в формате csv:
df_message.to_csv('message.csv')
Чтобы, при желании, загружать уже готовые данные в любое удобное время:
df_op = pd.read_csv('message.csv', encoding="UTF-8")
Шаг 4. Определяем тональность сообщений.
Для начала необходимо установить transformers:
!pip install transformers
Импортируем библиотеку:
from transformers import pipeline
Создаем пайплайн для обработки естественного языка:
model=pipeline("sentiment-analysis",
"blanchefort/rubert-base-cased-sentiment")
Создаем копию датафрейма:
df_model = df_message.copy()
Используем пайплайн для определения тональности текста:
lst = []
for i in df_model["text"]:
lst.append(model(str(i))[0]["label"])
df_model["Sentinent"]=pd.DataFrame(lst)
df_model
Готово.
Теперь (к примеру) можно посмотреть отдельно негативные сообщения и какой id из оставил:
df_NEGATIVE = df_model[df_model["Sentinent"]=="NEGATIVE"]
df_NEGATIVE
или позитивные сообщения:
df_POSITIVE = df_model[df_model["Sentinent"]=="POSITIVE"]
df_POSITIVE
Спасибо за внимание.