TextBlob - цикл по статьям для расчета полярности и субъективности
Я искал TextBlob для вычисления оценок настроения (полярность, субъективность) для списка статей на листе Excel, который я скомпилировал.
Ниже приведен пример листа:
03.11.2004 04:03 По меньшей мере 60 человек погибли в результате трех взрывов бомб на переполненных мадридских поездах во время самого ужасного террористического акта в Испании, сообщают Efe Newswire и другие СМИ. Красный Крест заявил, что по меньшей мере 200 человек получили ранения. "Это бойня", - сказал лидер Социалистической партии Хосе Луис Родригес Сапатеро, который обвинил баскскую террористическую группу ETA.
07.07.2005 04:41 Лондон закрыл свою систему метро и эвакуировал все станции после того, как аварийные службы были вызваны для взрывов в и вокруг финансового района.
12.01.2009 04:00 American International Group, Inc. (AIG) сегодня объявила о закрытии двух ранее объявленных сделок с Федеральным резервным банком Нью-Йорка (FRBNY), которые сократили долг AIG перед FRBNY на 25 миллиардов долларов. в обмен на приобретение FRBNY привилегированных долей участия в некоторых новых дочерних компаниях.
22/08/2013 11:38 NASDAQ отключается на 3 часа из-за проблем с компьютером
Я был в состоянии использовать textblob самым простым способом, выполняя каждую строку отдельно, как показано ниже:
analysis = TextBlob("NASDAQ shuts down for 3 hours due to a computer problem")
print(analysis.sentiment)
Что бы я хотел импортировать мой файл Excel, содержащий дату и время, а также статьи в двух столбцах и перейти к циклу по каждой строке, чтобы вычислить оценки полярности и субъективности, и сохранить его в файле.
Я попытался изменить код в Thomson Reuters News Analytics таким образом:
import pandas as pd
import numpy as np
from textblob import TextBlob
path_to_file = "C:/Users/Parvesh/Desktop/New Project/Sentiment Analysis/events.csv"
df = pd.read_csv(path_to_file, encoding='latin-1')
df.head()
df['Polarity'] = np.nan
df['Subjectivity'] = np.nan
pd.options.mode.chained_assignment = None
for idx, articles in enumerate(df['articles'].values): # for each row in our df dataframe
sentA = TextBlob("articles") # pass the text only article to TextBlob to analyze
df['Polarity'].iloc[idx] = sentA.sentiment.polarity # write sentiment polarity back to df
df['Subjectivity'].iloc[idx] = sentA.sentiment.subjectivity # write sentiment subjectivity score back to df
df.head()
df.to_csv("out.csv", index=False)
Код не работает, хотя... Я не получаю никаких баллов.
Любой совет, как я могу это сделать?
Я новичок в Python (я использую Pycharm). Я пишу в основном на Stata и Matlab.
Пожалуйста помоги!
0 ответов
Спасибо, что обратились.
Я на самом деле получил код работает некоторое время назад.
Вот как это выглядит:
import pandas as pd
import numpy as np
from textblob import TextBlob
path_to_file = "C:/Users/Parvesh/Desktop/New Project/Sentiment Analysis/events.csv"
df = pd.read_csv(path_to_file, encoding='latin-1')
df.head()
df['Polarity'] = np.nan
df['Subjectivity'] = np.nan
pd.options.mode.chained_assignment = None
for idx, articles in enumerate(df['articles'].values): # for each row in our df dataFrame
***if articles:***
sentA = TextBlob(articles) # pass the text only article to TextBlob to analyse
df['Polarity'].iloc[idx] = sentA.sentiment.polarity # write sentiment polarity back to df
df['Subjectivity'].iloc[idx] = sentA.sentiment.subjectivity # write sentiment subjectivity score back to df
df.head()
df.to_csv("Sentiment_Scores.csv", index=False)
Таким образом, я в основном пропускал бит статей if, который в конечном итоге просматривал бы каждую статью для получения результатов.
Я очень ценю, что вы обратились к моему запросу.
Большое спасибо!
С уважением Парвеш
Вы должны переместить логику в функцию, а затем применить эту функцию к каждой строке DataFrame, используя pd.Series.map()
, С помощью .map()
или же .apply()
это намного быстрее и чище, чем циклический просмотр вручную.
import pandas as pd
from textblob import TextBlob
path_to_file = "C:/Users/Parvesh/Desktop/New Project/Sentiment Analysis/events.csv"
df = pd.read_csv(path_to_file, encoding='latin-1')
df.head()
# function to extract polarity and subjectivity from text
def process_text(text):
blob = TextBlob(text)
return blob.sentiemnt.polarity, blob.sentiment.subjectivity
# apply to each row of the 'articles' Series using the pd.Series.map method
df["polarity"], df["sentiment"] = zip(*df.articles.map(process_text))
df.head()
df.to_csv("out.csv", index=False)
Отказ от ответственности: я не проверял это.