我有一组图书对象,课程图书的定义如下:
Class Book{
String title;
ArrayList<tags> taglist;
}
标题是本书的标题,例如: Javascript for dummies 。
和标记列表是我们示例的标记列表: Javascript,jquery,“web dev”,..
正如我所说,有一套书谈论不同的东西:IT,生物,历史...... 每本书都有一个标题和一组描述它的标签..
我必须按主题自动将这些书分类为分开的集合,例如:
IT BOOKS:
历史书:
生物学书籍:
您是否知道应用此类问题的分类算法/方法?
解决方案是使用外部API来定义文本的类别,但问题在于书籍使用不同的语言:法语,西班牙语,英语..
答案 0 :(得分:29)
这看起来像是一个相当简单的基于关键字的分类任务。由于您使用的是Java,因此要考虑的好包将是Classifier4J,Weka或Lucene Mahout。
Classifier4J
Classifier4J支持使用naive Bayes和vector space模型进行分类。
正如本source code snippet所述,使用其天真的贝叶斯分类器进行训练和评分时,该包装相当容易使用。它也是在自由主义者Apache Software License下分发的。
Weka
Weka是一种非常受欢迎的数据挖掘工具。使用它的一个好处是,您可以轻松尝试使用大量different machine learning models将书籍分类为主题,包括naive Bayes,decision trees,support vector machines,{{ 3}},k-nearest neighbor,甚至是logistic regression。
您将找到有关使用Weka进行文本分类rule set based learner的教程。
然而,Weka是在here下分发的。您将无法将其用于要分发的闭源软件。但是,您仍然可以使用它来支持Web服务。Lucene Mahout
Mahout专为在非常大的数据集上进行机器学习而设计。它建立在GPL之上,并支持使用朴素贝叶斯进行监督分类。
您将找到一个教程,介绍如何使用Mahout进行文本分类Apache Hadoop。
与Classifier4J一样,Mahout在自由主义者here下分发。
答案 1 :(得分:0)
答案 2 :(得分:0)
你不想要像这样简单的东西吗?
Map<Tag, ArrayList<Book>> m = {};
for (Book b : books) {
for (tag t : b.taglist) {
m.get(t).add(b);
}
}
现在m.get("IT")
将返回所有IT书籍等......
当然有些书会出现在多个类别中,但这也会发生在现实生活中......
答案 3 :(得分:-1)
您可能想要查找fuzzy matching algorithms,例如Soundex和Levenshtein。