2017-03-08 27 views
-1

我不得不在Java核心開發一個項目,在這個項目中我要從用戶那裏獲取大約100行文本。現在,我想要將整個文本分成羣集,其中每個羣集都與一個關鍵字相關,例如,假設我有以下文本:java中的文本聚類程序

「Java是一種面向對象的語言,它使用模塊化的類。bla bla bla .. 。

C++也是一種面向對象的語言。唧唧歪歪...

一些關於OOPS概念在這裏......」

現在,如果我給這個整個文字輸入到程序,我希望程序應該創建具有關鍵字名稱的目錄,並且它也應該自己選擇關鍵字。我期待這篇文章中的關鍵詞是Java,Modularisation,C++,OOPS。在這個程序的後期階段,我會處理不同的文本,所以我必須使這個程序足夠聰明,以瞭解哪些詞是關鍵詞,哪些詞不是。這樣它可以處理任何文本。

因此,我查了很多地方,問了很多人,並且只看了很多教程,發現他們大多是聚類數字數據。但是,很少有人正在處理文本聚類。我正在尋找一種可以完成這項工作的算法或方法。

感謝

回答

0

你之所以只找教程是因爲機器學習領域的算法需要的數值數據。所以你必須以數字格式轉換你的數據。 要創建一個文本的數字represantation有一些算法。例如Levenshtein distnace。 有了這個距離度量你有一個數值再聲抑制和聚類算法是適用的。 舉例來說,您可以使用k-Means算法或任何其他方法來對文本數據進行聚類。

你也應該google了一下關於文本挖掘,網上有很多很好的例子。這link可能是一個很好的資源

0

有各種方法,您可以用來預處理您的文本,然後羣集處理的數據。一個例子是生成文本的bag-of-words表示和適用的聚類方法。

但是,我會親自選擇LDA主題建模。這種算法本身並不會對文本進行「聚類」,但可以用作文本聚類的預處理步驟。這是另一種無監督的方法,它爲您提供了與一組文檔或句子相關的「主題」列表。這些主題實際上是一組基於它們在基礎文本中的表現如何相互關聯的詞。舉例來說,下面是三個主題從一組鳴叫的提取:

  • 食品,葡萄酒,啤酒,午餐,美味,餐飲
  • 家庭,房產,房子,提示,抵押貸款,房地產
  • 統計,追隨者,unfollowers,檢查,自動

然後你就可以計算出在句子和總字數統計這些詞出現的次數屬於每個主題一個句子的概率。最後,這些概率值可以用於文本聚類。我還應該注意到,由LDA生成的這些單詞是加權的,因此您可以使用體重最大的單詞作爲主關鍵字。例如,「食物」,「家庭」和「統計數據」在上面的列表中分別是最重要的。

對於LDA實現,請查看在Java中開發的Mallet庫。