11

私はBooksオブジェクトのセットを持っています.Bookクラス次のように定義されています:

Class Book{

String title;
ArrayList<tags> taglist;

}

titleは本のタイトルです。例: Javascript for dummies

taglistは、この例のタグのリストです: Javascript、jquery、「web dev」、..

私が言ったように、IT、生物学、歴史など、さまざまなことについて話している本のセットがあります...各本には、タイトルとそれを説明するタグのセットがあります..

これらの本を、トピックごとに別のセットに自動的に分類する必要があります。例:

ITブックス:

  • ダミーのための Java
  • ダミー用 Javascript
  • 30日でフラッシュを学ぶ
  • C++ プログラミング

歴史書:

  • 世界大戦
  • 1960年のアメリカ
  • マーティン・ルーサー・キングの生涯

生物学の本:

  • ....

そのような問題に適用する分類アルゴリズム/方法を知っていますか?

解決策は、外部 API を使用してテキストのカテゴリを定義することですが、ここでの問題は、書籍の言語がフランス語、スペイン語、英語など異なることです。

4

4 に答える 4

29

これは、かなり単純なキーワード ベースの分類タスクのように見えます。Java を使用しているため、これを検討するのに適したパッケージはClassifier4JWeka、またはLucene Mahoutです。

Classifier4J

Classifier4J は、単純ベイズベクトル空間モデルを使用した分類をサポートしています。

単純ベイズ分類器を使用したトレーニングとスコアリングに関するこのソース コード スニペットに見られるように、このパッケージはかなり使いやすいものです。また、リベラルなApache Software Licenseの下で配布されています。

ウェカ

Weka は、データ マイニング用の非常に人気のあるツールです。それを使用する利点は、単純ベイズ決定木サポート ベクター マシンk 最近傍点ロジスティック回帰、さらにはルール セット ベースの学習者

Weka を使用したテキストの分類に関するチュートリアルは、こちらにあります。

ただし、Weka はGPLの下で配布されています。配布したいクローズドソースソフトウェアには使用できません。ただし、それを使用して Web サービスをサポートすることはできます。

ルセン・マハウト

Mahout は、非常に大規模なデータセットで機械学習を行うために設計されています。これはApache Hadoopの上に構築されており、ナイーブ ベイズを使用した教師付き分類をサポートしています。

テキスト分類に Mahout を使用する方法を説明したチュートリアルがここにあります。

Classifier4J と同様に、Mahout はリベラルなApache Software Licenseの下で配布されます。

于 2010-05-12T19:07:56.420 に答える
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

では、本のコレクションを保持するタグのマップを作成しようとしていますか?

編集:

カテゴリの分類を適用するためにベクトル空間モデルを調べたいと思われるかもしれません。

LuceneまたはClassifier4jのいずれかが、このためのフレームワークを提供します。

于 2010-05-12T18:41:04.890 に答える
-1

Soundex や Levenshtein などのファジー マッチング アルゴリズムを調べてみてください。

于 2010-05-12T18:24:47.953 に答える