最近想研究一下word2vec,第一步是要搞个训练预料。看了看网上有人是用sogou labs提供的新闻语料进行研究的。但是我觉得可能单纯用新闻语料可能还不够吧。

所以就开始在网上找一些别的语料,后来找到了一个百度百科2012年的全部词条信息,是网友制作成词典供mdict使用的。二进制格式有5个多G,搞成utf-8文本后有13.3g,数据量还是蛮大的,应该足够word2vec的训练了。

由于是中文,还需要进行分词,尝试了一下用crf进行分词(据说是目前最先进的分词技术,据我所知,百度最新的分词工具,应该就是用crf的吧)的stanford-segmenter,发现速度太慢了。

在网上找了一下,准确和速度都还可以的分词库,最好找了ikanalyzer。这个其实是为lucence的一个切词库。不过,她也可以单独来使用。我研究了一下,觉得可能词库还够,所以就进行了一下扩充。

首先我用别的分词工具,对基本词进行了一个补充,加了一个normal_add.dic的词典,共增加了215,780(去重后)。另外从搜狗输入法的一些官方推荐的细胞词库中扒出了913,347的词形成sogou_scel.dic,另外再加了一些中文的停用词表stopword_zh.dic。

最终的配置文件如下:

1: <?xml version="1.0" encoding="UTF-8"?>

2:

3:

4: IK Analyzer 扩展配置

5: normal_add.dict;sogou_scel.dic;

6: stopword.dic;stopword_zh.dic;

7:

8:

调用ikanalyzer,写了一个分词的程序,测试了一下,目前的分词速度在1s钟,200000个词左右,速度还是蛮快的。具体的代码如下:

1: package com.smallqiao.wordseg;

2:

3: import java.io.FileInputStream;

4: import java.io.FileNotFoundException;

5: import java.io.FileOutputStream;

6: import java.io.IOException;

7: import java.io.InputStreamReader;

8: import java.io.OutputStreamWriter;

9: import java.io.UnsupportedEncodingException;

10:

11: import org.wltea.analyzer.cfg.Configuration;

12: import org.wltea.analyzer.cfg.DefaultConfig;

13: import org.wltea.analyzer.core.IKSegmenter;

14: import org.wltea.analyzer.core.Lexeme;

15:

16: public class Main {

17:

18: public static void main(String[] args) {

19: if (args.length < 4) {

20: System.err.println("usage: java -jar *.jar [use smart, default true]");

21: System.err.println("\tif the is set as -, the standard input is used");

22: System.err.println("\tif the is set as -, the standard output is used");

23: System.exit(-1);

24: }

25: String input = args[0].trim();

26: String enc = args[1].trim();

27: String output = args[2].trim();

28: String out_enc = args[3].trim();

29: boolean useSmart = true;

30: if (args.length >= 5) {

31: useSmart = Boolean.parseBoolean(args[4]);

32: }

33:

34: InputStreamReader ir = null;

35: OutputStreamWriter ow = null;

36: try {

37: Configuration cfg = DefaultConfig.getInstance();

38: cfg.setUseSmart(useSmart);

39: System.err.println("config");

40: System.err.println("\tmain dict: " + cfg.getMainDictionary());

41: System.err.print("\text dict: ");

42: for (String dict : cfg.getExtDictionarys()) {

43: System.err.print(dict + ", ");

44: }

45: System.err.println("\b\b");

46: System.err.println("\text stop dict: ");

47: for (String dict : cfg.getExtStopWordDictionarys()) {

48: System.err.print(dict + ", ");

49: }

50: System.err.println("\b\b");

51: System.err.println("\tuse smart: " + cfg.useSmart());

52:

53: if (input.equals("-")) {

54: ir = new InputStreamReader(System.in, enc);

55: } else {

56: ir = new InputStreamReader(new FileInputStream(input), enc);

57: }

58:

59: IKSegmenter seg = new IKSegmenter(ir, cfg);

60:

61: if (output.equals("-")) {

62: ow = new OutputStreamWriter(System.out, out_enc);

63: } else {

64: ow = new OutputStreamWriter(new FileOutputStream(output), out_enc);

65: }

66: Lexeme lex = null;

67: int cnt = 0;

68: long begin = 0;

69: long end = 0;

70: int time_cnt = 10000;

71: int last = 0;

72: while ((lex = seg.next()) != null) {

73: if (cnt == 0) {

74: begin = System.currentTimeMillis();

75: }

76: ow.write(lex.getLexemeText());

77: ow.write(" ");

78:

79: if (++cnt == time_cnt) {

80: ow.flush();

81: end = System.currentTimeMillis();

82: String info = String.format("speed: %d word/s", 1000 * cnt / (end - begin));

83: while (last-- > 0) {

84: System.err.print('\b');

85: }

86: System.err.printf(info);

87: last = info.length();

88: cnt = 0;

89: }

90: }

91: ow.flush();

92: }

93: catch(UnsupportedEncodingException e) {

94: System.err.println("unsupported encoding: " + enc + "or " + out_enc);

95: System.exit(-1);

96: } catch (FileNotFoundException e) {

97: System.err.println("input file not found: " + input);

98: System.exit(-1);

99: } catch (IOException e) {

100: System.err.println("while seg, io excepiton: " + e.getMessage());

101: System.exit(-1);

102: }

103: finally {

104: if (ir != null) {

105: try {

106: ir.close();

107: } catch (IOException e) {

108: }

109: }

110:

111: if (ow != null) {

112: try {

113: ow.close();

114: } catch (IOException e) {

115: }

116: }

117: }

118: }

119:

120: }

最终的切词工具,打包供下载:wordseg

欢迎加入我爱机器学习QQ14群:336582044

微信扫一扫,关注我爱机器学习公众号

java ikanalyzer分词_利用ikanalyzer分词相关推荐

  1. JAVA使用es不分词_谈谈 Elasticsearch 分词和自定义分词

    初次接触 Elasticsearch 的同学经常会遇到分词相关的难题,比如如下这些场景: 1.为什么命名有包含搜索关键词的文档,但结果里面就没有相关文档呢? 2.我存进去的文档到底被分成哪些词(ter ...

  2. 与自定义词典 分词_如何掌握分词技术,你需要学会这些

    导语 本周对自然语言处理的分词技术进行了学习.本文针对分词技术的进行了全视角的概览,目标是掌握什么是分词技术.为什么需要分词技术和如何使用分词技术.后续将分不同篇幅对其中内容进行深挖和讲解. 文章结构 ...

  3. java invoke 泛型_利用Java反射机制和泛型,全自动解析json

    有啦这个简直,太爽啦, 利用Java 反射机制,利用Class 就可以得到 类的 变量  Field[] fields=cls.getDeclaredFields(); 还可以通过类中 的方法名字 去 ...

  4. java 分词词频_利用word分词来对文本进行词频统计

    标签: 命令行脚本的调用方法如下: 将需要统计词频的文本写入文件:text.txt chmod +x wfs.sh & wfs.sh -textFile=text.txt -statistic ...

  5. java 庖丁解牛中文分词_庖丁解牛中文分词包

    http://code.google.com/p/paoding/ Paoding Analysis摘要 Paoding's Knives 中文分词具有极 高效率 和 高扩展性 .引入隐喻,采用完全的 ...

  6. mysql 中文分词搜索_利用中文分词打造数据库全文检索

    传统的 LIKE 模糊查询(前置百分号)无法利用索引,特别是多个关键词 OR,或在多个字段中 LIKE,更是效率低下.本文研究对文章进行分词以提高检索的准确度和查询效率. 根据自己的编程语言选择一款合 ...

  7. java 清空控制台_利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用

    在H2数据库引擎中获取代码执行权限的技术早已是众所周知,但有个要求就是H2能够动态编译Java代码.而本文将向大家展示以前没有公开过的利用H2的方法,并且无需使用Java编译器,即通过原生库和JNI( ...

  8. java 实现网络通信_利用Java怎么样实现网络通信功能

    利用Java怎么样实现网络通信功能 发布时间:2020-11-20 15:19:04 来源:亿速云 阅读:72 作者:Leah 利用Java怎么样实现网络通信功能?相信很多没有经验的人对此束手无策,为 ...

  9. java jmap 分析_利用java虚拟机的工具jmap分析java内存情况

    有时候碰到性能问题,比如一个java application出现out of memory,出现内存泄漏的情况,再去修改bug可能会变得异常复杂,利用工具去分析整个java application 内 ...

最新文章

  1. oracle数据库部署
  2. 剑指offer之31-35题解
  3. 适配器模式和装饰模式
  4. CentOS7 3.项目持续交付脚本
  5. 报告 | 斯坦福2019 AI年度报告出炉!700亿美元投入AI,自动驾驶融资最多
  6. 洛谷 [P1265] 公路修建
  7. 数据算法之二叉树插入(BinaryTreeL Insert)的Java实现
  8. Angular2 初识
  9. 获取数据库链接Junit
  10. [Java IO]04_系统标准IO
  11. visio给图片添加任意形状外框
  12. png批量转换成jpg,png批量转jpg方法
  13. 慧之声科技- 程序员的爱情故事
  14. QQ音乐、网易云音乐、虾米音乐们的音乐社区暗战
  15. 重难点详解-关系代数表达式
  16. 优雅写代码的45个小技巧
  17. 业大宗商品价格简史:经验总结与未来展望-20210107.PDF
  18. GA-RPN:Region Proposal by Guided Anchoring
  19. 锁定td的高度_如何固定单元格的高度
  20. “广告电商”到底是什么?广告收益模式是否行得通?

热门文章

  1. CD34 造血干细胞和造血祖细胞的区别
  2. 【FinE】CAPM和Carhart四因子模型实证
  3. 推荐一个加载动图的网站loading.io
  4. 【LeetCode - 277】搜寻名人
  5. Python GUI图形界面开发学习
  6. 「VUE 3」 v-model 的使用变化
  7. 广州大学 计算机基础,广州大学计算机应用基础试卷A卷
  8. word一行没写完就换行
  9. java实现打印机打印
  10. c语言打开文件出现分段故障,分割故障的常见原因的确定列表