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

时间:2016-05-05 20:02:07

标签: python list nltk

我有以下代码段

classifier = NaiveBayesClassifier.train(train_data)
#classifier.show_most_informative_features(n=20)
results = classifier.classify(test_data)

,错误显示在以下行

results = classifier.classify(test_data)

错误:

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'

我想在python中扩展基类列表并添加复制功能 但我不是蟒蛇专家,我也不知道如何解决这个问题。

4 个答案:

答案 0 :(得分:12)

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

fruits = ['banana', 'cucumber', 'apple', 'water mellon']
my_fruits = list(fruits)

或者,您可以通过切片来复制列表:

my_fruits_copy = fruits[:]

答案 1 :(得分:2)

NLTK分类器使用功能集;这些总是作为字典给出,其中功能名称映射到一个值。您正在传入列表,因此您不会根据NLTK文档生成功能。代码只需要Python字典,Python字典有.copy()方法。

请参阅NLTK tutorial chapter on Learning to Classify Text

  

返回的字典(称为要素集)会将要素名称映射到其值。功能名称是区分大小写的字符串,通常提供对该功能的简短的人类可读描述,如示例'last_letter'中所示。特征值是具有简单类型的值,例如布尔值,数字和字符串。

另见Featuresets section of the NLTK Classify API documentation

  

描述令牌的功能使用“featureset”进行编码,“featureset”是一个从“功能名称”映射到“功能值”的字典。功能名称是唯一的字符串,用于指示功能对令牌的哪个方面进行编码。

您还没有分享train_data列表包含的对象类型;如果这些是功能集词典,则您希望改为使用classify_many()

results = classifier.classify_many(test_data)

该方法 获取列表,但每个元素仍必须是有效的功能集。

答案 2 :(得分:0)

解决方案:classifier.classify接收一个python字典作为参数。

之后: test_set1 = sentiment_analyzer.apply_features(test_sentence1)

您得到的是这样的: [({'contains()': False, 'contains(im)': False,...

classifier.classify想要这个:

test_set1[0][0]
...
{'contains()': False, 'contains(im)': False, ...

答案 3 :(得分:-4)

为什么要这样做? 如果你想设置一个等于另一个的列表,你可以这样做:

a = ['a', 'b', 'c']
b = a 

否则,如果要在第二个内插入一个列表,可以使用append():

a = ['a','b','c']
b = ['d','e','f']
for i in len(a):
    b.append(i-1)