到搜狗词库去下载需要的词库
使用深蓝词库转换工具转换为txt格式,深蓝转换工具下载。
将txt转换为utf8编码。
使用下面代码在服务器上运行,将txt文件转换为coreseek格式的词库。注意文件名
<?php ini_set('max_execution_time','6000'); $buffer=ini_get('output_buffering'); if($buffer)ob_end_flush(); echo '处理新词库...'; flush(); $filename = "words.txt"; $handle = fopen ($filename, "r"); $content = fread ($handle, filesize ($filename)); fclose ($handle); $content=trim($content); $arr1 = explode( "\n" ,$content ); $arr1=array_flip(array_flip($arr1)); foreach($arr1 as $key=>$value){ $value=dealchinese($value); if(!empty($value)){ $arr1[$key] = $value; }else{ unset($arr1[$key]); } } echo '处理原来词库...'; flush(); $filename2 = "unigram.txt"; $handle2 = fopen ($filename2, "r"); $content2 = fread ($handle2, filesize ($filename2)); fclose ($handle2); $content2=dealchinese($content2,"\r\n"); $arr2 = explode( "\r\n" ,$content2 ); echo '删除相同词条...';flush(); $array=array_merge($arr1,$arr2); $array = array_unique($array); echo '格式化词库...';flush(); $words=''; foreach($array as $k=>$word){ $words.=$word."\t1\r\nx:1\r\n"; } //echo $words; file_put_contents('words_new.txt',$words,FILE_APPEND); echo 'done!'; function dealChinese($str,$join=''){ preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str, $matches); //将中文字符全部匹配出来 $str = join($join, $matches[0]); //从匹配结果中重新组合 return $str; } ?>
词典的构造
mmseg -u unigram.txt
该命令执行后,将会在unigram.txt所在目录中产生一个名为unigram.txt.uni的文件,将该文件改名为uni.lib,完成词典的构造。需要注意的是,unigram.txt需要预先准备,并且编码格式必须为UTF-8编码。
特别提醒:Windows下面编辑词典文件,请使用Notepad2,绝对不要使用记事本(Notepad)。
词典文件格式:
....
河 187
x:187
造假者 1
x:1
台北队 1
x:1
湖边 1
......
其中,每条记录分两行。其中,第一行为词项,其格式为:[词条]\t[词频率]。特别提醒,有的编辑器会使用4到8个空格代表\t,这将导致该词条无法解析。需要注意的是,对于单个字后面跟这个字作单字成词的频率,这个频率需要在大量的预先切分好的语料库中进行统计,用户增加或删除词时,一般不需要修改这个数值;对于非单字词,词频率处必须为1。第二行为占位项,是由于LibMMSeg库的代码是从Coreseek其他的分词算法库(N-gram模型)中改造而来的,在原来的应用中,第二行为该词在各种词性下的分布频率。LibMMSeg的用户只需要简单的在第二行处填"x:1"即可。
将修改好的uni.lib 放到mmseg对应的目录下就可以了
词典构造完成需要重、重新建立以下索引!