1. ホーム
  2. python

[解決済み] AttributeError: 'list' オブジェクトには 'copy' という属性がありません。

2022-02-07 04:02:05

質問

次のようなコード・スニペットがあります。

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の専門家ではないので、この問題を解決する方法を知りません。

どのように解決するのですか?

NLTKの分類器は 特徴量セット これらは常に、特徴名と値を対応させた辞書として与えられます。その代わりにリストを渡しているので、NLTKのドキュメントにあるような素性を生成しているわけではありません。このコードでは単にPythonの辞書を想定しており、Pythonの辞書には .copy() メソッドを使用します。

を参照してください。 NLTKチュートリアルの章にある テキストの分類を学ぶ :

として知られる返されたディクショナリーは 機能セット は、機能名からその値へのマッピングを行う。特徴名は大文字と小文字を区別する文字列で、通常、次の例のように、人間が読みやすい短い説明を提供する。 'last_letter' . フィーチャーの値は、ブーリアン、数値、文字列などの単純な型を持つ値である。

もご覧ください。 機能セット NLTK Classify API ドキュメントのセクションを参照してください。 :

<ブロッククオート

トークンを記述する特徴は、特徴名と特徴値を対応させた辞書である「特徴セット」を用いて符号化される。素性名は、トークンのどの部分がその素性によって符号化されているかを示す一意の文字列である。

がどのようなオブジェクトなのかが共有されていませんね。 train_data リストが含まれている場合、それらは 機能セット ディクショナリを使用したい場合は classify_many() の代わりに

results = classifier.classify_many(test_data)

その方法 が行います。 はリストを取りますが、各要素は依然として有効な機能セットでなければなりません。