Python NLTK分类和带文本块的WordNet
我有以下两套。这个想法是能够根据我提供的一些元标记对新闻文章进行分类。例如,当我收到一篇有“法官”“5年”的文章时,它应该被归类为犯罪故事Python NLTK分类和带文本块的WordNet,python,nlp,nltk,wordnet,categorization,Python,Nlp,Nltk,Wordnet,Categorization,我有以下两套。这个想法是能够根据我提供的一些元标记对新闻文章进行分类。例如,当我收到一篇有“法官”“5年”的文章时,它应该被归类为犯罪故事 train = [ ('Honda', 'cars'), ('Ford', 'cars'), ('Volkswagen', 'cars'), ('Courthouse', 'crime'), ('Police', 'crime')
train = [
('Honda', 'cars'),
('Ford', 'cars'),
('Volkswagen', 'cars'),
('Courthouse', 'crime'),
('Police', 'crime'),
('Taurus', 'cars'),
('Chevrolet', 'cars'),
('Sonic', 'cars'),
('Judge', 'crime'),
('Jail', 'crime')
]
test = [
('Porsche', 'cars'),
('Toyota', 'cars'),
('Arrest', 'crime'),
('Prison', 'crime')
]
cl = NaiveBayesClassifier(train)
问题是,当我运行此命令时:
for a, b in test:
print a, cl.classify(a)
它把一切都归类为“汽车”
我肯定我错过了这里的语义相似性比较。我试着通过文本块使用WordNet
我跑
但它没有给我任何结果
现在的问题是:
如何让WordNet说大众汽车是一辆汽车,将其集成到分类器中,使其认识到Hyndai也是一辆汽车并正确分类?WordNet®是一个大型英语词汇数据库,汽车品牌名称不属于WordNet,因此您无法从WordNet知道大众汽车是一辆汽车。为了将一个单词分类,您必须为每个序列和测试示例构建一个特征向量。您的问题有几个方面,您可能应该逐一考虑: “我肯定我错过了这里的语义相似性比较。” “语义相似性”只是你可以考虑的许多可能的改进之一。请注意,即使对于“语义相似性”,也有许多不同的方法可以将其包含在模型中,并且并非所有这些方法都足够简单,可以对当前基于NaiveBayes的解决方案进行小的修改。不过,最重要的是,您在这里犯了一个“过早优化”的错误。在您开始使用WordNet匹配和诸如此类的东西构建复杂模型之前,请确保您当前的解决方案确实不足 您发现,如果您在一个数据集上训练NaiveBayes分类器,而该数据集不存在单词“逮捕”,那么生成的模型将在将来对该单词进行分类时遇到复杂问题。然而,有可能的是,有了一个相当真实的培训集,你不会发现自己经常遇到测试文章中完全没有熟悉标签的情况 一旦您开始使用真实的数据集,您将很快发现,在深入研究“语义相似性”业务之前,您可以尝试改进您的分类器(首先修复标记的拼写),这将在许多方面使模型复杂化,而不一定会使性能提高太多 但它没有给我任何结果 正如在另一个答案中提到的,WordNet根本没有关于“大众”一词的信息。即使是这样,你也不应该期望你输入的所有单词都是“熟悉的”、“没有拼写错误的”、“格式良好的”等等。在你所做的上下文中,你应该希望新闻文章有足够的“熟悉”标签来识别它的整体主题 我如何让WordNet说大众是一辆汽车,将其集成到分类器中,使其认识到Hyndai也是一辆汽车,并正确地对其进行分类 这个问题的一个可能答案是:制作您自己的单词关联图,添加关联“现代”-“大众”,以及其他一些东西,并为您的分类器使用类似“k-最近邻”的模型 然而,通过这样做,您将从最初声称的“按标签对新闻文章进行分类”的任务中解脱出来,并且您的分类器仍然无法识别“Hynday”一词。)
word = Word("Volkswagen")
for each in word.definitions:
print each