科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件搜索引擎之中文分词实现(java版)

搜索引擎之中文分词实现(java版)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

前几天读到google研究员吴军的数学之美系列篇,颇有感触。而恰好自己前段时间做了个基于统计语言模型的中文切分系统的课程项目,于是乎,帖出来与大家共同学习。

作者:中国IT实验室 来源:中国IT实验室 2007年8月23日

关键字: java 搜索引擎

  • 评论
  • 分享微博
  • 分享邮件

前几天读到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();

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章