Tag Archives

4 Articles

Sphinx 2.2.11和2.3.2的mmseg分词补丁(基于Coreseek)

0   11206 转为繁体

English Version

补丁包括了nzinfo在coreseek中贡献的mmseg补丁,以及我提交的日语假名补丁(详见这篇博客)。详细更改见这里

打上补丁之后,可以使用mmseg来做分词器。如果是对大篇幅的文章做索引,推荐使用mmseg处理结巴分词的词库来生成一个比较靠谱的词库。

Sphinx 2.11.1:Github下载 本地下载

Sphinx 2.3.2:Github下载 本地下载

Read More

让Coreseek支持索引日语假名

10   15158 转为繁体

coreseek是一个修改版的sphinx,用mmseg来做中文分词。但是发现一个问题,日语搜索总是效果很差,全部是假名的关键词会返回一个空结果。

开始猜想是不是词库没有包含日语的关系,后来仔细想了一想,mmseg对于没有在词典里的词应该是直接一元分词的,按理说也不应该出现无法索引日语的关系。我们可以通过mmseg命令行工具来证明这一点:

证明mmseg进行了一元分词。

那么为什么coreseek搜不到假名呢?我找啊找啊终于发现在coreseek使用mmseg进行分词的过程中,对输入字符做了一个过滤,并且有一个注释:

可见coreseek虽然将CJK (Chinese, Japanese, Korean) 中所有汉字、全角字符和标点加入了范围,但是却漏掉了平假名和片假名。因此我们将第三个range改成0x3000, 0x30FF, 0x3000就可以修正这个问题。

其中:

我把修改后的版本放到了github

另外,这里可以查询到Unicode编码范围对应的字符内容;unicode.org有一个database,但是是一个列出了全部字符的大pdf,我似乎没有找到类似的分类。

对于Ubuntu/Debian,这里有编译好的coreseek的deb包:i386 amd64;依赖于mmseg:i386 amd64;mmseg自带的词典

对于>2.2.10的版本,我在这篇博客里提供了完整的补丁,可以应用在sphinx的源码上编译。

Coreseek4.x/5.x编译和一些注意事项

0   11491 转为繁体

使用ubuntu/debian系统32位的可以在这里下载我编译好的coreseek5/csft包

对于>2.2.10的版本,我在这篇博客里提供了完整的补丁,可以应用在sphinx的源码上编译。

编译mmseg

 编译coreseek5

自动脚本有一些bug :

  • 手动运行一次autoconf和automake
  • ./configure xxxx之后,修改src/Makefile在LIBS加上-L/usr/local/mmseg3/lib  -lmmseg
  • am__object_1 增加 tokenizer_zhcn.$(OBJEXT)
  • SRC_SPHINX增加tokenizer_zhcn.cpp
  • gcc 5.不知道多少版本以后会脑残,sphinx.cpp里有个地方要加上this->,忘记具体变量了,没关系gcc会告诉你在哪的

 

如果用4.1的话不能用最新版的sphinxclient,可以去sphinx_php_api的trunk里找define ( “VER_COMMAND_SEARCH”, 0x117 );的版本(0x117 ->1.23)

 

最后贴一个图来表达对xunsearch的…………

又慢(搜索比sphinx慢5~10倍,索引体积比原始数据大7倍,比sphinx大21倍),结果又少(mysql模糊搜索≈coreseek搜索≈740+,这货只有114,$search->count获得的精确值是286条)

另外ini文件名和里面填的project_name不一致会神作

告诉我是我打开方式不对