У меня есть дата-кадр предложений, который выглядит следующим образом:
text
0 this is great!
1 how dare you?!
Я могу успешно использовать TextBlob.words
(https://textblob.readthedocs.io/en/dev/quickstart.html#tokenization), чтобы разбить каждое предложение на отдельные слова.
Примером будет
a = TextBlob('moon is big')
print(a)
WordList(['moon','is','big'])
WordList
создает тип списка blob.Wordlist
, который сохраняет каждое слово.
Я могу разбить предложения в кадре данных на отдельные слова и сохранить их в переменной, используя этот код:
for i in df.text:
d = TextBlob(i)
words_list=d.words
Чтобы понять настроение каждого слова, мне нужно повторно применить TextBlob к каждому слову. Я могу сделать это с помощью приведенного ниже кода и добавить оценку полярности в список.
lst=[]
for i in text.text:
d = TextBlob(i)
words_list=d.words
for i in words_list:
f = TextBlob(i)
print(f.sentiment)
lst.append(f.sentiment.polarity)
На данный момент я не знаю, какая оценка полярности принадлежит какому предложению, потому что моя цель состоит в том, чтобы я хотел усреднить оценку полярности каждого слова в каждой строке кадра данных и создать новый столбец score
. Можно ли в любом случае передать индекс для blob.Wordlist
, чтобы я мог сопоставить среднее значение с фреймом данных?
код до сих пор:
from textblob import TextBlob
import pandas as pd
import statistics as s
df = pd.DataFrame({'text':['this is great!','how dare you?!']})
lst=[]
for i in text.text:
d = TextBlob(i)
words_list=d.words
for i in words_list:
f = TextBlob(i)
print(f.sentiment)
lst.append(f.sentiment.polarity)
for i in lst:
z = s.mean(lst)
df['score'] = z
Новый df должен выглядеть так:
text score
0 this is great! 0.2
1 how dare you?! 0.3
НЕ
text score
0 this is great! 0.133333
1 how dare you?! 0.133333
Заранее спасибо.
редактирование:
@ Кевин, вот ваш код с правильными именами df
from textblob import TextBlob
import pandas as pd
import statistics as s
df = pd.DataFrame({'text':['this is great!','how dare you?!']})
df['score'] = 0
for j in range(len(df.text)):
lst=[]
i = df.text[j]
d = TextBlob(i)
words_list=d.words
for i in words_list:
f = TextBlob(i)
print(f.sentiment)
lst.append(f.sentiment.polarity)
z = s.mean(lst)
df['score'][j] = z