【问题标题】:Iterable over raw text documents expected, string object received可迭代原始文本文档,接收字符串对象
【发布时间】: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 Stringstr 不同。这完全是关于如何修改class String 使其 可迭代的,就像str 已经是一样的方式。 (unicode 也是如此。)
  • 但无论如何,字符串(strunicode)是可迭代的字符,而不是可迭代的“原始文本文档”,无论它们是什么。如果没有真正看到你的代码,很难猜出你做错了什么,但我的第一个猜测是这样的:该函数想要一个文件或字符串列表或某个函数从该库返回的某种对象,并且您有一个充满文件的目录,您可以从中读取这些对象,但不是将这些文件读入列表,您只需传递目录名称。
  • 我没有在任何地方传递目录名称。我试图传递一个字符串/文本作为输入来进行预测,就像在第一个链接中一样,他们传递了一个字符串数组来预测。
  • 我说这只是一个疯狂的猜测,因为您没有向我们展示您的代码或解释您传递的内容。如果您不希望我们胡乱猜测,请阅读帮助中的minimal reproducible example 并使其成为可回答的问题。
  • 但同时:是什么让您认为可以将单个字符串传递给需要字符串数组的函数?这通常不起作用——当它起作用时,它通常将您的字符串视为单个字符的列表,这不是很有用。无论您在没有向我们展示的代码中传递字符串,为什么不按照您所遵循的任何示例传递一个包含字符串的单元素数组?

标签: python string iterator


【解决方案1】:

这个问题的原因是输入只是一个字符串,但需要的是一个包含单个元素的列表(或可迭代的)(它只是字符串本身)。

可以通过添加以下行来消除错误:

input=[input]

之前

X_new_counts = count_vect.transform(input.plot_movie)

【讨论】:

    【解决方案2】:

    输入应在方括号中。

    input = ["input"]
    
    cv = CountVectorizer()
    
    cv.fit(input)
    

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 2020-09-20
      • 1970-01-01
      • 2011-07-14
      • 2015-12-21
      • 1970-01-01
      • 2022-01-13
      • 2011-03-31
      • 1970-01-01
      相关资源
      最近更新 更多