- 关 键 词:
- windows xp
- 搜索引擎
- 数据结构
- word
前几天读到google研究员吴军的数学之美系列篇,颇有感触。而恰好自己前段时间做了个基于统计语言模型的中文切分系统的课程项目,于是乎,帖出来与大家共同学习。
分词技术在搜索引擎,信息提取,机器翻译等领域的重要地位与应用就不敖述了。步入正题:)
一、 项目概述
本切分系统的统计语料是用我们学校自己开放的那部分,大家可以在 这里 下载,中文字符约184万,当然这都是已切分好了的,可以用此建立一个比较小的语料库。本系统我主要分下面四个步骤完成:
1、 语料预处理
2、 建立 2-gram(统计二元模型)
3、 实现全切分
4、 评估测试
下面我分别对这四个方面一一道来。
1、 语料预处理
下载的已切分的语料都是形如“19980131-04-012-001/m 现实/n 的/u 顿悟/vn 却/d 被/p 描/v 出/v 形/Ng 来/v 。/w ” ,有的前面还保留了日期编号,因为这些切分语料的来源是人民日报。预处理主要是按标点符号分句,句子简单定义为( 。?! : ;)这五种标点符号结尾的词串,句子首尾分别添加<BOS>和<EOS>这两个表示句子开始和结束的标记,这在2-gram建模时要用的,后面会提到。处理过程中,忽略词类信息和前面的日期信息,因为我这个切分系统不考虑词类标注。如前面这句预处理后应该为下面形式 “<BOS>现实 的 顿悟 却 被 描 出 形 来 。<EOS>” ,当然切分词之间你可以用你想用的符号标记,而不必是空格。因为考虑到所有的英文字符和数字的ASCII,我用了下面方法实现之:
|
out ; //输出流 in; //输入流 StringBuffer s1 = new StringBuffer(); //缓冲 char a = in.read(); while (a != -1) //判断是否已到流的终点 { if ((a == '。' || a == '?' || a == '!' || a == ':' || a == ';' )) //一句结束 { String s2 = new String(s1); out.write("<BOS>"); //在句子前加 <BOS> out.write(s2); out.write("<EOS>"); //在句子末尾加 <EOS> out.write('/n'); //换行 s1 = new StringBuffer(); } else if ( a == '/') s1 = s1.append((char)32); //分词位置空格 else if (a > 256 ) s1 = s1.append((char)a); a = in.read(); } out.close(); in.close(); |
本文:http://www.qqread.com/java/2007/06/v317390.html
相关专题
- SQL Server 索引和查询专题 (3324篇文章)
- Java环境安装配置 (5658篇文章)
- Java编程开发手册 (8309篇文章)
- 搜索引擎 (547篇文章)
- Java网络及通讯编程 (667篇文章)
- 开发框架:深入了解 Struts Validator (3次浏览)
- Java中的通信机制及与C/C API的集成 (1次浏览)
- 用Hibernate实现领域对象的自定义字段 (1次浏览)
- 精通Hibernate之映射继承关系(一) (0次浏览)
- 精通Hibernate之映射继承关系(二) (0次浏览)
- 美国计算机教授语出惊人:Java对学生有害 (0次浏览)
- JDK 6 JRE 6 Update 4 (0次浏览)
- 三步教你改善Java代码质量 (0次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)



