Автор оригинала: Robin Andrews.
В этой статье мы собираемся узнать, как сделать некоторые основные настроения с Python, используя подход на основе Wordlist и Афинн упаковка.
Во-первых, вам нужно будет установить пакет:
PIP Установите Afinn
или же
PIP3 Установите Afinn на Mac/linux
Вам также нужно будет установить следующие пакеты таким же образом, если вы еще не сделали: Google , Запросы , Beautifulsoup , Пандас , Матплотлиб , морской Отказ
Основная идея с Афинн Упаковка заключается в том, что у нас есть Wordlist, который имеет оценку с точки зрения позитивности или негатива, назначенного каждому слову, начиная от -5 (очень негатив) до +5 (Очень позитив).
Например:
amazes 2 amazing 4 ambitious 2 ambivalent -1 amicable 2 amuse 3 amused 3 amusement 3 amusements 3 anger -3
Эти оценки используются в качестве основы для оценки текстовой строки.
Процесс, который мы будем следовать в этом уроке:
- Используйте Python, чтобы программно выполнить поиск Google для заданной фразы
- Извлечь названия из URL-адресов, предоставляемых предыдущим шагом
- Выполнить анализ настроений на названиях
- Собирайте результаты в PandaS DataFrame
- Показать результаты на графике
Вероятно, лучше всего использовать Jupyter ноутбук Для кода в этом уроке, чтобы избежать необходимости запускать трудоемкие операции каждый раз, когда вы делаете изменения, поскольку результаты хранятся в переменных, которые могут быть использованы повторно на протяжении всей ноутбуке. Для получения дополнительной информации о ноутбуках Jupyter см. здесь Отказ
Использование Python, чтобы программно выполнить поиск Google для заданной фразы
Первый шаг – получить URL из поиска Google и хранить их в списке. Очевидно, что если у вас уже есть веб-страница или какой-то текст, который вы хотите проанализировать, вы можете пропустить этот шаг.
from googlesearch import search
query = "bunny rabbit" # Try your own search terms
num_results = 30
result_urls = []
for result in search(
query, # The query you want to run
tld="com", # The top level domain
lang="en", # The language
num=10, # Number of results per page
start=0, # First result to retrieve
stop=num_results, # Last result to retrieve
pause=2.0, # Lapse between HTTP requests
):
result_urls.append(result)
result_urls
['https://www.youtube.com/watch?v=hDJkFLnmFHU',
'https://www.youtube.com/watch?v=dpvUQagTRHM',
'https://www.rspca.org.uk/adviceandwelfare/pets/rabbits',
'https://en.wikipedia.org/wiki/Rabbit',
'https://en.wikipedia.org/wiki/Rabbit#Terminology',
'https://en.wikipedia.org/wiki/Rabbit#Taxonomy',
'https://en.wikipedia.org/wiki/Rabbit#Biology',
'https://en.wikipedia.org/wiki/Rabbit#Ecology',
'https://www.petakids.com/save-animals/never-buy-bunnies/',
...
Скаивание заголовков с Python для анализа настроений
Далее мы будем использовать Запросы и Beautifulsoup Чтобы соскрести URL-адреса, извлеченные на последнем шаге, и сохраните результаты в новом списке. На данный момент мы просто сосредоточимся на первом H1 Тег на каждой странице посетил, так как это хорошее место для начала, если мы ищем заголовки.
import requests
from bs4 import BeautifulSoup
title_list = []
for url in result_urls:
try:
r = requests.get(url, timeout=3)
soup = BeautifulSoup(r.content, "html.parser")
html_element = soup.find("h1")
article_title = html_element.text.strip()
title_list.append(article_title)
except Exception as e:
pass # ignore any pages where there is a problem
title_list
'9 Reasons Why You Shouldn't Buy a Bunny',
'My House Rabbit',
'What's The Difference Between A Bunny, A Rabbit, And A Hare?',
'Rabbit',
'406 Not Acceptable',
'Rabbit Behavior',
'14 Fascinating Facts About Rabbits',
'Bunny Rabbit',
...
Выполнение анализа настроений с использованием Afinn
Теперь мы движемся к использованию Афинн Пакет для выполнения фактического анализа настроения. Как только у нас есть результаты, хранящиеся в списках, мы создаем Пандас dataframe для каждого дисплея и анализа результатов.
from afinn import Afinn
import pandas as pd
af = Afinn()
# Compute sentiment scores and categories
sentiment_scores = [af.score(article) for article in title_list]
sentiment_category = ['positive' if score > 0 else 'negative' if score < 0 else 'neutral' for score in sentiment_scores]
# Create Pandas dataframe from results and display
df = pd.DataFrame([title_list, sentiment_scores, sentiment_category]).T # .T: swap rows and cols
df.columns = ['headline', 'sentiment_score', 'sentiment_category']
df['sentiment_score'] = df.sentiment_score.astype('float')
df.describe()
Это дает нам некоторые описательные статистические данные для DataFrame. Обратите внимание, что есть общий средний балл 0.233 .. , что означает небольшое положительное настроение, если наши результаты были статистически значимыми (что они, вероятно, не видны, посмотрите дальше на почему).
| считать | 30.000000 |
| иметь в виду | 0.233333 |
| std. | 1.194335 |
| мин | -2.000000 |
| 25% | 0.000000 |
| 50% | 0.000000 |
| 75% | 0.000000 |
| Максимум | 4.000000 |
Вот сам DataFrame:
| Прежде чем продолжить на YouTube | 0 | 0.0 | нейтральный |
| Прежде чем продолжить на YouTube | 1 | 0.0 | нейтральный |
| Навигация | 2 | 0.0 | нейтральный |
| Кролик | 3 | 0.0 | нейтральный |
| Кролик | 4 | 0.0 | нейтральный |
| Кролик | 5 | 0.0 | нейтральный |
| Кролик | 6 | 0.0 | нейтральный |
| Кролик | 7 | 0.0 | нейтральный |
| 9 причин, почему вы не должны покупать кролик | 8 | 0.0 | нейтральный |
| Мой дом кролик | 9 | 0.0 | нейтральный |
| В чем разница между кроликом, раввием … | 10 | 0.0 | нейтральный |
| Кролик | 11 | 0.0 | нейтральный |
| 406 не приемлемо | 12 | 1.0 | положительный |
| Поведение кролика | 13 | 0.0 | нейтральный |
| 14 Увлекательные факты о кроликах | 14 | 3.0 | положительный |
| Кролик кролик | 15 | 0.0 | нейтральный |
| Ошибка \ N1020. | 16 | -2.0 | отрицательный |
| 17 | 0.0 | нейтральный | |
| 13 фактов кролика доказывают точку: зайчики Арена … | 18 | 0.0 | нейтральный |
| ПЭТ кролики и ваше здоровье | 19 | 0.0 | нейтральный |
| Мягкие игрушки кролика и кролика | 20 | 0.0 | нейтральный |
| Полное руководство к лучшим породам кролика | 21 | 3.0 | положительный |
| John Lewis & Partners Bunny кролик плюшевая мягкая игрушка | 22 | 0.0 | нейтральный |
| Банни против кролика – Узнайте, в чем разница! | 23 | 0.0 | нейтральный |
| Bunny Surched: Record-Holding гигантский кролик ST … | 24 | -2.0 | отрицательный |
| 10 прыгающих веселых фактов кролика! | 25 | 4.0 | положительный |
| Кролик вязальный набор и узор | 26 | 0.0 | нейтральный |
| Банни, кролик и зайцы, о мой! Что такое отличается … | 27 | 0.0 | нейтральный |
| Kitkat Bunny открывает двери к своей совершенно новой … | 28 | 0.0 | нейтральный |
| PetFinder в настоящее время претерпевает обновления H … | 29 | 0.0 | нейтральный |
Как видите, много того, что мы собрали, это «шум». Однако есть некоторые полезные данные для работы. Одно улучшение может быть удаление самого поиска самого «заголовки», используя Pandas заменить метод.
Предполагается, что результаты анализа настроений с использованием Meeborn
Теперь давайте построим результаты. Построение с морским ветру. Есть много типов сюжета, но здесь мы будем использовать CountPlot Как оно соответствует нашим потребностям хорошо.
import seaborn as sns
import matplotlib.pyplot as plt
plt.style.use("seaborn")
fig, axes = plt.subplots()
bp = sns.countplot(x="sentiment_score", data=df, palette="Set2").set_title(
f"Sentiment Analysis with Python. Search Term: {query}"
)
plt.show()
Интерпретировать результаты
Хотя результаты этой деятельности потенциально довольно интересны, мы не должны быть слишком серьезными в отношении каких-либо выводов, которые мы рисуем из них. Вообще говоря, содержание H1 Тег недостаточно, чтобы сделать значимые выводы о настроении поста. Основной точкой статьи было начать работу с анализа настроений с Python и предоставить вам несколько инструментов, которые вы можете использовать в своих собственных исследованиях. Для более проницательных результатов, возможно, сосредоточиться на одной веб-странице или документе. Вам решать, забираете ли вы ваши данные вручную или используете что-то подобное то, что мы сделали выше с Beautifulsoup соскрести его с веб-страницы. Используйте идеи здесь как трамплин, и веселиться.
В этой статье мы узнали, как выполнять базовый анализ настроений с Python. Мы использовали Python, чтобы выполнить поиск Google, а затем соскребал результаты для заголовков. Затем мы проанализировали заголовки для оценки настроений и создали DataFrame из результатов и отображали их на графике. Я надеюсь, что вы нашли статью интересной и полезной.
Счастливые вычисления!