2010-05-12 32 views
10

我有一組書籍的對象,班組長定義如下:Java的文本分類問題

Class Book{ 

String title; 
ArrayList<tags> taglist; 

} 

冠軍是書的標題,例如:的Javascript傻瓜

標記列表是我們的示例的標籤列表:的Javascript,jQuery的,「網站開發」,...

正如我說的是有一個帳套談論不同的事情:IT,生物,歷史,... 每本書都有一個標題和描述它的一套標籤..

我不得不automaticaly那些書分爲分割出的主題,例如:

IT書籍:

  • 的Java傻瓜
  • 的Javascript傻瓜
  • 學習Flash 30天
  • C++編程

史書:

  • 世界大戰
  • 美國在1960年
  • 馬丁·路德·金的生活

生物學書籍:

  • ....

難道你們知道的分類算法/方法申請那樣的問題?

一種解決方案是使用外部API定義文本的範疇,但這裏的問題是,書是不同的語言:法語,西班牙語,英語..

+0

是的,但有是書籍之間的一些共同標籤:( – Youssef 2010-05-12 19:03:43

+0

相關問題:http://stackoverflow.com/questions/2781752/naive-bayesian-for-topic-detection-using-bag-of-words-approach/2783356#2783356 – dmcer 2010-05-12 19:26:41

+0

不錯謝謝你(y) – Youssef 2010-05-12 21:22:47

回答

29

這看起來像是一個相當簡單的基於關鍵詞的分類任務。由於您使用的是Java,因此要考慮的良好軟件包爲Classifier4J,WekaLucene Mahout

Classifier4J

Classifier4J支持使用naive Bayesvector space模型分類。

正如在source code snippet關於使用樸素貝葉斯分類器的訓練和評分中看到的,該軟件包相當易於使用。它也在自由派Apache Software License下分發。

Weka的

Weka的是數據挖掘的一個非常受歡迎的工具。使用它的一個優點是,您將能夠輕鬆嘗試使用衆多的different machine learning models將書籍分類爲主題,包括naive Bayes,decision trees,support vector machines,k-nearest neighbor,logistic regression,甚至是rule set based learner

你會發現關於使用Weka進行文本分類的教程here

但是,Weka是根據GPL分發的。您將無法將其用於要發佈的封閉源代碼軟件。但是,您仍然可以使用它來支持Web服務。

Lucene的亨利馬烏

亨利馬烏是專爲做機器學習上非常大的數據集。它建立在Apache Hadoop之上,並支持使用樸素貝葉斯的監督分類。

你會發現一個教程,涵蓋如何使用Mahout的文本分類here

和Classifier4J一樣,Mahout在自由派Apache Software License下發行。

+0

好暗示謝謝 – Youssef 2010-05-12 21:22:19

+0

使用classfier4j,VectorClassifier爲我工作最好 – Indraneel 2015-08-19 04:43:33

-1

你可能想查找fuzzy matching algorithms如Soundex和Levenshtein。

+0

酷,這是一個很好的方法來計算2個字符串之間的距離,謝謝 – Youssef 2010-05-12 19:06:43

+0

你能詳細說明你將如何使用Soundex和Levenshtein將關鍵字列表映射到主題? – dmcer 2010-05-12 19:25:28

0

所以你正在尋找一個持有書籍集合的標籤地圖?

編輯:

聽起來像是你可能想看看一個Vector Space Model申請類別的分類。

LuceneClassifier4j提供了一個框架。

+0

我正在尋找一個書籍對象的地圖,其中的關鍵是類別名稱。 – Youssef 2010-05-12 19:03:13

+0

@yox:製作地圖。這是你的答案。 – 2010-05-12 19:18:38

+0

我不想通過標籤書籍..我想通過主題(地圖鍵)這裏不存在的書籍,這將是一個人工生成的字符串 – Youssef 2010-05-12 21:03:44

0

你不想要像這樣簡單的東西嗎?

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

現在m.get("IT")將返回所有IT書籍等...

當然有些書會出現在多個類別,但這種情況發生在現實生活中,太多......

+0

不,標籤是如果你想在書中的重要單詞列表.. 這將有助於分組書籍。 – Youssef 2010-05-12 21:01:10

+0

@yox:啊所以你想根據書中的標籤分類主題?或基於書本文字?並且標籤/書本文本可以使用不同的語言? – Claudiu 2010-05-12 21:23:19

+0

exaclty,我想分類只使用標籤和標籤是在不同的語言。 – Youssef 2010-05-13 13:19:35