分词问题导致的搜索结果不准确的解决方案-sphinx

基于网站搜索关键词“人民法院主管”的结果比“法院主管”结果多的问题,今天上午我详细阅读了网上的中英文文档。

发现最可能的原因,是分词库的问题。

举个例子,对于猕猴桃一词,如果词库中有猕猴、桃、猕猴桃三个词,那么索引的时候会索引成“猕猴桃”,换句话说,搜索“猕猴”、“桃”都不会找到“猕猴桃”这个词,只有搜索“猕猴桃”才能找到。

sphinx的逻辑是,“猕猴”、“桃”和“猕猴桃”指代的事物是不一样的。

然而,问题在于,中文是存在根词的。比如说“猕猴桃”,这个词确实和“猕猴”、“桃”不是一个事物,但是,“猕猴桃”也是“桃”。搜索“猕猴”的时候找不到“猕猴桃”是正确的,但是搜索“桃”,应该找到“猕猴桃”。

因为,“猕猴桃”这个词的根词,是“桃”。

推演到网站的bug:

由于我们的分词库中包括“人民”、“法院”、“人民法院”这三个词,所以搜索“法院主管”的时候,是找不到包含“人民法院主管”的词汇的,因为搜索“法院”一词,找不到“人民法院”。

解决方案:在分词库中删掉“人民法院”这种合成词。

测试:

 1 [[email protected] bin]# cat test.txt
 2 本案纠纷是否属于人民法院主管
 3  
 4 用现有词典进行分词,结果如下:
 5 /usr/local/mmseg3/bin/mmseg  -d /usr/local/mmseg3/etc/ /usr/local/mmseg3/bin/test.txt
 6 本案/x 纠纷/x 是否/x 属于/x 人民法院/x 主管/x
 7  
 8 查看词典内容,发现有词条为:人民法院
 9 vi /usr/local/mmseg3/etc/unigram.txt
10 人民法院        1
11 x:1
12  
13 所以,对于该搜索,搜索“人民法院主管”时会显示,但是,搜索“法院主管”时,因为没有“法院”和“主管”词条,
14 所以,没有搜索结果。
15  
16 解决方法:
17 删除“人民法院”词条,重建分词词典,测试结果如下:
18 [[email protected] etc]# /usr/local/mmseg3/bin/mmseg -u unigram.txt
19 [[email protected] etc]# ls
20 mmseg.ini  unigram.txt  unigram.txt.uni  uni.lib  uni.lib.20151130
21 [[email protected] etc]# mv unigram.txt.uni  uni.lib
22 mv: overwrite `uni.lib'? y
23 [[email protected] etc]# chmod 666 uni.lib
24 [[email protected] etc]# ll
25 total 9076
26 -rwxr-xr-x 1 root root     229 Nov 11 15:26 mmseg.ini
27 -rwxr-xr-x 1 root root 1826230 Nov 30 14:59 unigram.txt
28 -rw-rw-rw- 1 root root 3729224 Nov 30 15:00 uni.lib
29 -rwxr-xr-x 1 root root 3729280 Nov 11 15:26 uni.lib.20151130
30 [[email protected] etc]# 
31 [[email protected] etc]# /usr/local/mmseg3/bin/mmseg  -d /usr/local/mmseg3/etc/ /usr/local/mmseg3/bin/test.txt
32 本案/x 纠纷/x 是否/x 属于/x 人民/x 法院/x 主管/x
33  
34  
35 该测试,将“人民”,“法院”,“主管”分成了三个词,这样,搜索“人民法院主管”和“法院主管”均可命中。

总结:

对于该类问题,统一解决方法为,检查unigram.txt词典,将长关键词尽量缩短为短关键词,

但是,不能极端地将所有关键词缩短为1个字,否则词典索引会变大,损耗系统内存。

参考资料:

1、http://blog.atime.me/note/mmseg-custom-dict.html#2ea33d

2、http://www.coreseek.cn/opensource/mmseg/

3、http://www.coreseek.cn/products-install/ngram_len_cjk/

4、http://blog.csdn.net/websites/article/details/36626573

更多相关文章
  • 冬冬说她的VS2005又坏掉了,表现症状为调试的时候报错,并且自动退出VS2005.这多少会让人感到郁闷,已经记不清这是第几次遇到同样的问题了.我给她们室长也是做的同样的系统,安装同一个版本的VS2005,但是她们室长的就没有出现过这样的问题,而且冬冬的同学也没有人遇到同样的问题,我很郁闷.想我堂堂 ...
  • Android关于疑难bug处理方法之一(搜索不到相同bug解决方案)
    如果你的bug,在stackoverflow里,在google里都搜索不到.那很可能是你自己调用方式不正确.提供下我使用DialogFragment遇到的此类问题,log如下:    如果一直在搜索:java.lang.NullPointerExceptionandroid.support.v4.a ...
  • Exchange搜索和颗粒级还原解决方案
    Recovery Manager for ExchangeQuest Recovery Manager for Exchange(以下简称RME)提供从Exchange备份中搜索和恢复邮件的能力,以满足如下常规性需求:·搜索:人力资源或其他调查需要查找邮件,诉讼中提供邮件证据,响应监管调查(SEC, ...
  • 接上篇文章,最近做视频背景的游戏.需要使用安卓的meidaplayer来播放视频,并跳转.跳转时发现,有些视频可以跳到位置上,有些不行.GG了好久,可以使用FFMPEG这个工具重新转一次.并加上关键帧即可.果然能SeekTo到正确的位置上了.以下是bat命令:ffmpeg -i  -x264opts ...
  • Sphinx中文分词在discuz 中的应用.Sphinx-for-chinese是一款专注于中文搜索的全文检索软件,在sphinx的基础上添加了中文处理模块并优化了中文搜索效果.相比而言,以某某论坛几千万数据环境来看,比Coreseek封装的sphinx中文分词+mmseg3组合要好一点1.准备环 ...
  • Magento搜索产品结果不精准的问题
    Magento的搜索产品默认结果集是按查询的词去分词了再OR查询(具体按Catalog Search设置的查询模式).比如搜索"magento 产品"这词的话,结果是可能包括"magento"或者包括"产品"的结果集.如果想要查询的结果是精 ...
  • 由于DedeCMS搜索采用了分词,提升了搜索智能化,但是我们发现,搜索结果并没有变的更准确,本篇对DedeCMS的搜索进行一个优化,使它的搜索结果变的更智能.准确.首先需要调整搜索页面的一个栏目关键词替换,找到/plus/search.php将其中58行代码:<pre class=" ...
  • 一.分词软件简介 分词算法在20世纪80年代就有研究,不过基于当时的技术条件所限,大多数就是原始的机械分词算法.比如,最大匹配算法,mmseg等.关于原始的机械分词算法 http://www.cnblogs.com/alic/articles/1215001.html 这篇blog有很详细的介绍. ...
一周排行
  • 几年前,记者曾经到访过施耐德电气在美国罗德岛的总部,那是一个典型的美国式企业的园区.今年10月26日,记者有幸受邀参观施耐德电气位于美国波士顿的研发中心.这里也是施耐德电气新产品的策源地.统"一" ...
  • 1首先,需要下载安装ABC Amber CHM 软件,专门用来转化chm格式的文件的软件,ABC Amber CHM 软件的使用可以看参考资料.2双击ABC Amber CHM 软件打开,然后点击图上打开的位置,选择 ...
  • [引言]本文是2011年本人所写的<美国爱因斯坦计划技术分析>一文的续篇.从2011年至今,3年过去了,美国的爱因斯坦计划有了一些最新的进展.我发表此文,不担保文中的内容正确性,仅在于传播更多有爱因斯坦计 ...
  • Azure上的MongoDB:如何选择正确的实例类型
    Azure上的MongoDB:如何选择正确的实例类型?英文原文:http://blog.m ...
  • 委托和其委托的方法必须具有相同的签名.签名相同:1.参数类型相同 2.参数数量相同 3.返回值一致例一class Program  {  publicdelegateint MathMethod(int x, int ...
  •      七号电池比较小,一般用在比较便携的机器里面,缺点是容量太小,只能达到同品牌5号电池的1/4.      5号电池比较大,用在磁带随身听.相机这种需要电量多的机器上面.7号电池上面会标有"AAA&q ...
  • 原文2008年1月30日写在MSN SPACE上 这是为公司上LINUX做的网关上的QOS设置,请自行研究,详细说明以后补上.#!/bin/shCEIL=1600tc qdisc add dev eth1 root ...
  • 第一题:要求在yuangong表上增加一列为录入员,并将该字段设为默认约束,值为:张红.请用SQL语句写出从创建默认约束到删除的一系列过程.具体操作步骤如下:首先自己创建一个表,也可以找一个以建好的表.修改原表,加入 ...
  • 经过重组.加速和全面转型,AMD已经脱胎换骨.一个全新的面向未来的AMD,将兼顾传统PC业务与新兴业务市场,以创新的技术.独到的眼光和强大的执行力,直面云计算时代的挑战. 8月14日,包括AMD总裁兼首席执行官Ror ...
  • 首先想说下51CTO的博客吧,在百度搜索里面实在不行.不过作为计算机领域,51CTO还是不错的,相当不错,无论论坛还是首页还是专题,都是相当优秀的.博客更不要说了,相当多的人的博客都很有质量.本来打算买个域名的.算了 ...