Первый шаг — получить 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
Output:
['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 для анализа настроений

Далее мы будем использовать requests и 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
Output:
'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

Теперь мы переходим к использованию пакета afinn для фактического анализа тональности. Когда у нас есть результаты, сохраненные в списках, мы создаем pandas кадр данных для каждого отображения и анализа результатов.

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()

Это дает нам некоторую описательную статистику для фрейма данных. Обратите внимание, что общий средний балл составляет 0.241.., что означает легкое положительное настроение, если наши результаты были статистически значимыми (а они, вероятно, таковыми не являются — см. ниже, почему).

Вот сам кадр данных:

Как видите, многое из того, что мы собрали, является «шумом». Однако есть некоторые полезные данные для работы. Одним из улучшений может быть удаление самого поискового запроса из «заголовков» с помощью метода pandas replace.

Построение результатов анализа тональности с использованием Seaborn

Теперь давайте нанесем результаты. Сюжет с Seaborn очень прост. Доступно много типов сюжетов, но здесь мы будем использовать 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, а затем извлекли из результатов заголовки. Затем мы проанализировали заголовки для оценки настроений и создали фрейм данных из результатов и отобразили их на графике. Надеюсь, статья была вам интересна и полезна.

Удачных вычислений!

Первоначально опубликовано на https://compucademy.net.