自建個性化的coreseek分詞詞庫-備查

下面給大家介紹一下如何打造自己的coreseek分詞詞庫。 coreseek自身帶的詞庫不是很大,直接使用它分詞可能會返回大量沒用結果。要想搜索結果準確打造一個專門的分詞 詞庫必不可少。

  i. 首先到搜狗http://pinyin#sogou#com/dict/下載你要的詞庫

  ii. 因爲下載回來的詞庫不是文本文件我們不能直接使用,所以要先轉換成文本文件。網上找一個搜狗轉 google的小工具,用它把你下載的全部詞庫轉成文本文件。合併爲一個文件命名爲words.txt。文件要用utf8編碼 保存,如果想直接使用我下面的工具進行轉換的話文件名一定要是words.txt。如果你想自己轉換請參考官網上的方 法http://www#coreseek#cn/opensource/mmseg/

  iii. 現在我們有了一個初步的詞庫,但這個詞庫還不能直接使用,要再整理並轉換coreseek使用的格式纔行。 這裏我提供一個自己編寫的小程序方便轉換。 源程序如下:

/**
Last edit 2012-8-11
Copyrigh@ www.4ji.cn
**/
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( "\r\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_diff=array_diff($arr1,$arr2);

echo '格式化詞庫...
';flush();
$words='';
foreach($array_diff 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;
}
?>

  使用方法如下:

  1. 把words.txt,轉換工具words_format.php及c:\coreseek\etc\unigram.txt三個文件放到能運行php的 服務器同一個目錄下.

  2. 然後訪問words_format.php .

  3. 等待程序運行完,時間長短要看你詞的多少,太多的話中間可能假死。運行完後會在相同目錄下生產 words_new.txt把這個文件加到原unigram.txt的後面,保存備用.

  4. 把上面得到的文件unigram.txt複製到C:\coreseek\bin然後在命令行下進入目錄C:\coreseek\bin 執行 mmseg -u unigram.txt 該命令執行後,將會在unigram.txt所在目錄中產生一個名爲unigram.txt.uni的文件 ,將該文件改名爲uni.lib,完成詞典的構造。

  5. 測試新詞庫能否正解分詞。在C:\coreseek\bin下新建文本文件test.txt。輸入要測試的關鍵詞。 例如:四季服裝網中大面料輔料,然後保存。當中一定要包含你新加進詞庫的某個關鍵詞。例如四季服裝網是我新加的 關鍵詞。然後在剛纔的命令行下執行mmseg -d C:\coreseek\bin test.txt>result.txt .執行完後打開新生產 的結果文件result.txt .如果看到分詞結果類似四季服裝網/x 中大/x 面料/x 輔料/x 的話證明詞庫已正確生成, 如果看到新關鍵詞被分切開如: 四/x 季/x 服/x 裝/x網/x 中大/x 面料/x 輔料/x的話就說明新的詞庫並不正確。 要檢查一下哪裏出錯了,重新生產。

  6. 再把得到的uni.lib複製到C:\coreseek\etc覆蓋原文件就大功告成了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章