sphinx分词,同义词

      下载CORESEEK软件包后,里面自带了中文分词软件包LibMMSeg。首先需要安装LibMMSeg 。下面所有操作都是在linux平台下。在LibMMSeg根目录下执行 ./configure && make && make install完成安装。默认安装目录在/usr/local/mmseg3。在/usr/local/mmseg/bin下可以之执行mmseg命令,有相应的参数查看分词效果。

      Sphinx搜索一个比较变态的地方就是按最大匹配度搜索的。比如分词中有江都,江都市,我搜江都市,是搜索不出江都的,同样如果搜索江都,也搜索不出江都市。刚开始还以为自己分词库有问题,就修改分词。

      Mmseg的分词库文档是unigam.txt,在/usr/local/mmseg/etc/下,按照格式修改相应的分词。

     最后/usr/local/mmseg3/bin/mmseg –u unigram.txt

生成unigram.uni文件,重命名为uni.lib复制到sphinx安装目录下的dict文件下,并重建索引。

忙完了发现搜索还是没起作用,详细的看了coreseek的文档才知道需要建立同义词库。

同义词库不需要自己填写,可以根据分词库生成。

1. 处理unigram.txt生成同义词库文件

    mmseg-3.2.13源代码/script/build_thesaurus.py unigram.txt > thesaurus.txt

    thesaurus.txt文件的格式如下:

南京西路

-南京,西路,

张三丰

-太极宗师,武当祖师,

2. 生成同义词词典

    mmseg -t thesaurus.txt

3. 将thesaurus.lib放到uni.lib同一目录

4. coreseek索引和搜索时,会自动进行复合分词处理

Ok,最后成功解决问题。不过感觉sphinx分词还是不成熟。

--------------------------------------------------------------------

      如果用同义词方式解决的话,同义词库就会很大。今天试了另外一种方法,就是配置中级索引。

      在配置文件也就是sphinx.conf中配置min_infix_len = 1。中缀索引是实现“start*”, “*end”, and “*middle*”等形式的通配符成为可能(通配符语法的细节请参考 enable_star 选项)。当最小中缀长度设置为正值,indexer除了对关键字本身还会对所有可能的中缀(即子字符串)做索引。太短的中缀(短于允许的最小长度)不会被索引。 例如,在min_infix_len=2设置下索引关键字“test”会导致产生6个索引项 "te", "es", "st", "tes", "est"等中缀和词本身。对此索引搜索“es”会得到包含“test”的文档,即使它并不包含“es”本身。然而,中缀索引会使索引体积急剧增大(因为待索引关键字增多了很多),而且索引和搜索的时间皆会恶化。 在中缀索引中没有自动的办法可以提高精确匹配(整个词完全匹配)的评分,但可以使用与 prefix indexes 选项中相同的技巧。

      这样配置好后,输入江都能搜江都市的,反之却不能。查看了文档以及coreseek社区的讨论帖,发现要对搜索词进行预处理,也就是搜索词输入后在java程序中队搜索词进行相应的切分处理。比如搜索江都市,java程序中,@name (江都)|(江都市)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值