Mallet主要用于文本分類,是以它設計思路都是偏向文本分類的。
由于需要用到裡面的最大熵以及貝葉斯算法 是以 得研究一下
首頁 :http://mallet.cs.umass.edu/index.php
參考文章:http://mallet.cs.umass.edu/classifier-devel.php
http://mallet.cs.umass.edu/import-devel.php
網上找了下,材料不多,隻能自己苦逼地去看官方提供的一些guide還有API,然後就研究源代碼了
我的目的是,把MALLET導入到自己的java項目中(用的是eclipse),然後靈活地用裡面一些算法,bayes,和最大熵算法進行文本分類。
導入到工程部分:
下載下傳連結:http://mallet.cs.umass.edu/download.php 我這個時候的最新版本是2.0.7
這是壓縮包裡面的内容,把src檔案夾以及lib裡面的jar包都拷貝到工程項目裡面,把jar包都加載到工程上

最終我的工程目錄是這樣的,src放我自己的一些類
malletSrc放mallet的源碼
mallet檔案夾裡面放的都是對應的jar包
下面是我的研究筆記:
具體各個類的用法隻能通過API和源碼以及自己的測試去分析了。
下面提供一些測試例子
為了生成一個Instance得搞定下圖這幾個東西啊..REF:http://mallet.cs.umass.edu/import-devel.php
好像子類還好多,我隻研究到我夠用的幾個東西就O了。
源代碼裡面的注釋:
An instance contains four generic fields of predefined name:
"data", "target", "name", and "source". "Data" holds the data represented
`by the instance, "target" is often a label associated with the instance,
"name" is a short identifying name for the instance (such as a filename),
and "source" is human-readable sourceinformation, (such as the original text).
關于Data:
需要Alphabet以及FeatureVetor,配合使用,Alphabet用來儲存各個屬性的名字,FeatureVector用來儲存一個對象在各個屬性下的值
測試代碼1:
輸出:
長(0)=1.0
寬(1)=2.0
高(2)=3.0
我們可以指定values對應與哪個屬性值,從0開始,比如長對應0,寬對應1,高對應2,測試如下
長(0)=2.0
寬(1)=3.0
高(2)=1.0
一個比較地方需要注意的是如果指明的values的對應索引有重複,比如,2和3都指明它屬于長,那麼得到的值是累計的而不是覆寫的,值為5,這個就單詞統計的效果吧
長(0)=5.0
好吧 先把Data搞定了。FeatureVector就是我需要的data
Source:我就讓它為NULL了
Label:
/** You should never call this directly. New Label objects are
created on-demand by calling LabelAlphabet.lookupIndex(obj). */
上面是源代碼的一句話,Label需要通過LabelAlphabet來建立,是以再研究下LabelAlphabet,然後做以下測試
輸出為:桌子,這樣一來Label也搞定了
Name:作為一個instance的id号,那麼就簡單的用整型作為它的序号好了。
好了,這四個東西都搞定了,就可以建立Instance了,然後把Instance都加入到InstanceList裡面去 之後就可以參考http://mallet.cs.umass.edu/classifier-devel.php
進行分類了,分類測試代碼如下:
輸出結果 :
得到的分類結果為椅子 左下角
關于那個異常,它備注了,(This is not necessarily cause for alarm. Sometimes this happens close to the maximum, where the function may be very flat.)
好吧,先研究這樣吧,基本夠我用了,筆記就先這樣記着