Рубрики
Без рубрики

Анализ настроений с Python

Узнайте, как сделать базовый анализ настроений с Python, используя подход на основе Wordlist.

Автор оригинала: 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 из результатов и отображали их на графике. Я надеюсь, что вы нашли статью интересной и полезной.

Счастливые вычисления!