目前項目中,分詞的主要工作方式可以分爲online和offline,online的方式主要是提供服務接口供應用程序來進行調用,比較側重併發和速度,offline的工作方式主要是一次性的,調用完成就釋放,適合一次處理大量文章,較online的工作方式,省去了網絡傳輸的代價,效率要高一些,但是不是很靈活,不能實現良好的易用性。
在數據挖掘任務中,在語料庫龐大的條件下,比如千萬或者億級別的文檔,單機處理基本不能滿足所需要的性能,需要進行並行化處理,但是一般分詞程序會比較依賴詞庫或者其它的鏈接庫等,部署起來會稍微麻煩點,所以爲了方便部署,採用了online的方式來提供分詞服務,系統簡單的設計如下:
分詞服務
分詞服務由thrift封裝,後臺由c++實現,對外提供java和python的接口,客戶端主要採用java實現並封裝成jar方便部署和調用,分詞服務可以根據Map節點的數量部署到多臺機器上。
語料
語料庫存放在hdfs上,按照路徑進行存取,可以根據需求調整hdfs塊的大小,數據格式爲:docId,content
MR調用
在Map起始階段,新建一個客戶端,然後對讀取的文檔進行分詞、統計詞頻,輸出docId^Aword^Bfreq^Aword^Bfreq,最後再釋放客戶端的連接。
Reduce階段也可以作進一步的處理,比如詞頻統計、詞典構建等,也可以直接將Map的結果直接輸出。