我有一个如下所示的句子数据框:
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
先谢谢您。
编辑:
@kevin这是带有正确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
答案 0 :(得分:1)
这里是一个简单的选择,只需使用内置的熊猫即可解决此问题。首先删除特殊字符。然后,将每个单词转换为一列。接下来,对每个单词应用TextBlob
并从Blob中提取极性。最后取每一行的平均值
df['Socre'] = df.text.str.replace(r"[^\w\s]+","").str.split(" ",expand=True)\
.applymap(lambda x: TextBlob(x).sentiment.polarity).mean(1)
编辑-上述解决方案仅适用于等长句子,一般情况下都可使用
import numpy as np
df['Score'] = df.text.apply(lambda x: np.mean(
[TextBlob(r[0]).sentiment.polarity for r in TextBlob(x).ngrams(1)]))
答案 1 :(得分:0)
听起来像您可能想要更多类似的东西吗?
对于每个句子,您需要获取单词情感的平均值,然后将该值放入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(text.text)):
lst=[]
i = text.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