- 浏览: 77275 次
- 性别:
- 来自: 地球
最近访客 更多访客>>
文章分类
最新评论
-
zhou1986lin:
[flash=200,200][b]引用[size=x-sma ...
新浪编辑器 -
vb2005xu:
晕 想不出来 为什么要实现 什么什么语言的 版本的好处
不都是 ...
新浪编辑器 -
minma_yuyang:
还不错,借鉴了。
Code style -
天机老人:
谢谢啊,这文章不错!
Sphinx -
suncanoe:
<iframe id="myEditor&qu ...
新浪编辑器
robbin以前曾经在JavaEye介绍过Sphinx这个性能优异的全文检索引擎:
http://www.iteye.com/topic/122696
当时Sphinx还不支持中文分词,现在情况已经完全改变了。李沫南为Sphinx开发了中文分词的插件——libmmseg。对于libmmseg,robbin以前也有介绍,不过是用在Ferret里面。
http://www.iteye.com/topic/196451
李沫南还开发了一个支持中文全文检索的Sphinx定制版本——Coreseek,除了支持中文的全文检索外,Coreseek最大的特点是支持使用Python提供自定义的数据源。我们可以简单地理解为:Coreseek = Sphinx + libmmseg + py_datasource。
Sphinx的主要优势是:
1. 性能优异:robbin以前已经介绍过。
2. 容易学习:架构很清晰,学习成本很低。
3. 与数据库结合更加紧密:对于以数据库为中心的Web应用来说,实现全文检索的功能,使用Sphinx开发工作量更低。
Sphinx的开发人员好像只熟悉PHP开发,因此在其手册里面举的例子都是用PHP写的,不过Rails/Ruby开发人员也可以很方便地使用Sphinx。
对于中文Rails开发人员而言,做全文检索的最佳组合是Sphinx + libmmseg + Ultrasphinx。Ultrasphinx是一个Rails插件,Rails开发人员可以使用它来很方便地调用Sphinx的功能。
这篇文档先介绍一下这些工具的安装方法,与开发相关的内容将在后续的文章中介绍。
1. 在Linux上安装
从这里http://www.sphinxsearch.com/downloads.html下载Sphinx 0.9.8 rc2版:
http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz
tar zxvf sphinx-0.9.8-rc2.tar.gz
要在Sphinx中使用libmmseg,需要为Sphinx打补丁。从这里http://www.coreseek.cn/opensource/Sphinx/下载两个补丁文件:
http://www.coreseek.com/uploads/sources/sphinx-0.98rc2.zhcn-support.patch
http://www.coreseek.com/uploads/sources/fix-crash-in-excerpts.patch
cd sphinx-0.9.8-rc2
patch -p1 < ../sphinx-0.98rc2.zhcn-support.patch
patch -p1 < ../fix-crash-in-excerpts.patch
自己打补丁比较麻烦,而且补丁是针对特定的Sphinx版本的,若版本不匹配会更麻烦。最简单的方法是直接使用李沫南已经打好补丁的Coreseek包,和自己打补丁的效果是一样的:
http://www.coreseek.com/uploads/sources/coreseek_fulltext_2.5.tar.gz
tar zxvf coreseek_fulltext_2.5.tar.gz
还需要从这里http://www.coreseek.cn/opensource/mmseg/下载libmmseg:
http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz
tar zxvf mmseg-0.7.3.tar.gz
首先编译libmmseg:
cd mmseg-0.7.3
./configure
make
make install
然后编译Sphinx,使用李沫南打好补丁的Coreseek包。注意编译这个版本之前需要先安装一个python-dev的包,在RedHat/CentOS中这样安装:
rpm -ivh python-devel-2.4.3-19.el5.i386.rpm
可能还需要安装mysql-devel这个包,在RedHat/CentOS发行版中有,我这里已经安装好了。
另外在编译前做configure时还需要设置两个环境变量。
cd coreseek_fulltext_2.5.source
CPPFLAGS=-I/usr/include/python2.4 LDFLAGS=-lpython2.4 ./configure
make
make install
2. 在Windows上安装
在Windows上为Sphinx打补丁、编译、连接libmmseg要比在Linux上做这些事情麻烦得多,而且大多数Windows上的开发人员都没有自己编译开源软件的习惯,幸好李沫南已经做了一个安装包:
http://www.coreseek.com/ft/csft_setup_2.5.1.exe
执行这个安装包即可安装Coreseek的Windows版,假设将Coreseek安装在D:\CsFullText25
将D:\CsFullText25\bin加入到环境变量PATH中,以便以后在命令行能够找到Sphinx提供的各种工具。
3. 安装Ultrasphinx
Sphinx在Linux和Windows上都已经安装好了,我们可以通过一个Rails程序来做一下测试。
假设我们原先有一个Rails应用thought_log
cd thought_log
在安装Ultrasphinx之前需要先安装一个Ruby Gem:
gem install chronic
然后安装Ultrasphinx插件:
ruby script/plugin install -x svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk
若这个Rails应用尚未提交到SVN中,或者使用其他版本管理工具,则执行:
ruby script/plugin install svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk
注意,执行这条命令前需要先安装好SVN for Windows(不是TortoiseSVN)。
为了在Windows上正常使用Ultrasphinx,需要为Ultrasphinx打一点补丁。修改vendor/plugins/ultrasphinx/tasks/ultrasphinx.rake,将其中的:
Ruby代码 复制代码
1. "searchd --config '#{Ultrasphinx::CONF_PATH}'"
"searchd --config '#{Ultrasphinx::CONF_PATH}'"
改为:
Ruby代码 复制代码
1. "searchd --config \"#{Ultrasphinx::CONF_PATH}\""
"searchd --config \"#{Ultrasphinx::CONF_PATH}\""
这样修改的原因是类似以下使用单引号的写法:
searchd --config 'D:/WORK/thought_log/config/ultrasphinx/development.conf'
在Windows上无法正常运行,必须改为使用双引号的写法:
searchd --config "D:/WORK/thought_log/config/ultrasphinx/development.conf"
除了例子中对searchd的调用,在ultrasphinx.rake文件中所有执行命令行调用的地方都需要做这样的修改。
4. 修改Sphinx配置文件并创建索引
安装完Ultrasphinx之后,将:
vendor/plugins/ultrasphinx/examples/default.base
复制到:
config/ultrasphinx/default.base
为了正常支持中文字符的全文检索,需要对default.base做一些修改
将其中的:
charset_type = utf-8
改为:
charset_type = zh_cn.utf-8
并且在charset_type设置的下面加入一行:
charset_dictpath = D:/CsFullText25/share/csft_config/dict
然后删除所有charset_table的设置。
要注意在Windows上和Linux上路径的不同写法,为了在Windows上正常使用,需要将default.base中的所有路径改为绝对路径,例如,要将:
<% tmp = "/tmp/sphinx/" %>
改为:
<% tmp = "D:/tmp/sphinx/" %>
另外,由于Sphinx的Windows版不支持seamless_rotate,需要在development.conf中将这个功能关掉:
seamless_rotate = 0
修改Model代码,加入全文检索支持:
假设我有一个Model叫做Project,其中有一个属性叫做name,我希望对这个属性做全文检索,我在project.rb中加入一行:
is_indexed :fields => ['created_at', 'name']
生成配置文件:
rake ultrasphinx:configure
这条命令执行后,在config/ultrasphinx下创建了一个development.conf,这个文件就是Sphinx的配置文件。
创建索引:
rake ultrasphinx:index
索引相关的文件创建在:
D:\tmp\sphinx
其中,“D:\tmp”是环境变量TMP的值。
5. 启动Sphinx的searchd服务:
rake ultrasphinx:daemon:start
这个时候会在3313端口启动一个searchd,搜索请求将会全部发送到这个端口来执行。
也可以自己手工来启动searchd
searchd --config "D:\WORK\thought_log\config\ultrasphinx\development.conf"
在Windows上还可以将searchd安装为一个系统服务:
searchd --install --config "D:\WORK\thought_log\config\ultrasphinx\development.conf"
启动这个服务即可。
6. 测试
ruby script/console
search = Ultrasphinx::Search.new(:class_names => 'Project')
search.run
search.results
如果执行这几条语句都没有报错,那么安装就成功了。
http://www.iteye.com/topic/122696
当时Sphinx还不支持中文分词,现在情况已经完全改变了。李沫南为Sphinx开发了中文分词的插件——libmmseg。对于libmmseg,robbin以前也有介绍,不过是用在Ferret里面。
http://www.iteye.com/topic/196451
李沫南还开发了一个支持中文全文检索的Sphinx定制版本——Coreseek,除了支持中文的全文检索外,Coreseek最大的特点是支持使用Python提供自定义的数据源。我们可以简单地理解为:Coreseek = Sphinx + libmmseg + py_datasource。
Sphinx的主要优势是:
1. 性能优异:robbin以前已经介绍过。
2. 容易学习:架构很清晰,学习成本很低。
3. 与数据库结合更加紧密:对于以数据库为中心的Web应用来说,实现全文检索的功能,使用Sphinx开发工作量更低。
Sphinx的开发人员好像只熟悉PHP开发,因此在其手册里面举的例子都是用PHP写的,不过Rails/Ruby开发人员也可以很方便地使用Sphinx。
对于中文Rails开发人员而言,做全文检索的最佳组合是Sphinx + libmmseg + Ultrasphinx。Ultrasphinx是一个Rails插件,Rails开发人员可以使用它来很方便地调用Sphinx的功能。
这篇文档先介绍一下这些工具的安装方法,与开发相关的内容将在后续的文章中介绍。
1. 在Linux上安装
从这里http://www.sphinxsearch.com/downloads.html下载Sphinx 0.9.8 rc2版:
http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz
tar zxvf sphinx-0.9.8-rc2.tar.gz
要在Sphinx中使用libmmseg,需要为Sphinx打补丁。从这里http://www.coreseek.cn/opensource/Sphinx/下载两个补丁文件:
http://www.coreseek.com/uploads/sources/sphinx-0.98rc2.zhcn-support.patch
http://www.coreseek.com/uploads/sources/fix-crash-in-excerpts.patch
cd sphinx-0.9.8-rc2
patch -p1 < ../sphinx-0.98rc2.zhcn-support.patch
patch -p1 < ../fix-crash-in-excerpts.patch
自己打补丁比较麻烦,而且补丁是针对特定的Sphinx版本的,若版本不匹配会更麻烦。最简单的方法是直接使用李沫南已经打好补丁的Coreseek包,和自己打补丁的效果是一样的:
http://www.coreseek.com/uploads/sources/coreseek_fulltext_2.5.tar.gz
tar zxvf coreseek_fulltext_2.5.tar.gz
还需要从这里http://www.coreseek.cn/opensource/mmseg/下载libmmseg:
http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz
tar zxvf mmseg-0.7.3.tar.gz
首先编译libmmseg:
cd mmseg-0.7.3
./configure
make
make install
然后编译Sphinx,使用李沫南打好补丁的Coreseek包。注意编译这个版本之前需要先安装一个python-dev的包,在RedHat/CentOS中这样安装:
rpm -ivh python-devel-2.4.3-19.el5.i386.rpm
可能还需要安装mysql-devel这个包,在RedHat/CentOS发行版中有,我这里已经安装好了。
另外在编译前做configure时还需要设置两个环境变量。
cd coreseek_fulltext_2.5.source
CPPFLAGS=-I/usr/include/python2.4 LDFLAGS=-lpython2.4 ./configure
make
make install
2. 在Windows上安装
在Windows上为Sphinx打补丁、编译、连接libmmseg要比在Linux上做这些事情麻烦得多,而且大多数Windows上的开发人员都没有自己编译开源软件的习惯,幸好李沫南已经做了一个安装包:
http://www.coreseek.com/ft/csft_setup_2.5.1.exe
执行这个安装包即可安装Coreseek的Windows版,假设将Coreseek安装在D:\CsFullText25
将D:\CsFullText25\bin加入到环境变量PATH中,以便以后在命令行能够找到Sphinx提供的各种工具。
3. 安装Ultrasphinx
Sphinx在Linux和Windows上都已经安装好了,我们可以通过一个Rails程序来做一下测试。
假设我们原先有一个Rails应用thought_log
cd thought_log
在安装Ultrasphinx之前需要先安装一个Ruby Gem:
gem install chronic
然后安装Ultrasphinx插件:
ruby script/plugin install -x svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk
若这个Rails应用尚未提交到SVN中,或者使用其他版本管理工具,则执行:
ruby script/plugin install svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk
注意,执行这条命令前需要先安装好SVN for Windows(不是TortoiseSVN)。
为了在Windows上正常使用Ultrasphinx,需要为Ultrasphinx打一点补丁。修改vendor/plugins/ultrasphinx/tasks/ultrasphinx.rake,将其中的:
Ruby代码 复制代码
1. "searchd --config '#{Ultrasphinx::CONF_PATH}'"
"searchd --config '#{Ultrasphinx::CONF_PATH}'"
改为:
Ruby代码 复制代码
1. "searchd --config \"#{Ultrasphinx::CONF_PATH}\""
"searchd --config \"#{Ultrasphinx::CONF_PATH}\""
这样修改的原因是类似以下使用单引号的写法:
searchd --config 'D:/WORK/thought_log/config/ultrasphinx/development.conf'
在Windows上无法正常运行,必须改为使用双引号的写法:
searchd --config "D:/WORK/thought_log/config/ultrasphinx/development.conf"
除了例子中对searchd的调用,在ultrasphinx.rake文件中所有执行命令行调用的地方都需要做这样的修改。
4. 修改Sphinx配置文件并创建索引
安装完Ultrasphinx之后,将:
vendor/plugins/ultrasphinx/examples/default.base
复制到:
config/ultrasphinx/default.base
为了正常支持中文字符的全文检索,需要对default.base做一些修改
将其中的:
charset_type = utf-8
改为:
charset_type = zh_cn.utf-8
并且在charset_type设置的下面加入一行:
charset_dictpath = D:/CsFullText25/share/csft_config/dict
然后删除所有charset_table的设置。
要注意在Windows上和Linux上路径的不同写法,为了在Windows上正常使用,需要将default.base中的所有路径改为绝对路径,例如,要将:
<% tmp = "/tmp/sphinx/" %>
改为:
<% tmp = "D:/tmp/sphinx/" %>
另外,由于Sphinx的Windows版不支持seamless_rotate,需要在development.conf中将这个功能关掉:
seamless_rotate = 0
修改Model代码,加入全文检索支持:
假设我有一个Model叫做Project,其中有一个属性叫做name,我希望对这个属性做全文检索,我在project.rb中加入一行:
is_indexed :fields => ['created_at', 'name']
生成配置文件:
rake ultrasphinx:configure
这条命令执行后,在config/ultrasphinx下创建了一个development.conf,这个文件就是Sphinx的配置文件。
创建索引:
rake ultrasphinx:index
索引相关的文件创建在:
D:\tmp\sphinx
其中,“D:\tmp”是环境变量TMP的值。
5. 启动Sphinx的searchd服务:
rake ultrasphinx:daemon:start
这个时候会在3313端口启动一个searchd,搜索请求将会全部发送到这个端口来执行。
也可以自己手工来启动searchd
searchd --config "D:\WORK\thought_log\config\ultrasphinx\development.conf"
在Windows上还可以将searchd安装为一个系统服务:
searchd --install --config "D:\WORK\thought_log\config\ultrasphinx\development.conf"
启动这个服务即可。
6. 测试
ruby script/console
search = Ultrasphinx::Search.new(:class_names => 'Project')
search.run
search.results
如果执行这几条语句都没有报错,那么安装就成功了。
发表评论
-
架起自己的blog, 以后我的博客将更新至 http://kunlunblogs.herokuapp.com
2010-03-09 12:11 840博客辗转几个地方, 最终还是去heroku吧 http://k ... -
检查并显示mobile页面
2010-03-05 13:39 802根据user_agent判断是否是手机设备 reque ... -
给任务传递参数
2010-03-05 10:45 953desc 'For test params' task ... -
扩展paperclip 增加watermark
2010-03-05 01:46 12811. /lib/paperclip processors ad ... -
rails read digital photo
2010-03-05 01:28 9241 gem install exifr 2 $ irb -r ... -
rails' cron rufus-scheduler
2010-03-04 15:49 13061 installation sudo gem inst ... -
searchlogic
2010-03-03 14:57 815This plugin help searching. you ... -
capistrano配置
2010-03-02 16:21 1481服务器文件结构 mya ... -
passenger 工具查看内存状态
2010-03-02 15:59 10681. inspect Phusion Passenger’s ... -
passenger apache 设定
2010-03-02 15:56 995sudo vim /etc/apache2/httpd.con ... -
rails plugin-- auto_migrations
2010-03-02 12:09 844一般我们更改表结构的时候,数据会自动清空,挺麻烦的。auto_ ... -
a question
2010-01-28 20:10 832目前,经理想知道从A地址(例如10.1.3.1)到B地址(例如 ... -
在日志中过滤password
2010-01-28 14:00 839在user controller中加入 filter_para ... -
radiantcms
2009-12-02 17:33 742http://radiantcms.org/overview/ ... -
file copy
2009-06-23 14:39 865require 'ftools' namespace :ae ... -
copy files from original dir to other dir
2009-06-23 14:35 739namespace :ae do desc &quo ... -
ActionMailer 发送 email
2009-05-19 18:57 924配置 environment -- development.r ... -
Ruby rake file
2009-05-14 15:20 864task :import_projects => :en ... -
Mini_magick
2009-05-14 13:18 1315MiniMagick中Image对象有一个shave方法,正好 ... -
匹配所有路由
2009-05-14 11:57 623*path hehe
相关推荐
本文档介绍Sphinx4在Windows下的中文训练过程及注意事项,与本文档配套的是我自己的训练实例bergtrain和用到的软件。 本文档编写日期 2013-04-23 1、为什么要训练? sphinx4目前的版本中仅提供了英文等语音识别库。...
【语音识别技术与Sphinx-4简介】 语音识别技术是一种将人类语音转化为机器可理解文本的技术,广泛应用于智能助手、电话交互系统、自动驾驶等领域。Sphinx-4是卡内基梅隆大学(CMU)开发的一个开源语音识别引擎,...
3. 编译并安装扩展:运行`phpize`来配置编译环境,然后执行`./configure --with-sphinx=/path/to/sphinx`,最后使用`make && make install`完成编译和安装。 4. 更新PHP配置:将新安装的Sphinx扩展添加到php.ini文件...
CMU Sphinx是一款开源的语音识别引擎,主要用于将连续的语音信号转换为文本。这款工具广泛应用于各种领域,如智能家居、语音助手、电话自动服务系统等。CMU Sphinx由卡内基梅隆大学(Carnegie Mellon University)...
《探索pocketsphinx-android-demo:语音识别在Android平台的应用》 在移动设备上,语音识别技术已经成为人机交互的重要组成部分,极大地提升了用户体验。本资源包——"pocketsphinx-android-demo",是专为Android...
**Pocketsphinx语音库详解** Pocketsphinx是CMU Sphinx项目的一部分,由卡内基梅隆大学(Carnegie Mellon University)开发,是一款强大的、开源的语音识别引擎,主要用于离线语音识别。它专为资源有限的设备设计,...
标题中的“pocketsphinx在windows下的中文语音识别Demo”表明了本文将关注如何在Windows操作系统中使用开源项目Pocketsphinx进行中文语音识别的演示。Pocketsphinx是一个轻量级的语音识别引擎,尤其适用于嵌入式系统...
这个压缩包包含了针对中文语言的特定模型和资源,使得Sphinx能够处理和理解中文语音输入。"zh-CN" 表明这是为中国汉语设计的版本,适应普通话的语音特征。 描述中的链接指向了一个官方的下载源,提供了一个名为 ...
Sphinx4是一款强大的开源Java语音识别引擎,专为实时、高精度的语音处理而设计。在中文环境下,Sphinx4的使用需要特定的声学模型、词典和语言模型,以便能够准确地理解和识别中文语音输入。下面我们将深入探讨这些...
sphinx系统是一个拥有悠久历史的语音识别系统,李开复自称第一个sphinx是他写的。 传说 中是第一个实用的10数字语音系统。 是由卡奈基.美隆大学研发。 sphinx3.x是基于C语言的最新版本,sphinx和 sphinx2请大家...
Sphinx是一款强大的全文搜索引擎软件,尤其在文档管理和网站构建中广泛应用。它以其高效、可扩展性和灵活性著称,被许多大型项目采纳为他们的基础搜索工具。Sphinx 2.2.10是该软件的一个稳定版本,适用于Linux操作...
CoreSeek/Sphinx是一款强大的开源全文搜索引擎,最初基于俄罗斯数据库公司Altap的数据库搜索引擎技术。它为互联网和企业级应用提供快速、有效的搜索解决方案。Sphinx特别适合处理大量数据和提供实时搜索服务。Sphinx...
Sphinx4是一个强大的开源语音识别框架,主要由Java语言编写,提供了一整套完整的工具和库,用于构建高质量的语音识别系统。这个压缩包“sphinx4-5prealpha-src.zip”包含了Sphinx4的最新预发行版本(5prealpha)的源...
《深入理解Pocketsphinx:基于lm与dic文件的语音识别》 Pocketsphinx是一个轻量级的开源语音识别引擎,广泛应用于嵌入式系统和移动设备。它属于CMU Sphinx项目的一部分,由卡内基梅隆大学开发。Pocketsphinx的设计...
本文将详细介绍pocketsphinx以及其在中文语音识别中的应用。pocketsphinx是一款开源的、轻量级的语音识别引擎,它主要用于离线语音识别任务,特别适合于资源有限的设备上运行。该软件包是CMU Sphinx项目的一部分,由...
在Python环境中,我们可以使用`pocketsphinx`,这是`cmusphinx`的一个轻量级版本,专门用于嵌入式设备和服务器。通过`pocketsphinx-python`这个Python绑定库,开发者可以轻松地将`cmusphinx-zh-cn-5.2`模型集成到...
数据库搜索引擎Sphinx是一款高效、可定制且功能丰富的全文搜索引擎,主要设计用于Web应用,以便快速地从大量数据中检索相关信息。Sphinx的核心特性包括实时索引、近实时搜索以及高度可扩展性,使得它在处理大数据量...
**Sphinx 概述** Sphinx 是一个高性能、全文搜索引擎库,主要被设计用于Web应用,提供快速且精准的搜索功能。它是一个开源项目,由俄罗斯的 Andrew Aksyonov 创建,起初是为了解决其在线教育平台的搜索需求。Sphinx...
**安卓离线语音识别技术详解:PocketSphinx Demo** 在当今的移动应用开发中,语音识别功能已经成为一种不可或缺的交互方式。特别是在智能助手、车载导航、智能家居等领域,用户可以通过语音命令来控制设备或获取...