看看NLTK 书的第 6 章。根据您的描述,这听起来像是基于特征(“特征”)提取的监督分类技术可能是一个不错的选择。从书中:
如果分类器是基于包含每个输入的正确标签的训练语料库构建的,则称为监督分类器。
您可以使用您手动编码的一些数据来训练您的分类器。它可能看起来像这样:
def word_features(name):
features = {}
features["firstletter"] = name[0].lower()
features["lastletter"] = name[-1].lower()
for letter in 'abcdefghijklmnopqrstuvwxyz':
features["count(%s)" % letter] = name.lower().count(letter)
features["has(%s)" % letter] = (letter in name.lower())
return features
接下来,您可以根据已标记的一些数据训练分类器:
>> words = [('Rock', 'Physical Object'), ('Play', 'Action'), ... ]
>>> featuresets = [(word_features(n), g) for (n,g) in words]
>>> train_set, test_set = featuresets[500:], featuresets[:500]
>>> classifier = nltk.NaiveBayesClassifier.train(train_set)
您可能应该对已标记的一半数据进行训练。这样你就可以用另一半来测试分类器的准确性。继续处理这些特征,直到分类器的准确性达到您的要求。
nltk.classify.accuracy(classifier, test_set)
您可以按如下方式检查各个分类:
classifier.classify(word_features('Gold'))
如果您不熟悉 NLTK,那么您也可以阅读前面的章节。