Java文本分类问题

时间:2010-05-12 18:16:29

标签: java machine-learning nlp text-processing classification

我有一组图书对象,课程图书的定义如下:

Class Book{

String title;
ArrayList<tags> taglist;

}

标题是本书的标题,例如: Javascript for dummies

标记列表是我们示例的标记列表: Javascript,jquery,“web dev”,..

正如我所说,有一套书谈论不同的东西:IT,生物,历史...... 每本书都有一个标题和一组描述它的标签..

我必须按主题自动将这些书分类为分开的集合,例如:

IT BOOKS:

  • Java for dummies
  • Javascript for dummies
  • 30天内学习闪存
  • C ++编程

历史书:

  • 世界大战
  • 1960年的美国
  • 马丁·路德·金的生命

生物学书籍:

  • ....

您是否知道应用此类问题的分类算法/方法?

解决方案是使用外部API来定义文本的类别,但问题在于书籍使用不同的语言:法语,西班牙语,英语..

4 个答案:

答案 0 :(得分:29)

这看起来像是一个相当简单的基于关键字的分类任务。由于您使用的是Java,因此要考虑的好包将是Classifier4JWekaLucene Mahout

Classifier4J

Classifier4J支持使用naive Bayesvector space模型进行分类。

正如本source code snippet所述,使用其天真的贝叶斯分类器进行训练和评分时,该包装相当容易使用。它也是在自由主义者Apache Software License下分发的。

Weka

Weka是一种非常受欢迎的数据挖掘工具。使用它的一个好处是,您可以轻松尝试使用大量different machine learning models将书籍分类为主题,包括naive Bayesdecision treessupport 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)

所以你想要制作一个包含书籍集的标签地图?

编辑:

听起来您可能想看一下Vector Space Model来应用类别分类。

LuceneClassifier4j为此提供了一个框架。

答案 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。