Первый шаг — получить 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.