andyliu的专栏

到搜狗词库去下载需要的词库

使用深蓝词库转换工具转换为txt格式,深蓝转换工具下载。

将txt转换为utf8编码。

使用下面代码在服务器上运行,将txt文件转换为coreseek格式的词库。注意文件名

<?phpini_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;}?>使用命令行构造词典:详情看这个coreseek词典构造

词典的构造

mmseg -u unigram.txt

该命令执行后,将会在unigram.txt所在目录中产生一个名为unigram.txt.uni的文件,将该文件改名为uni.lib,完成词典的构造。需要注意的是,unigram.txt需要预先准备,并且编码格式必须为UTF-8编码。

特别提醒:Windows下面编辑词典文件,请使用,绝对不要使用记事本(Notepad)。

词典文件格式:

….河 187x:187造假者 1x:1台北队 1x:1湖边 1……

其中,每条记录分两行。其中,第一行为词项,其格式为:[词条]\t[词频率]。特别提醒,有的编辑器会使用4到8个空格代表\t,这将导致该词条无法解析。需要注意的是,对于单个字后面跟这个字作单字成词的频率,这个频率需要在大量的预先切分好的语料库中进行统计,用户增加或删除词时,一般不需要修改这个数值;对于非单字词,词频率处必须为1。第二行为占位项,是由于LibMMSeg库的代码是从Coreseek其他的分词算法库(N-gram模型)中改造而来的,,在原来的应用中,第二行为该词在各种词性下的分布频率。LibMMSeg的用户只需要简单的在第二行处填"x:1"即可。

将修改好的uni.lib 放到mmseg对应的目录下就可以了

词典构造完成需要重、重新建立以下索引!

你会发现,曾经以为很难做到的事情,

andyliu的专栏

相关文章:

你感兴趣的文章:

标签云: