来自 Google NL API 运行 情绪分析的 TypeError 消息不清楚
Unclear on TypeError message from Google NL API running sentiment analysis
目标
对 pandas 数据框中的一列文本进行 运行 情感分析,使其 return 每行文本的得分和幅度值。
当前代码
这就是我 运行 正在做的,拉入一个数据框 (df03
),其中包含我要分析的一列文本 (text02
)。
# Imports the Google Cloud client library
from google.cloud import language_v1
# Instantiates a client
client = language_v1.LanguageServiceClient()
# The text to analyze
text = df03.loc[:,"text02"]
document = language_v1.Document(
content=text, type_=language_v1.types.Document.Type.PLAIN_TEXT
)
# Detects the sentiment of the text
sentiment = client.analyze_sentiment(
request={"document": document}
).document_sentiment
print("Text: {}".format(text))
print("Sentiment: {}, {}".format(sentiment.score, sentiment.magnitude))
这是return编辑的错误信息
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-1c6f7c607084> in <module>()
8 text = df03.loc[:,"text02"]
9 document = language_v1.Document(
---> 10 content=text, type_=language_v1.types.Document.Type.PLAIN_TEXT
11 )
12
/usr/local/lib/python3.7/dist-packages/proto/message.py in __init__(self, mapping, ignore_unknown_fields, **kwargs)
562
563 # Create the internal protocol buffer.
--> 564 super().__setattr__("_pb", self._meta.pb(**params))
565
566 def _get_pb_type_from_key(self, key):
TypeError: 01 Max Muncy is great!
02 The worst Dodger is Max muncy.
03 has type Series, but expected one of: bytes, unicode
评估
错误信息指向行:
content=text, type_=language_v1.types.Document.Type.PLAIN_TEXT
TypeError
消息试图解释正在发生的事情:
has type Series, but expected one of: bytes, unicode
所以它似乎识别了数据框 df03
中 text
列下的文本简介列表,但显然我未能建立正确的数据类型设置。
但是,我不确定应该在哪里设置类型,因为文档中唯一的文档类型设置似乎是 HTML、PLAIN_TEXT 或 TYPE_UNSPECIFIED.其中,我很确定 PLAIN_TEXT
是正确的。
所以这让我不清楚该错误消息的含义或我应该如何进行故障排除。
非常感谢对此的任何意见。
道格
看起来 Google 的 API 无法直接处理 pandas 系列,但希望您一次传递一个字符串。尝试 apply
将自定义函数添加到包含您的文本的 DataFrame 列:
def get_sentiment(text):
# The text to analyze
document = language_v1.Document(
content=text,
type_=language_v1.types.Document.Type.PLAIN_TEXT
)
# Detects the sentiment of the text
sentiment = client.analyze_sentiment(
request={"document": document}
).document_sentiment
return sentiment
df03["sentiment"] = df03["text02"].apply(get_sentiment)
目标
对 pandas 数据框中的一列文本进行 运行 情感分析,使其 return 每行文本的得分和幅度值。
当前代码
这就是我 运行 正在做的,拉入一个数据框 (df03
),其中包含我要分析的一列文本 (text02
)。
# Imports the Google Cloud client library
from google.cloud import language_v1
# Instantiates a client
client = language_v1.LanguageServiceClient()
# The text to analyze
text = df03.loc[:,"text02"]
document = language_v1.Document(
content=text, type_=language_v1.types.Document.Type.PLAIN_TEXT
)
# Detects the sentiment of the text
sentiment = client.analyze_sentiment(
request={"document": document}
).document_sentiment
print("Text: {}".format(text))
print("Sentiment: {}, {}".format(sentiment.score, sentiment.magnitude))
这是return编辑的错误信息
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-1c6f7c607084> in <module>()
8 text = df03.loc[:,"text02"]
9 document = language_v1.Document(
---> 10 content=text, type_=language_v1.types.Document.Type.PLAIN_TEXT
11 )
12
/usr/local/lib/python3.7/dist-packages/proto/message.py in __init__(self, mapping, ignore_unknown_fields, **kwargs)
562
563 # Create the internal protocol buffer.
--> 564 super().__setattr__("_pb", self._meta.pb(**params))
565
566 def _get_pb_type_from_key(self, key):
TypeError: 01 Max Muncy is great!
02 The worst Dodger is Max muncy.
03 has type Series, but expected one of: bytes, unicode
评估
错误信息指向行:
content=text, type_=language_v1.types.Document.Type.PLAIN_TEXT
TypeError
消息试图解释正在发生的事情:
has type Series, but expected one of: bytes, unicode
所以它似乎识别了数据框 df03
中 text
列下的文本简介列表,但显然我未能建立正确的数据类型设置。
但是,我不确定应该在哪里设置类型,因为文档中唯一的文档类型设置似乎是 HTML、PLAIN_TEXT 或 TYPE_UNSPECIFIED.其中,我很确定 PLAIN_TEXT
是正确的。
所以这让我不清楚该错误消息的含义或我应该如何进行故障排除。
非常感谢对此的任何意见。
道格
看起来 Google 的 API 无法直接处理 pandas 系列,但希望您一次传递一个字符串。尝试 apply
将自定义函数添加到包含您的文本的 DataFrame 列:
def get_sentiment(text):
# The text to analyze
document = language_v1.Document(
content=text,
type_=language_v1.types.Document.Type.PLAIN_TEXT
)
# Detects the sentiment of the text
sentiment = client.analyze_sentiment(
request={"document": document}
).document_sentiment
return sentiment
df03["sentiment"] = df03["text02"].apply(get_sentiment)