找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2985|回复: 0

[分享] mmseg自定义分词词库

[复制链接]
发表于 2018-12-18 15:01:30 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
下面给大家介绍一下如何打造自己的coreseek分词词库。 coreseek自身带的词库不是很大,直接使用它分词可能会返回大量没用结果。要想搜索结果准确打造一个专门的分词 词库必不可少。

  i. 首先到搜狗http://pinyin#sogou#com/dict/下载你要的词库

  ii. 因为下载回来的词库不是文本文件我们不能直接使用,所以要先转换成文本文件。网上找一个搜狗转 google的小工具,用它把你下载的全部词库转成文本文件。合并为一个文件命名为words.txt。文件要用utf8编码 保存,如果想直接使用我下面的工具进行转换的话文件名一定要是words.txt。如果你想自己转换请参考官网上的方 法http://www#coreseek#cn/opensource/mmseg/

  iii. 现在我们有了一个初步的词库,但这个词库还不能直接使用,要再整理并转换coreseek使用的格式才行。 这里我提供一个自己编写的小程序方便转换。 源程序如下:
  1. <?php
  2. /**
  3. Last edit 2012-8-11
  4. Copyrigh@ www.4ji.cn
  5. **/
  6. ini_set('max_execution_time','6000');


  7. $buffer=ini_get('output_buffering');
  8. if($buffer)ob_end_flush();

  9. echo '处理新词库...
  10. ';
  11. flush();
  12. $filename = "words.txt";
  13. $handle = fopen ($filename, "r");
  14. $content = fread ($handle, filesize ($filename));

  15. fclose ($handle);

  16. $content=trim($content);
  17. $arr1 = explode( "\r\n" ,$content );
  18. $arr1=array_flip(array_flip($arr1));
  19. foreach($arr1 as $key=>$value){
  20. $value=dealchinese($value);
  21. if(!empty($value)){
  22. $arr1[$key] = $value;
  23. }
  24. else{
  25. unset($arr1[$key]);
  26. }

  27. }

  28. echo '处理原来词库...
  29. ';flush();
  30. $filename2 = "unigram.txt";
  31. $handle2 = fopen ($filename2, "r");
  32. $content2 = fread ($handle2, filesize ($filename2));
  33. fclose ($handle2);
  34. $content2=dealchinese($content2,"\r\n");
  35. $arr2 = explode( "\r\n" ,$content2 );
  36. echo '删除相同词条...
  37. ';flush();
  38. $array_diff=array_diff($arr1,$arr2);

  39. echo '格式化词库...
  40. ';flush();
  41. $words='';
  42. foreach($array_diff as $k=>$word){
  43. $words.=$word."\t1\r\nx:1\r\n";
  44. }
  45. //echo $words;
  46. file_put_contents('words_new.txt',$words,FILE_APPEND);
  47. echo 'done!';

  48. function dealChinese($str,$join=''){
  49. preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str, $matches); //将中文字符全部匹配出来
  50. $str = join($join, $matches[0]); //从匹配结果中重新组合
  51. return $str;
  52. }
  53. ?>
复制代码


  使用方法如下:

  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的话就说明新的词库并不正确。 要检查一下哪里出错了,重新生产。

查看帮助:/usr/local/mmseg3/bin/mmseg



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

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-25 15:37 , Processed in 0.044361 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表