ansj分詞史上最詳細教程
阿新 • • 發佈:2019-02-04
最近的專案需要使用到分詞技術。本著不重複造輪子的原則,使用了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 單位符號,全形:¥ $ £ ° ℃ 半形:$