11

我有一组 Books 对象,类Book定义如下:

Class Book{

String title;
ArrayList<tags> taglist;

}

其中title是书名,例如:Javascript for dummies

taglist是我们示例的标签列表:Javascript 、jquery、“web dev”、..

正如我所说,有一套书谈论不同的事情:IT、生物学、历史……每本书都有一个标题和一组描述它的标签。

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

它的书:

  • 傻瓜Java
  • 傻瓜的Javascript
  • 在 30 天内学​​习 Flash
  • C++ 编程

历史书籍:

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

生物学书籍:

  • ……

你们知道适用于这类问题的分类算法/方法吗?

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

4

4 回答 4

29

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

分类器4J

Classifier4J 支持使用朴素贝叶斯向量空间模型进行分类。

从这个关于使用朴素贝叶斯分类器进行训练和评分的源代码片段中可以看出,该程序包相当容易使用。它也是根据自由的Apache 软件许可证分发的。

维卡

Weka 是一个非常流行的数据挖掘工具。使用它的一个优点是,您可以轻松地尝试使用许多不同的机器学习模型将书籍分类为各种主题,包括朴素贝叶斯决策树支持向量机k-最近邻逻辑回归,甚至基于规则集的学习器

您将在此处找到有关使用 Weka 进行文本分类的教程

然而,Weka 是根据GPL分发的。您将无法将它用于要分发的闭源软件。但是,您仍然可以使用它来支持 Web 服务。

Lucene Mahout

Mahout 专为在非常大的数据集上进行机器学习而设计。它建立在Apache Hadoop 之上,并支持使用朴素贝叶斯的监督分类。

您将在此处找到介绍如何使用 Mahout 进行文本分类的教程。

与 Classifier4J 一样,Mahout 是根据自由的Apache 软件许可证分发的。

于 2010-05-12T19:07:56.420 回答
1

所以你正在寻找一个包含书籍集合的标签地图?

编辑:

听起来您可能想看看向量空间模型以应用类别分类。

Lucene或Classifier4j都为此提供了一个框架。

于 2010-05-12T18:41:04.890 回答
1

你不想要这么简单的东西吗?

Map<Tag, ArrayList<Book>> m = {};
for (Book b : books) {
    for (tag t : b.taglist) {
        m.get(t).add(b);
    }
}

现在m.get("IT")将归还所有 IT 书籍等...

当然有些书会出现在多个类别中,但这也发生在现实生活中......

于 2010-05-12T19:11:54.037 回答
-1

您可能需要查找模糊匹配算法,例如 Soundex 和 Levenshtein。

于 2010-05-12T18:24:47.953 回答