TextBlob - цикл по статьям для расчета полярности и субъективности - PullRequest
0 голосов
/ 28 февраля 2019

Я искал TextBlob для вычисления оценок настроения (полярность, субъективность) для списка статей на листе Excel, который я скомпилировал.

Ниже приведен пример листа:

11/03/2004 04:03 По меньшей мере 60 человек погибли в результате трех взрывов бомб на переполненных мадридских поездах во время самого ужасного террористического акта в Испании, сообщают Efe Newswire и другие СМИ.Красный Крест заявил, что по меньшей мере 200 человек получили ранения.«Это бойня», - заявил лидер Социалистической партии Хосе Луис Родригес Сапатеро, который обвинил баскскую террористическую группу ETA.

07/07/2005 04:41 Лондон закрыл свою систему метро и эвакуировал все станции после чрезвычайной ситуациислужбы были призваны к взрывам в финансовом районе и вокруг него.

01.12.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)

What I 'Я хотел бы импортировать мой файл 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.

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

Спасибо, что обратились.

Я действительно заставил код работать некоторое время назад.

Вот как это выглядит:

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 article , который в конечном итоге будет проходить по каждой статье для получения баллов.

Я очень ценю, что вы обратились к моему запросу.

Большое спасибо!

С уважением, Парвеш

0 голосов
/ 20 марта 2019

Вы должны переместить логику в функцию, затем применить эту функцию к каждой строке 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)

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

...