PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))
- PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索
- 中文分词:
a) robbe PHP中文分词扩展: http://www.boyunjian.com/v/softd/robbe.html
i. Robbe完整版本下载:Robbe完整版本(PHP测试程序, 开发帮助文档, WinNT下php各版本的dll文件)下载: http://code.google.com/p/robbe(“谷歌”无法使用)
b) SCWS(简易中文分词) 基于HTTP/POST的分词 : http://www.xunsearch.com/scws/api.php
c) MFSOU中文分词PHP扩展: http://php.mfsou.com/(网站打不开,无法访问)
综上:只能使用SCMS中文分词了。
3. 全文检索
a) MySQL全文检索(支持英文分词)
i. http://www.jcodecraeer.com/a/shujuku/2012/0728/324.html
ii. 需要进一步学习MySQL全文检索
b) Sphinx:基于SQL的全文检索引擎
i. http://sphinxsearch.com/downloads/
ii. Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。
c) 迅搜:sunsearch: http://www.xunsearch.com/doc/index
i. 目前后端服务器只支持 UNIX (含Linux/BSD/MacOS等) 操作系统,前端开发包只支持 PHP 语言。
ii. Xunsearch 可以帮助您建立门户/垂直搜索/论坛搜索/WEB站内搜索/文档文献资料搜索等。
php_scws.dll/Win32 安装说明
安装:http://www.xunsearch.com/scws/docs.php#instdll
1. 根据您当前用的 PHP 版本,下载相应已编译好的 php_scws.dll 扩展库。
目前支持 PHP-4.4.x 和 PHP-5.2.x 系列,下载地址分别为: php-4.4.x: http://www.xunsearch.com/scws/down/php-4.4.x/php_scws.dll
php-5.2.x: http://www.xunsearch.com/scws/down/php-5.2.x/php_scws.dll
php-5.3.x: http://www.xunsearch.com/scws/down/php-5.3.x/php_scws.dll 2. 将下载后的 php_scws.dll 放到 php 安装目录的
extensions/ 目录中去(通常为:X:/php/extensions/或 X:/php/ext/)。 3. 建立一个本地目录放规则集文件和词典文件,建议使用:C:/program files/scws/etc 4. 从 scws 主页上下载词典文件,解压后将 *.xdb 放到上述目录中
词典系列:http://www.xunsearch.com/scws/down/scws-dict-chs-gbk.tar.bz2
http://www.xunsearch.com/scws/down/scws-dict-chs-utf8.tar.bz2
http://www.xunsearch.com/scws/down/scws-dict-cht-utf8.tar.bz2 5. 从 scws 主页上下载规则集文件,解压后将 *.ini 放到第 3 步建立的目录
规则集文件压缩包:http://www.xunsearch.com/scws/down/rules.tgz
解压后有三个文件分别为 rules.ini rules.utf8.ini rules_cht.utf8.ini
将三件文件拷到第 3 步所述的目录中 6. 修改 php.ini 通常位于 C:/windows/php.ini 或 C:/winnt/php.ini 之类的目录,
在 php.ini 的末尾加入以下几行: [scws]
;
; 注意请检查 php.ini 中的 extension_dir 的设定值是否正确, 否则请将 extension_dir 设为空,
; 再把 php_scws.dll 指定为绝对路径。
;
extension = php_scws.dll
scws.default.charset = gbk
scws.default.fpath = "c:/program files/scws/etc" 5. 重开 web 服务器即可完成。 scws添加新词语(添加自定义的词语)
思路:利用scws的工具,把现有词库导出为txt,然后修改txt,再把txt转换成xdb文件(这个导入几天下来也没有成功)
SCWS提供了词库XDB导出导入词库的工具,下载后解压至任意文件夹,我解压至php安装目录下。在命令行下进入您PHP的安装目录,我的目录是”D:/wampServer/wamp/bin/php/php-5.3.29-Win32-VC9-x86“。
dict.txt中文本格式为:
# WORD TF IDF ATTR
当机立断 14.01 8.10 i
#开头的行是注释。每行是一个词。每个词分为四部分,WORD列是词本身,TF和IDF列是词权重,ATTR列是词性。
在这里要解释下TF和IDF的意思,它们合起来称作TF-IDF(term frequency– inverse document frequency),是一种用于资讯检索与资讯探勘的常用加权技术,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用分类。说起来很不好理解,其实也不需要理解,SCWS也提供了新词生词的TF/IDF计算器,可以自动获得词语的权重值。
ATTR是词性,也就是标示词语是名字、动词、形容词等等词性的。详细的词性标示方法请看SCWS的说明:词典词性标注详解
步骤1:执行命令行,将词库先导出来,生成一个文本文件(dict.txt)
命令格式为:php dump_xdb_file.php <要导出的.xdb文件> [要存入的文本文件]
我的命令语句是(路径跳转到php安装路径下d:,cd D:/wampServer/wamp/bin/php/php-5.3.29-Win32-VC9-x86):
php dump_xdb_file.php C:/"Program Files"/scws/etc/dict.xdb d:/123.txt
几秒后在d:目录下我就获得了导出的纯文本文件123.txt。
导入词库命令: 命令格式为:php make_xdb_file.php <要生成的.xdb> [导入的文本文件]
php make_xdb_file.php C:/"Program Files"/scws/etc/dict2.xdb d:/123.txt
生成xdb文件的过程需要比较长的时间,请耐心等待,如下图

我遇到问题(目前还没有解决):
我用scws中文分词自定义词库导入出错如下:
Notice: Undefined index :part in make_xdb_file.php on line 92
Notice: Undefined index :tf in make_xdb_file.php on line 93[/color]
修改了make_xdb_file.php 文件90行foreach(){},“{}”中内容为:[php]
foreach ($rec[$k] as $w => $v)
{
$flag = (isset($v['tf']) ? 0x01 : 0);
if (isset($v['part'])) {
if($v['part']){
$flag |= 0x02;
}
}
$tf=(isset($v['tf'])) ? $v['tf']:'' ;
$idf=(isset($v['idf'])) ? $v['idf']:'';
$attr=(isset($v['attr'])) ? $v['attr']:'';
$data = pack('ffCa3', $tf, $idf, $flag, $attr);
//$data = pack('ffCa3', $v['tf'], $v['idf'], $flag, $v['attr']);
$xdb->Put($w, $data);
$cnt++;
}[/php]
上面问题解决,但cmd中运行到Inserting [63/64] ... 33434 Records saved.又开始出现问题:(xdb.class.php文件):[color=#FF4500]Notice:User of undefined constant key-assumed 'key' in xdb.class.php(447):runtime-created function on line 1[/color]
不知道如何解决。
问题截图:

打开php.ini 文件,找到date.timezone =PRC。去掉date.timezone前面的分号“;”。

修改了make_xdb_file.php 文件90行foreach(){},“{}”中内容为:
foreach ($rec[$k] as $w => $v)
{
$flag = (isset($v['tf']) ? 0x01 : 0);
if (isset($v['part'])) {
if($v['part']){
$flag |= 0x02;
}
}
$tf=(isset($v['tf'])) ? $v['tf']:'' ;
$idf=(isset($v['idf'])) ? $v['idf']:'';
$attr=(isset($v['attr'])) ? $v['attr']:'';
$data = pack('ffCa3', $tf, $idf, $flag, $attr);
//$data = pack('ffCa3', $v['tf'], $v['idf'], $flag, $v['attr']);
$xdb->Put($w, $data);
$cnt++;
}
又出现新问题:

这个问题还没有解决。导入词库失败。
参考:http://blog.sina.com.cn/s/blog_54fd6b710101as5c.html
http://blog.sina.com.cn/s/blog_7d2117080102uyeu.html
PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))的更多相关文章
- MySQL数据库开发规范-EC
最近一段时间一边在线上抓取SQL来优化,一边在整理这个开发规范,尽量减少新的问题SQL进入生产库.今天也是对公司的开发做了一次培训,PPT就不放上来了,里面有十来个生产SQL的案例.因为规范大部分还是 ...
- 微渠道发展 BAE交通运输平台和java呼声,微信mysql数据库开发实例 --图文开发教程
持续更新 BAE java开展mysql数据库 图文教程 BAE java语言发展mysql源码下载: 目前微信的发展.BAE开展.java开展.mysql教程开发非常,的介绍基于BAE平台.java ...
- 原生Jdbc操作Mysql数据库开发步骤
原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤: 1.导入数据库驱动包 ...
- MySQL 数据库开发的 36 条军规
MySQL 数据库开发的 36 条军规 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. (一)核心军规 (1)不在数据库做运算:cpu计算务必移至业务层 ...
- MySQL数据库的优化(上)单机MySQL数据库的优化
MySQL数据库的优化(上)单机MySQL数据库的优化 2011-03-08 08:49 抚琴煮酒 51CTO 字号:T | T 公司网站访问量越来越大,导致MySQL的压力越来越大,让我们自然想到的 ...
- Navicat for Mysql连接mysql数据库时出现 2003-Can't connect to MySql server on 'localhost'(10061)
一.环境:linux服务器下 二.问题:在windows7下使用Navicat for Mysql连接mysql数据库时出现 2003-Can't connect to MySql server on ...
- 一、初识MySQL数据库 二、搭建MySQL数据库(重点) 三、使用MySQL数据库 四、认识MySQL数据库的数据类型 五、操作MySQL数据库的数据(重点)
一.初识MySQL数据库 ###<1>数据库概述 1. 数据库 长期存储在计算机内的,由组织的可共享的数据集合 存储数据的仓库 文件 ...
- Lucene 03 - 什么是分词器 + 使用IK中文分词器
目录 1 分词器概述 1.1 分词器简介 1.2 分词器的使用 1.3 中文分词器 1.3.1 中文分词器简介 1.3.2 Lucene提供的中文分词器 1.3.3 第三方中文分词器 2 IK分词器的 ...
- Lucene系列四:Lucene提供的分词器、IKAnalyze中文分词器集成、扩展 IKAnalyzer的停用词和新词
一.Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer 1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer 2. 在p ...
随机推荐
- docker-5 docker仓库
docker部署环境:CentOS release 6.5 (Final) Docker配置文件:/etc/sysconfig/docker 重要参数解释: -H 表示Docker Daemon绑定 ...
- 【JAVA 小结】Java关于类与对象的代码
分别建立2个类class works 和 Person import java.io.*; public class works { public static void main(String[] ...
- 理解 QEMU/KVM 和 Ceph(3):存储卷挂接和设备名称
本系列文章会总结 QEMU/KVM 和 Ceph 之间的整合: (1)QEMU-KVM 和 Ceph RBD 的 缓存机制总结 (2)QEMU 的 RBD 块驱动(block driver) (3)存 ...
- AngularJs学习总结-了解基本特性(-)
现在的前端项目中基本上都会用到angularjs框架,之前并不了解这个框架,也是因为最近接手的项目,所以打算好好的学习下它.之前都是搞pc端,现在接手的是移动端的项目,移动端UI框架用的是ionic+ ...
- POJ1160 Post Office[序列DP]
Post Office Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18680 Accepted: 10075 Des ...
- NOIP2011多项式系数[快速幂|组合数|逆元]
题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...
- java 24 - 4 GUI之创建数据转移窗口
需求: 把文本框中的数据,通过点击按钮,转移到文本域中. 同时清空文本框中的数据 代码:(步骤都注释了) public class FrameDemo4 { public static void m ...
- AppStore 上架注意事项及错误修改
1.上架之前首页要配置好发布证书,配置用于发布的配置文件. 2.必须上传3.5英寸和4英寸图片,这两种图片尺寸不能缺. 3.提交的版本必须是在8.0及以上的版本. 4.必须用发布证书,如果提示UUID ...
- MVC,MVP 和 MVVM 的图示
作者: 阮一峰 日期: 2015年2月 1日 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身 ...
- SQL Server日期与字符串之间的转换
本文导读:在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.下面主要就介绍一下SQL Serv ...