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

本文介绍了基于Java实现的中文分词系统,主要包括语料预处理、建立2-gram模型、全切分实现和评估测试四个步骤。通过2-gram模型和回溯算法解决歧义问题,提高分词效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搜索引擎之中文分词实现(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 == '/')                    &nb

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值