【发布时间】:2018-09-23 05:03:57
【问题描述】:
我目前正在尝试构建this link. 中提到的朴素贝叶斯分类器 参考线
X_new_tfidf = tfidf_transformer.transform(X_new_counts)
在Training the Classifier 子标题下,我的代码中有一条类似的行X_new_counts = count_vect.transform(input.plot_movie),它应该将可迭代作为转换函数的输入。 input 是来自 DataFrame 的记录,类型为 pd.Series,包含以下条目,我将其中的 input.plot_movie 作为输入发送到转换函数:
但是,我收到以下错误:Iterable over raw text documents expected, string object received
如何解决此错误?我还提到了this 答案,该人说s 是可迭代的,因为它被分配了一个字符串。我还遇到了this link,其中遇到了TypeError: 'String' object is not iterable。我在这里错过了什么吗?这些链接似乎相互矛盾。
编辑:
我刚刚意识到 input.plot_movie 是 unicode 类型,并决定将其转换为字符串。我又遇到了同样的错误。
【问题讨论】:
-
您真的阅读过这些链接吗?该博客文章中定义的自定义
class String与str不同。这完全是关于如何修改class String使其是 可迭代的,就像str已经是一样的方式。 (unicode也是如此。) -
但无论如何,字符串(
str或unicode)是可迭代的字符,而不是可迭代的“原始文本文档”,无论它们是什么。如果没有真正看到你的代码,很难猜出你做错了什么,但我的第一个猜测是这样的:该函数想要一个文件或字符串列表或某个函数从该库返回的某种对象,并且您有一个充满文件的目录,您可以从中读取这些对象,但不是将这些文件读入列表,您只需传递目录名称。 -
我没有在任何地方传递目录名称。我试图传递一个字符串/文本作为输入来进行预测,就像在第一个链接中一样,他们传递了一个字符串数组来预测。
-
我说这只是一个疯狂的猜测,因为您没有向我们展示您的代码或解释您传递的内容。如果您不希望我们胡乱猜测,请阅读帮助中的minimal reproducible example 并使其成为可回答的问题。
-
但同时:是什么让您认为可以将单个字符串传递给需要字符串数组的函数?这通常不起作用——当它起作用时,它通常将您的字符串视为单个字符的列表,这不是很有用。无论您在没有向我们展示的代码中传递字符串,为什么不按照您所遵循的任何示例传递一个包含字符串的单元素数组?