我想对一列每一行的单词系列进行分类。我定义了一个函数,该函数从每个系列,正负字典和train_set返回一个字典。但是,当我开始定义分类器时,代码在该级别崩溃。
我有此代码:
'B'
完整错误回溯:
bytes
答案 0 :(得分:3)
原因很简单:NaiveBayesClassifier
期望由特征集和标签组成的2-tuples
迭代。
例如,在您的上下文中,正词功能集将是这样的:
[({'beauty': 0.2}, 'pos'),
({'good': 0.3}, 'pos'),
({'happy': 0.4}, 'pos')]
因此,您应应将数据馈送到NaiveBayesClassifier
的数据应采用以下形式:
labelled_featuresets = [({'beauty': 0.2}, 'pos'),
({'good': 0.3}, 'pos'),
({'happy': 0.4}, 'pos'),
({'bad': 0.5}, 'neg'),
({'sick': 0.3}, 'neg'),
({'lazy': 0.2}, 'neg')]
classifier = NaiveBayesClassifier.train(labelled_featuresets)
但是,如果您查看正在执行的操作的更广泛的上下文,出于某些原因,我不确定这是否真的有意义。
最主要的是,您实际上没有办法决定这些分数的首位。您似乎正在进行情绪分析;最简单,最常见的方法是下载从单词到情感分数的预训练映射,因此您可以尝试。
第二个是功能集是从功能值到标签的映射。如果您查看nltk official example,则功能集如下所示:
[({'last_letter': 't'}, 'female'),
({'last_letter': 'a'}, 'female'),
({'last_letter': 'h'}, 'female'),
({'last_letter': 'l'}, 'female'),
({'last_letter': 'a'}, 'female'),
({'last_letter': 'a'}, 'female'),
({'last_letter': 'e'}, 'female'),
({'last_letter': 'r'}, 'male'),
({'last_letter': 'a'}, 'male'),
({'last_letter': 'n'}, 'female')]
这里的工作流程使用一个名称,从中生成一个功能(最后一个字母),然后使用每个名称的最后一个字母以及它是男性还是女性(标签)来确定条件概率最后一个字母给出的性别名称。
另一方面,您正在尝试确定句子是肯定的还是否定的,这意味着您需要(在此进行简化)来判断每个单词是肯定的还是否定的。但是,如果是这样,那么您的功能和标签都具有完全相同的含义!