Segment 是基於結巴分詞詞庫實現的更加靈活,高性能的 java 分詞實現。java
變動日誌
分詞是作 NLP 相關工做,很是基礎的一項功能。git
jieba-analysis 做爲一款很是受歡迎的分詞實現,我的實現的 opencc4j 以前一直使用其做爲分詞。github
可是隨着對分詞的瞭解,發現結巴分詞對於一些配置上不夠靈活。算法
有不少功能沒法指定關閉,好比 HMM 對於繁簡體轉換是無用的,由於繁體詞是固定的,不須要預測。框架
最新版本的詞性等功能好像也被移除了,可是這些都是我的很是須要的。maven
因此本身從新實現了一遍,但願實現一套更加靈活,更多特性的分詞框架。性能
並且 jieba-analysis 的更新彷佛停滯了,我的的實現方式差別較大,因此創建了全新的項目。學習
默認關閉,惰性加載,不對性能和內存有影響。測試
jdk1.7+編碼
maven 3.x+
<dependency> <groupId>com.github.houbb</groupId> <artifactId>segment</artifactId> <version>${最新版本}</version> </dependency>
相關代碼參見 SegmentBsTest.java
暫時沒有實現詞性標註,準備下個版本實現。
final String string = "這是一個伸手不見五指的黑夜。我叫孫悟空,我愛北京,我愛學習。"; List<ISegmentResult> resultList = SegmentBs.newInstance().segment(string); Assert.assertEquals("[這[0,1), 是[1,2), 一個[2,4), 伸手不見五指[4,10), 的[10,11), 黑夜[11,13), 。[13,14), 我[14,15), 叫[15,16), 孫悟空[16,19), ,[19,20), 我[20,21), 愛[21,22), 北京[22,24), ,[24,25), 我[25,26), 愛[26,27), 學習[27,29), 。[29,30)]", resultList.toString());
final String string = "這是一個伸手不見五指的黑夜。我叫孫悟空,我愛北京,我愛學習。"; List<String> resultList = SegmentBs.newInstance().segmentWords(string); Assert.assertEquals("[這, 是, 一個, 伸手不見五指, 的, 黑夜, 。, 我, 叫, 孫悟空, ,, 我, 愛, 北京, ,, 我, 愛, 學習, 。]", resultList.toString());
直接指定 wordType
屬性爲真便可。
final String string = "我愛學習"; List<ISegmentResult> resultList = SegmentBs .newInstance() .wordType(true) .segment(string); Assert.assertEquals("[我[0,1)/r, 愛[1,2)/v, 學習[2,4)/v]", resultList.toString());
r/v 就是詞性,每個表明的含義詳情以下。
編碼 | 描述 |
---|---|
Ag | 形語素 |
a | 形容詞 |
ad | 副形詞 |
an | 名形詞 |
b | 區別詞 |
c | 連詞 |
dg | 副語素 |
d | 副詞 |
e | 嘆詞 |
f | 方位詞 |
g | 語素 |
h | 前接成分 |
i | 成語 |
j | 簡稱略語 |
k | 後接成分 |
l | 習用語 |
m | 數詞 |
Ng | 名語素 |
n | 名詞 |
nr | 人名 |
ns | 地名 |
nt | 機構團體 |
nz | 其餘專名 |
o | 擬聲詞 |
p | 介詞 |
q | 量詞 |
r | 代詞 |
s | 處所詞 |
tg | 時語素 |
t | 時間詞 |
u | 助詞 |
vg | 動語素 |
v | 動詞 |
vd | 副動詞 |
vn | 名動詞 |
w | 標點符號 |
x | 非語素字 |
y | 語氣詞 |
z | 狀態詞 |
un | 未知詞 |
能夠參見對應的枚舉類 WordTypeEnum
性能對比基於 jieba 1.0.2 版本,測試條件保持一致,保證兩者都作好預熱,而後統一處理。
驗證下來,分詞的性能是 jieba 的兩倍左右。
緣由也很簡單,暫時沒有引入詞頻和 HMM。
代碼參見 BenchmarkTest.java
相同長文本,循環 1W 次。
感謝 jieba 分詞提供的詞庫,以及 jieba-analysis 的相關實現。