我可以成功地将一个句子拆分为单独的单词,并使用此代码取每个单词的极性分数的每个平均值。效果很好。
import statistics as s
from textblob import TextBlob
a = TextBlob("""Thanks, I'll have a read!""")
print(a)
c=[]
for i in a.words:
c.append(a.sentiment.polarity)
d = s.mean(c)
d = 0.25
a.words = WordList(['Thanks', 'I', "'ll", 'have', 'a', 'read'])
如何将上面的代码传输到如下所示的 df?
东风
text
1 Thanks, I’ll have a read!
但是取每个单词每个极性的平均值?
壁橱是我可以对 df 中每个句子的每个句子应用极性:
def sentiment_calc(text):
try:
return TextBlob(text).sentiment.polarity
except:
return None
df_sentences['sentiment'] = df_sentences['text'].apply(sentiment_calc)
我的印象是情绪极性仅适用于 TextBlob 类型。
所以我的想法是将文本blob拆分为单词(使用split函数 - 请参阅此处的文档(并将它们转换为TextBlob对象。 这是在列表理解中完成的:
[TextBlob(x).sentiment.polarity for x in a.split()]
所以整个事情看起来像这样:
import statistics as s
from textblob import TextBlob
import pandas as pd
a = TextBlob("""Thanks, I'll have a read!""")
def compute_mean(a):
return s.mean([TextBlob(x).sentiment.polarity for x in a.split()])
print(compute_mean("Thanks, I'll have a read!"))
df = pd.DataFrame({'text':["Thanks, I'll have a read!",
"Second sentence",
"a bag of apples"]})
df['score'] = df['text'].map(compute_mean)
print(df)