1. 程式人生 > >ansj分詞史上最詳細教程

ansj分詞史上最詳細教程

最近的專案需要使用到分詞技術。本著不重複造輪子的原則,使用了ansj_seg來進行分詞。本文結合博主使用經過,教大家用最快的速度上手使用ansj分詞。

1.給ansj來個硬廣

2.配置maven

在maven專案的pom中配置ansj的dependency:

<dependency>
    <groupId>org.ansj</groupId>
    <artifactId>ansj_seg</artifactId>
    <version>3.7.3-SNAPSHOT</version>
</dependency
>

3.使用例項

先不說那麼多的理論,直接上可以run起來的程式碼。畢竟在工作過程中,解決問題是第一位的。只有解決完問題以後,我們才有功夫來慢慢研究其中的門道。
對於分詞來說,最重要的任務無非就是拿到切分以後的結果(詞)。直接看程式碼:

import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.ToAnalysis;

import java.util.*;

/**
 * Created by WangLei on 16-12-9.
 */
public
class AnsjTest { public static void test() { //只關注這些詞性的詞 Set<String> expectedNature = new HashSet<String>() {{ add("n");add("v");add("vd");add("vn");add("vf"); add("vx");add("vi");add("vl");add("vg"); add("nt");add("nz");add("nw");add("nl"
); add("ng");add("userDefine");add("wh"); }}; String str = "歡迎使用ansj_seg,(ansj中文分詞)在這裡如果你遇到什麼問題都可以聯絡我.我一定盡我所能.幫助大家.ansj_seg更快,更準,更自由!" ; Result result = ToAnalysis.parse(str); //分詞結果的一個封裝,主要是一個List<Term>的terms System.out.println(result.getTerms()); List<Term> terms = result.getTerms(); //拿到terms System.out.println(terms.size()); for(int i=0; i<terms.size(); i++) { String word = terms.get(i).getName(); //拿到詞 String natureStr = terms.get(i).getNatureStr(); //拿到詞性 if(expectedNature.contains(natureStr)) { System.out.println(word + ":" + natureStr); } } } public static void main(String[] args) { test(); } }

將程式碼run起來:

歡迎/v, 使用/v, ansj/en, _, seg/en, ,, (, ansj/en, 中文/nz, 分詞/n, ), 在/p, 這裡/r, 如果/c, 你/r, 遇到/v, 什麼/r, 問題/n, 都/d, 可以/v, 聯絡/v, 我/r, ./m, 我/r, 一定/d, 盡/v, 我/r, 所/u, 能/v, ./m, 幫助/v, 大家/r, ./m, ansj/en, _, seg/en, 更/d, 快/a, ,, 更/d, 準/a, ,, 更/d, 自由/a, !]
45
歡迎:v
使用:v
中文:nz
分詞:n
遇到:v
問題:n
可以:v
聯絡:v
盡:v
能:v
幫助:v

上面的程式碼就拿到了我們想要的分詞結果!

4.詞性

在作者的文件中,詳細標明瞭相關詞性:

# 1. 名詞  (1個一類,7個二類,5個三類)
名詞分為以下子類:
n 名詞
nr 人名
nr1 漢語姓氏
nr2 漢語名字
nrj 日語人名
nrf 音譯人名
ns 地名
nsf 音譯地名
nt 機構團體名
nz 其它專名
nl 名詞性慣用語
ng 名詞性語素
nw 新詞
# 2. 時間詞(1個一類,1個二類)
t 時間詞
tg 時間詞性語素
# 3. 處所詞(1個一類)
s 處所詞
# 4. 方位詞(1個一類)
f 方位詞
# 5. 動詞(1個一類,9個二類)
v 動詞
vd 副動詞
vn 名動詞
vshi 動詞“是”
vyou 動詞“有”
vf 趨向動詞
vx 形式動詞
vi 不及物動詞(內動詞)
vl 動詞性慣用語
vg 動詞性語素
# 6. 形容詞(1個一類,4個二類)
a 形容詞
ad 副形詞
an 名形詞
ag 形容詞性語素
al 形容詞性慣用語
# 7. 區別詞(1個一類,2個二類)
b 區別詞
bl 區別詞性慣用語
# 8. 狀態詞(1個一類)
z 狀態詞
# 9. 代詞(1個一類,4個二類,6個三類)
r 代詞
rr 人稱代詞
rz 指示代詞
rzt 時間指示代詞
rzs 處所指示代詞
rzv 謂詞性指示代詞
ry 疑問代詞
ryt 時間疑問代詞
rys 處所疑問代詞
ryv 謂詞性疑問代詞
rg 代詞性語素
# 10. 數詞(1個一類,1個二類)
m 數詞
mq 數量詞
# 11. 量詞(1個一類,2個二類)
q 量詞
qv 動量詞
qt 時量詞
# 12. 副詞(1個一類)
d 副詞
# 13. 介詞(1個一類,2個二類)
p 介詞
pba 介詞“把”
pbei 介詞“被”
# 14. 連詞(1個一類,1個二類)
c 連詞
 cc 並列連詞
# 15. 助詞(1個一類,15個二類)
u 助詞
uzhe 著
ule 了 嘍
uguo 過
ude1 的 底
ude2 地
ude3 得
usuo 所
udeng 等 等等 云云
uyy 一樣 一般 似的 般
udh 的話
uls 來講 來說 而言 說來
uzhi 之
ulian 連 (“連小學生都會”)
# 16. 嘆詞(1個一類)
e 嘆詞
# 17. 語氣詞(1個一類)
y 語氣詞(delete yg)
# 18. 擬聲詞(1個一類)
o 擬聲詞
# 19. 字首(1個一類)
h 字首
# 20. 字尾(1個一類)
k 字尾
# 21. 字串(1個一類,2個二類)
x 字串
 xx 非語素字
 xu 網址URL
# 22. 標點符號(1個一類,16個二類)
w 標點符號
wkz 左括號,全形:( 〔  [  {  《 【  〖〈   半形:( [ { <
wky 右括號,全形:) 〕  ] } 》  】 〗 〉 半形: ) ] { >
wyz 左引號,全形:“ ‘ 『 
wyy 右引號,全形:” ’ 』
wj 句號,全形:。
ww 問號,全形:? 半形:?
wt 歎號,全形:! 半形:!
wd 逗號,全形:, 半形:,
wf 分號,全形:; 半形: ;
wn 頓號,全形:、
wm 冒號,全形:: 半形: :
ws 省略號,全形:……  …
wp 破折號,全形:——   --   ——-   半形:---  ----
wb 百分號千分號,全形:% ‰   半形:%
wh 單位符號,全形:¥ $ £  °  ℃  半形:$