Python 转换列表的困难:';str';对象没有属性';项目';

Python 转换列表的困难:';str';对象没有属性';项目';,python,nlp,nltk,text-mining,Python,Nlp,Nltk,Text Mining,我正在尝试使用NLTK创建一个分类器,但是,我相信我的数据格式有一个无法克服的问题 我的数据如下所示: data = [("TEXT 1", 'no'), ("TEXT 2", 'yes'), ("TEXT 3", 'no'), ("TEXT 4", 'no'), ("TEXT 5", 'yes')] 然后,我运行以下代码: import nltk from nltk.classify

我正在尝试使用NLTK创建一个分类器,但是,我相信我的数据格式有一个无法克服的问题

我的数据如下所示:

data = [("TEXT 1", 'no'), ("TEXT 2", 'yes'), ("TEXT 3", 'no'), ("TEXT 4", 'no'), ("TEXT 5", 'yes')]
然后,我运行以下代码:

 import nltk
    from nltk.classify import maxent
    
    classifier = maxent.MaxentClassifier.train(data, bernoulli=False, max_iter=10)
但是,不幸的是,我有以下错误。这个错误包括什么?我如何克服它

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-93-e1b29adbeebb> in <module>
----> 1 classifier = maxent.MaxentClassifier.train(data, bernoulli=False, max_iter=10)

/usr/local/lib/python3.8/dist-packages/nltk/classify/maxent.py in train(cls, train_toks, algorithm, trace, encoding, labels, gaussian_prior_sigma, **cutoffs)
    324         algorithm = algorithm.lower()
    325         if algorithm == "iis":
--> 326             return train_maxent_classifier_with_iis(
    327                 train_toks, trace, encoding, labels, **cutoffs
    328             )

/usr/local/lib/python3.8/dist-packages/nltk/classify/maxent.py in train_maxent_classifier_with_iis(train_toks, trace, encoding, labels, **cutoffs)
   1175     # Construct an encoding from the training data.
   1176     if encoding is None:
-> 1177         encoding = BinaryMaxentFeatureEncoding.train(train_toks, labels=labels)
   1178 
   1179     # Count how many times each feature occurs in the training data.

/usr/local/lib/python3.8/dist-packages/nltk/classify/maxent.py in train(cls, train_toks, count_cutoff, labels, **options)
    665 
    666             # Record each of the features.
--> 667             for (fname, fval) in tok.items():
    668 
    669                 # If a count cutoff is given, then only add a joint

AttributeError: 'str' object has no attribute 'items'
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在里面
---->1分类器=maxent.MaxentClassifier.train(数据,bernoulli=False,max_iter=10)
/usr/local/lib/python3.8/dist-packages/nltk/classify/maxent.py in-train(cls、train\u-toks、算法、跟踪、编码、标签、高斯先验西格玛、**截止值)
324算法=算法.lower()
325如果算法==“iis”:
-->326返回列车\u最大\u分类器\u带\u iis(
327列TOK、跟踪、编码、标签,**截止
328             )
/usr/local/lib/python3.8/dist-packages/nltk/classify/maxent.py带iis的列式最大分类器(列式、跟踪、编码、标签、**截止)
1175#根据训练数据构造编码。
1176如果编码为无:
->1177编码=二进制MaxEntFeatureEncoding.train(train_toks,labels=标签)
1178
1179#计算每个特征在训练数据中出现的次数。
/usr/local/lib/python3.8/dist-packages/nltk/classify/maxent.py列车内(cls、列车toks、计数截止、标签,**选项)
665
666#记录每个特征。
-->667对于tok.items()中的(fname,fval):
668
669#如果给出计数截止值,则仅添加一个接头
AttributeError:“str”对象没有属性“items”

来自文档:

序列(序列toks,算法=None,跟踪=3,编码=None,标签=None,高斯先验σ=0,**截止值)

参数train_toks(列表)–训练数据,表示为成对列表,第一个成员为a,第二个成员为分类标签

元组需要将第一个元素设置为“将字符串映射到数字、布尔值或字符串”的dict,然后需要将第二个元素设置为分类标签

来自nltk.classify import maxent
数据=[({“文本1”:“否”},“标签”)]
分类器=maxent.MaxentClassifier.train(数据,bernoulli=False,max_iter=10)

在我看来,在第一个错误中,数据实际上是字符串而不是元组列表。它说“str”对象没有文档中的属性“items”:train_toks(list)——训练数据,表示为成对列表,第一个成员是特征集,第二个是分类标签。因此,如果数据是一个对列表,那么它应该在不将其转换为dict的情况下工作。也许库会在使用.items之前将该对列表转换为dict