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)

Отказ от ответственности: я не проверял это.

Другие вопросы по тегам