Scala使用Ansj分詞
阿新 • • 發佈:2019-02-16
導包
<!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg --> <dependency> <groupId>org.ansj</groupId> <artifactId>ansj_seg</artifactId> <version>5.1.6</version> </dependency> <!-- https://mvnrepository.com/artifact/org.nlpcn/nlp-lang --> <dependency> <groupId>org.nlpcn</groupId> <artifactId>nlp-lang</artifactId> <version>1.7.7</version> </dependency>
基本使用
ansj分詞有四種模式:
基本分詞-BaseAnalysis
使用者自定義詞典 | 數字識別 | 人名識別 | 機構名識別 | 新詞發現 |
Χ | √ | Χ | Χ | Χ |
精準分詞-ToAnalysis
使用者自定義詞典 | 數字識別 | 人名識別 | 機構名識別 | 新詞發現 |
√ | √ | √ | Χ | Χ |
nlp分詞-NlpAnalysis
使用者自定義詞典 | 數字識別 | 人名識別 | 機構名識別 | 新詞發現 |
√ | √ | √ | √ | √ |
面向索引分詞-IndexAnalysis
使用者自定義詞典 | 數字識別 | 人名識別 | 機構名識別 | 新詞發現 |
√ | √ | √ | Χ | Χ |
精準分詞是店長推薦款,如果想馬上上手使用,推薦用精準分詞的方式:
val str = "這是一個詐騙簡訊,恭喜您中獎啦!http://regxlib.com/Default.aspx"
val result = ToAnalysis.parse(str)
println(result)
顯示結果:
這/r,是/v,一個/m,詐騙/vn,簡訊/n,,/w,恭喜/v,您/r,中獎/v,啦/y,!/w
過濾詞
使用者還可以通過建立StopRecognition()來進行過濾,例如:
val filter = new StopRecognition()
filter.insertStopNatures("w",null) //過濾掉標點和null
使用者自定義詞庫
自定義詞庫的好處就是可以按照你自己的方式定義詞,例如“這是一個詐騙簡訊”裡的“這是”,按照ansj原來的分詞方式,會將“這是”分為:這/r,是/v,你可以將“這是”認定為一個詞,並且可以自定義這個詞的屬性,豈不是美滋滋?
1.在resource目錄下,建立library目錄,建立userLibrary.dic檔案:
2.在檔案中寫入內容:
這是 r 1000
注意:中間分割付一定是\t
3.程式碼:
import org.nlpcn.commons.lang.tire.library.Library
val forest = Library.makeForest(classOf[Nothing].getResourceAsStream("/library/userLibrary.dic")) //載入字典檔案
val filter = new StopRecognition()
filter.insertStopNatures("w") //過濾掉標點
val str = "這是一個詐騙簡訊,恭喜您中獎啦!"
val result = ToAnalysis.parse(str,forest)
.recognition(filter)// 過濾掉標點
.toStringWithOutNature(",")// 分詞預設會打出詞性,此語句用於不打出詞性,並且分好的詞用“,”隔開
println(result)
結果:
這是,一個,詐騙,簡訊,恭喜,您,中獎,啦