首页 文章

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

提问于
浏览
1

我有以下代码片段

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中扩展基类列表并添加复制函数,但我不是python的专家,我不知道如何解决这个问题 .

3 回答

  • 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)
    

    该方法确实采用列表,但每个元素仍必须是有效的功能集 .

  • 4

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

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

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

    my_fruits_copy = fruits[:]
    
  • -3

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

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

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

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

相关问题