AttributeError:'list'对象没有属性'copy'

Amr*_*gab 8 python list nltk

我有以下代码片段

classifier = NaiveBayesClassifier.train(train_data)
#classifier.show_most_informative_features(n=20)
results = classifier.classify(test_data)
Run Code Online (Sandbox Code Playgroud)

并且错误显示在以下行中

results = classifier.classify(test_data)
Run Code Online (Sandbox Code Playgroud)

错误:

Traceback (most recent call last):
  File "trial_trial.py", line 46, in <module>
    results = classifier.classify(test_data)
  File "c:\Users\Amr\Anaconda\lib\site-packages\nltk\classify\naivebayes.py", line 88, in classify
    return self.prob_classify(featureset).max()
  File "c:\Users\Amr\Anaconda\lib\site-packages\nltk\classify\naivebayes.py", line 94, in prob_classify
    featureset = featureset.copy()
AttributeError: 'list' object has no attribute 'copy'
Run Code Online (Sandbox Code Playgroud)

我想在python中扩展基类列表并添加复制函数,但我不是python的专家,我不知道如何解决这个问题.

She*_*mbe 24

list.copy方法在python 2.x和python 3.x中都不起作用,我想知道为什么它仍然在文档中.要实现复制列表的结果,请使用list关键字:

fruits = ['banana', 'cucumber', 'apple', 'water mellon']
my_fruits = list(fruits)
Run Code Online (Sandbox Code Playgroud)

(可选)您可以通过切片来复制列表:

my_fruits_copy = fruits[:]
Run Code Online (Sandbox Code Playgroud)

  • 它位于实际存在的 Python 版本的文档中,即 Python 3.3 及更高版本。如果你认为你在 Python 3 上遇到了这个 AttributeError,那么几乎可以肯定你实际上不是在 Python 3 上。 (2认同)

Mar*_*ers 4

NLTK 分类器与特征集一起工作;这些总是以字典的形式给出,其中的特征名称映射到一个值。您将传入一个列表,因此您不会按照 NLTK 文档生成功能。该代码只需要一个 Python 字典,而 Python 字典有一个.copy()方法。

\n\n

请参阅NLTK 教程中有关学习对文本进行分类的章节:

\n\n
\n

返回的字典称为特征集,从特征名称映射到它们的值。功能名称是区分大小写的字符串,通常提供功能的简短人类可读描述,如示例中所示\'last_letter\'。特征值是具有简单类型的值,例如布尔值、数字和字符串。

\n
\n\n

另请参阅NLTK Classify API 文档的功能集部分:

\n\n
\n

描述令牌的特征使用 \xe2\x80\x9cfeatureset\xe2\x80\x9d 进行编码,该字典是从 \xe2\x80\x9c 特征名称\xe2\x80\x9d 映射到 \xe2\x80\x9c 特征值的字典\xe2\x80\x9d。特征名称是唯一的字符串,指示该特征编码了令牌的哪些方面。

\n
\n\n

您尚未共享该train_data列表包含哪些类型的对象;如果这些是功能集字典,您想改用classify_many()

\n\n
results = classifier.classify_many(test_data)\n
Run Code Online (Sandbox Code Playgroud)\n\n

该方法确实需要一个列表,但每个元素仍然必须是有效的特征集。

\n