来自 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

所以它似乎识别了数据框 df03text 列下的文本简介列表,但显然我未能建立正确的数据类型设置。

但是,我不确定应该在哪里设置类型,因为文档中唯一的文档类型设置似乎是 HTML、PLAIN_TEXT 或 TYPE_UNSPECIFIED.其中,我很确定 PLAIN_TEXT 是正确的。

文档: https://googleapis.dev/python/language/latest/language_v1/types.html#google.cloud.language_v1.types.Document

所以这让我不清楚该错误消息的含义或我应该如何进行故障排除。

非常感谢对此的任何意见。

道格

看起来 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)