美文网首页Python
Sphinx支持简体中文搜索

Sphinx支持简体中文搜索

作者: 阳光下的绿草地 | 来源:发表于2014-09-10 13:20 被阅读2981次

    问题:

    sphinx-doc 默认不支持简体中文的自动检索,生成的html文档检索单个中文词时会显示无匹配结果,搜索整句时才会有匹配。

    解决:

    通过添加中文搜索支持插件来实现。

    大致步骤:

    1. 安装结巴中文分词
    pip install jieba
    

    详细的安装方法参考这里

    1. 安装sphinx.search.zh_CN 插件
      复制 zh_CN.py 到 sphinx 的 search 目录下,如: C:\Python27\Lib\site-packages\sphinx\search
      打开 search 目录下的 init.py 找到:
    from sphinx.search import en, ja
    languages = {
        'en': en.SearchEnglish,
        'ja': ja.SearchJapanese,
    }
    
    修改成:
    
    from sphinx.search import en, ja, zh_CN
    languages = {
        'en': en.SearchEnglish,
        'ja': ja.SearchJapanese,
        'zh_CN': zh_CN.SearchChinese
    }
    
    1. 在 sphinx 工程的 conf.py 中添加 language = 'zh_CN'或者html_search_language = `zh_CN`然后就可以 make html 了。

    解决过程遇到的问题:

    1. python2

      按照上述顺序安装后,依然不能检索中文,考虑应该是插件没有起作用,进入安装目录:../site-pakeages/sphinx/search/后发现,zh_CN.py 没有生成对应的pyc文件,确实没起作用,随后运行ipython,查看import语句是否生效,也就是上面修改的:

    from sphinx.search import en, ja, zh_CN
    

    提示不能导入 name zh_CN。
    不解,随后将sphinx卸载重新安装:

    pip uninstall sphinx
    pip install sphinx
    pin install --upgrade sphinx
    

    然后再次运行import,竟没有再报错,正常导入了!
    最后在sphinx工程的文件夹运行:

    make clean
    make html
    

    在生成语句中多了以下几句:

    Building Trie..., from ***/anaconda/lib/python2.7/site-packages/jieba/dict.txt
    loading model from cache /tmp/jieba.cache
    loading model cost 0.798622131348 seconds.
    Trie has been built succesfully.
    

    用firefox打开生成的网页,可以检索中文了!

    1. python3
      另一台电脑装了python3的版本,在经历过以上各种折腾后依然不能正常使用。发现问题出在jieba这个包上面,当使用:
    pip install jieba
    

    总会有一些error出现,考虑可能是这个包不兼容python3,尝试到PyPI站点查找这个jieba包的信息,发现它的jieba_github站点,并在介绍里发现它有一个专门的python3版本jieba3k,安装方法在github里面也有介绍,简单可以:

    pip install jieba3k
    

    最终,python3 版本也搞定了!

    相关文章

      网友评论

      • 野的火:已经都照做了,编译也有这些内容,可就是搜索中文还是没结果。
        Building prefix dict from the default dictionary ...
        Loading model from cache c:\users\administrator\appdata\local\temp\jieba.cache
        Loading model cost 0.487 seconds.
        Prefix dict has been built succesfully.

        还有一句编译提示,不知道是不是没有索引到
        dumping search index in None (code: zh_CN) ... done
      • 不求来生:现在 __int__文件内容里面已经改了,这种修改方式无效了,怎么办呢?
        阳光下的绿草地:@不求来生 谢谢提醒。不知道你用的是哪个版本的sphinx,我的anaconda套装已经到了**V.1.3.5**,其中search/__init__.py的内容和之前有些不同,用到的部分可能需要略微修改一下:

        找到这部分:
        ```
        languages = {
        ...
        'en' : SearchEnglish,
        ...
        }
        ```
        并修改为:
        ```
        languages = {
        ...
        'en' : SearchEnglish,
        'zh_CN': 'sphinx.search.zh_CN.SearchChinese',
        ...
        }
        ```

      • 7312e79d687a:支持简体
      • 7312e79d687a:支持简体

      本文标题:Sphinx支持简体中文搜索

      本文链接:https://www.haomeiwen.com/subject/rppytttx.html