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使用PythonSCRPIT
search.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)')