zoukankan      html  css  js  c++  java
  • 一元分词和中文分词的结合

    1、一元分词和中文分词的结合:  ①、一元分词位于索引更新模块。Sphinx索引引擎对于CJK(中日韩)语言(必须是UTF-8编码)支持一元切分,假设【反恐行动是国产主视角射击网络游戏】这段文字,Sphinx会将其切成【反 恐 行 动 是 国 产 主 视 角 射 击 网 络 游 戏】,然后对每个字建立反向索引。如果用这句话中包含的字组成一个不存在的词语,例如【恐动】,也会被搜索到,所以搜索时,需要加引号,例如搜索【”反恐行动”】,就能完全匹配连在一起的四个字,不连续的【”恐动”】就不会被搜索到。但是,这样还有一个问题,搜索【”反恐行动游戏”】或【”国产网络游戏”】就会搜索不到。对于这个问题,采用位于搜索查询模块的中文分词来处理。

      sphinx.conf配置文件中关于UTF-8中文一元分词的配置如下:
    …省略…
    index t_source_main
    {
            source                  = t_source_main
            path                    = /data0/search/sphinx/data/t_source_main
            docinfo                 = extern
            mlock                   = 0
            morphology              = none
            min_word_len            = 1
            charset_type            = utf-8
            min_prefix_len          = 0
            html_strip              = 1
            charset_table           = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
            ngram_len               = 1
            ngram_chars             = U+3000..U+2FA1F
    }
    …省略…

      ②、中文分词位于搜索查询模块。搜索“反恐行动游戏”、“国产网络游戏”,先调用独立的中文分词系统,分别切分为“反恐行动 游戏”、“国产 网络游戏”,这时候,再给以空格分隔的词语加上引号,去Sphinx搜索【”反恐行动” “游戏”】或【”国产” “网络游戏”】,就能搜索到这条记录了。中文分词词库发生增、删、改,无需重建整个Sphinx搜索索引。
    henry解释:也就是说,做索引的时候,不用词库去分词,而是沿用sphinx原来的一元分词法。在搜索的时候才用分词去做词组的完全匹配搜索。另外一个原因,用原版的一元分词索引速度也要快很多,在他的博文中提到:   “我的环境是10000转的SAS硬盘,如果换成15000转的硬盘,速度要更快,Sphinx官方给出的索建引速度为10Mbytes/秒。原版的 sphinx一元分词创建索引速度在5.5M/秒以上,而打了LibMMSeg中文分词补丁的Sphinx创建索引速度只有300KB/秒,所以采用原版的sphinx 0.9.9能够保证频繁更新情况下的索引实时性。一元分词的索引的数据量会大一些,但可以通过sphinx分布式索引来解决搜索效率问题。” 

  • 相关阅读:
    【线型DP】【LCS】洛谷P4303 [AHOI2006]基因匹配
    【状压DP】SCOI2005-洛谷P1896-互不侵犯 (状压例题)
    【01背包】百度之星--度度熊剪纸条
    【线型DP】CF1012C Hills 小山坡
    【经典DP】洛谷P2285 [HZOI]2004 打鼹鼠
    【盗版动归】Codeforces998C——Convert to Ones 归一操作
    MySQL使用笔记(1)
    大学物理——光的干涉和衍射(2)
    大学物理——光的干涉和衍射(1)
    hdu5747 Aaronson 贪心
  • 原文地址:https://www.cnblogs.com/zl0372/p/sphinx_14.html
Copyright © 2011-2022 走看看