文本分词包的对比

安装命令

  1. pip install jiagu # 包53.8M
  2. pip install pkuseg #包50.2M
  3. pip install thulac #包52.9M
  4. pip install jieba_fast #包 7.5M
  5. pip install LAC # 包64.8M

导包

  1. from LAC import LAC
  2. import pkuseg
  3. import jieba_fast as jie
  4. import thulac
  5. import jiagu

文本载入为列表

  1. text = []
  2. with open(r'data/fenci_test.txt','r',encoding='utf-8') as f:
  3. for line in f.readlines():
  4. text.append(line.strip('\n').split('\t')[-1])
  5. print('{}行文本以及分好'.format(len(text)))

一共有33388也就是3万3k多行短文本,每行长度都不是很长,一般是十个字以内

测试函数

  1. def jieba_fun(text):
  2. result = []
  3. for t in text:
  4. result.append(jie.lcut(t))
  5. return result
  6. def lac_func(text):
  7. lac = LAC(mode='seg')
  8. result = lac.run(text)
  9. return result
  10. def pkuseg_fun(text):
  11. result = []
  12. seg = pkuseg.pkuseg()
  13. for t in text:
  14. result.append(seg.cut(t))
  15. return result
  16. def thulac_fun(text):
  17. result = []
  18. thu1=thulac.thulac(seg_only=True)
  19. for t in text:
  20. result.append(thu1.cut(t))
  21. return result
  22. def jiagu_fun(text):
  23. result = []
  24. for t in text:
  25. result.append(jiagu.seg(t))
  26. return result
模块 处理时间 效果
jieba_fast 1s269ms 看上去还行但是部分词没有分开,有些词被划为字
jiagu 3s257ms 分的效果相当不错,但是时间这种实体就被分开了
lac 12s117ms 对形容词划分有点过度,但是时间地点实体划分很好
thulac 19s17ms 这个莫名会加入空格,而且效果也不是太行
pkuseg 18s760ms 划分比较细,效果上对实体划分太细,识别差一点

究极测试

测试句:我想过过儿过过的生活

  1. ['我', '想', '过', '过儿', '过过', '的', '生活']失败
  2. ['我', '想', '过', '过', '儿', '过', '过', '的', '生活']失败
  3. ['我', '想过', '过儿', '过', '过', '的', '生活']成功
  4. [['我', ''], ['想', ''], ['过', ''], ['过儿', ''], ['过', ''], ['过', ''], ['的', ''], ['生活', '']]成功
  5. ['我', '想', '过', '过儿', '过过', '的', '生活']失败

‘来到儿子等校车的地方,邓超对孙俪说:“我也想等等等等等过的那辆车。”’

  1. ['来到', '儿子', '等', '校车', '的', '地方', ',', '邓超', '对', '孙俪', '说', ':', '“', '我', '也', '想', '等等等等', '等', '过', '的', '那辆车', '。', '”']失败
  2. ['来到', '儿子', '等', '校车', '的', '地方', ',', '邓', '超', '对', '孙俪', '说', ':', '“', '我', '也', '想', '等等', '等等', '等', '过', '的', '那', '辆', '车', '。', '”']成功
  3. ['来到', '儿子', '等', '校车', '的', '地方', ',', '邓超', '对', '孙俪', '说', ':', '“', '我', '也想', '等等', '等等', '等', '过', '的', '那', '辆', '车', '。', '”']成功
  4. [['来', ''], ['到', ''], ['儿子', ''], ['等', ''], ['校车', ''], ['的', ''], ['地方', ''], [',', ''], ['邓超', ''], ['对', ''], ['孙俪', ''], ['说', ''], [':', ''], ['“', ''], ['我', ''], ['也', ''], ['想', ''], ['等等', ''], ['等等', ''], ['等', ''], ['过', ''], ['的', ''], ['那', ''], ['辆', ''], ['车', ''], ['。', ''], ['”', '']]失败
  5. ['来到', '儿子', '等', '校车', '的', '地方', ',', '邓', '超对', '孙俪', '说', ':', '“', '我', '也', '想', '等等', '等等', '等', '过', '的', '那', '辆', '车', '。', '”']成功

建议文本量大的情况下:

短文本,jieba_fast 或者jiagu

长文本:lac

文本量不是很多就上百度的lac

它的使用起来还是比较简单的

seg模式只是分词,lac模式还有实体命名识别和词形标注,rank模式在之前的情况下引入每个词的重要性。