Python 如何在Sphinx生成的文档中搜索汉字和短词?
我在重组文本中创建了我的第一篇文章。Python 如何在Sphinx生成的文档中搜索汉字和短词?,python,python-sphinx,restructuredtext,Python,Python Sphinx,Restructuredtext,我在重组文本中创建了我的第一篇文章。 请下载并在您的计算机上解压它,将cd放入/rest/build/html,用chrome打开index.rst 我发现在重构的文本搜索功能中: 1.无法搜索汉字 2.无法搜索短词 请参见附件1,这是我要搜索的目标文章 您可以看到是和标准在文本中 请参阅附件2,无法搜索汉字标准在文本中。 请参阅附件3,无法搜索文本中的短词is。 如何解决此问题?编辑: 斯芬克斯只为整个中文句子建立索引,因为里面没有空格,斯芬克斯也不知道在哪里拆分单词来建立索引。检查文件s
请下载并在您的计算机上解压它,将cd放入
/rest/build/html
,用chrome打开index.rst
我发现在重构的文本搜索功能中:
1.无法搜索汉字2.无法搜索短词 请参见附件1,这是我要搜索的目标文章
您可以看到
是
和标准代码>在文本中
请参阅附件2,无法搜索汉字标准代码>在文本中。
请参阅附件3,无法搜索文本中的短词is
。
如何解决此问题?编辑:
斯芬克斯只为整个中文句子建立索引,因为里面没有空格,斯芬克斯也不知道在哪里拆分单词来建立索引。检查文件searchindex.js
中生成的索引
试着搜索单词的名称标准表达方式', 它起作用了^_^
Sphinx使用PythonSCRPITsearch.py
构建索引。通过调查我们可以发现
apt-get install python-sphinx
apt-get install sphinxsearch
mkdir rest
cd rest/
sphinx-quickstart
这就是为什么找不到短单词的原因。如果您只希望这些单词出现在索引中,可以将其从列表中删除
我们还可以找到这一行:
stopwords = set("""
a and are as at
be but by
for
if in into is it
near no not
of on or
such
that the their then there these they this to
was will with
""".split())
这是Sphinx用来拆分单词的正则表达式。现在我们可以明白为什么它不能索引中文单词了
解决方案是将中文分词支持添加到此文件中。有人已经这样做了:
斯芬克斯搜索引擎的答案:
我把它留在这里,以防别人发现它有用。感谢mzjn指出这一点
Sphinx默认情况下不支持中文,因为它无法识别中文字符集。它不知道在哪里拆分单词来建立索引。您需要修改配置文件,使其能够为中文单词建立索引
更具体地说,您应该在sphinx.conf
中修改charset\u table
,ngram\u len
,ngram\u chars
,使其正常工作。您可以通过谷歌搜索这些关键字以获得正确的配置
然而,斯芬克斯可能会产生一个巨大的索引,因为每个汉字都被视为一个单词。所以,如果你真的想为中文文档建立索引,那就试试吧。对于is
,我认为这是因为它是一个停止词。你使用不同的编码吗?也许这是个问题。我想浏览器使用utf8。您要查找的文件的编码是什么?问题是关于,而不是Sphinx搜索引擎。为什么Sphinx中没有search.py
?在我的debian机器上,此文件位于/usr/share/pyshared/Sphinx/search.py
word_re = re.compile(r'\w+(?u)')