最近我们分享了一些关于分词的事情,对于琳琅满目的分词工具,我们到底该选择哪个呢?
这里有一个Java开源项目 cws_evaluation ,对中文分词做了评比,但有几点不足:(1). 只有java版本,但是机器学习主要是基于python的 (2).效果指标为行完美率和字完美率,该指标不妥,特别是句子越长,越无意义,(3). 每种分词工具评测的算法太多了,这里仅评比了默认的分词算法。
基于此,我做了一个java和python版本中文分词工具评比项目 chinese-segmentation-evaluation 。
测试了java和python常见中文分词工具的效果和效率
java8
git clone https://github.com/tiandiweizun/nlp-evaluation.git
cd nlp-evaluation/java
./gradlew.bat build
(linux) ./gradlew build
java -Dfile.encoding=utf-8 -jar build/libs/nlp-evaluation-java-1.0.0.jar
总行数:2533709 总字符数:28374490
segmentor | precision | recall | f1 | speed(字符/ms)_windows | speed(字符/ms)_linux |
---|---|---|---|---|---|
HanLP | 0.900433 | 0.910614 | 0.905495 | 1034.470451 | 797.596346 |
jieba | 0.852657 | 0.803263 | 0.827223 | 1774.181830 | 980.865943 |
thulac | 0.884405 | 0.901930 | 0.893082 | 1449.749131 | 939.832732 |
经过多次测试发现,thulac在linux上速度不是特别稳定,最快与jiba差不多
Python:3 其他参见 requirements.txt
1. git clone https://github.com/tiandiweizun/nlp-evaluation.git 2. cd nlp-evaluation 3. pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 4. cd python/indi.tiandi.nlp.evaluation 5. python3 SegEvaluation.py
总行数:2533709 总字符数:28374490
segmentor | precision | recall | f1 | speed(字符/ms)_windows | speed(字符/ms)_linux |
---|---|---|---|---|---|
pkuseg | 0.890170 | 0.886405 | 0.888284 | 34.077104 | 19.826954 |
jieba | 0.855293 | 0.808204 | 0.831082 | 169.651694 | 104.554222 |
jieba_fast | 0.855299 | 0.808182 | 0.831073 | 408.241520 | 203.815985 |
thulac | 0.848839 | 0.883031 | 0.865597 | 28.831738 | 16.565779 |
pyltp | 0.894885 | 0.908761 | 0.901770 | --------- | 52.371131 |
snownlp | 0.811029 | 0.864835 | 0.837069 | --------- | 1.947430 |