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 ...
随机推荐
- 实现如下类之间的继承关系,并编写Music类来测试这些类。
实现如下类之间的继承关系,并编写Music类来测试这些类. package com.hanqi.test; public class Instrument { //输出弹奏乐器 public void ...
- MongoDB Sharding、库、collection设计学习汇总
sharding设计须考虑的几个因素 Sharding Key的选择 在片键的选择上,最好是能够在字段中选择混合型的片键,大范围的递增健.和随机分布的健组合,如按月份递增.按用户名 ...
- linux rpm 安装和卸载
[root@wang Packages]# mount /dev/cdrom /mnt 挂载 [root@wang Packages]# rpm -ivh zip-3.0-1.el6.x86_64.r ...
- Altium Desiner 警告 adding hidden net
这是因为 一些元件 隐藏了 vcc GND 或者没有使用vcc GND ,用不着它也报警告了. 这里可以将 vcc GND删掉这个管脚.
- CSS background-position 用法详细介绍
语法: background-position : length || length background-position : position || position 取值: length : ...
- web报表工具FineReport常用函数的用法总结(报表函数)
说明:本次总结中,凡是以tableName或viewName作为参数因子的.函数在调用的时候均按照先从私有数据源中查找,然后再从公有数据源中查找的顺序. CLASS CLASS(object):返回o ...
- C++浅析——返回对象的函数
一.原码分析 1.1 测试代码 为了方便查看拷贝构造函数调用过程,自定义了拷贝构造函数,但啥也没干. class CTEST { public: int m_nData; //Method: publ ...
- Java修饰符public,private,protected及默认的区别
Java中访问修饰符public.private.protecte.default的意义讲解:public(接口访问权限): Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属 ...
- 《深入.NET平台和C# 编程》内部测试 笔试题
1:在C#中,关于文件操作相关的类说法正确的是(AB) <选择二项> A:FileInfo类提供了用于操作文件的实例方法 B:File类提供了用于操作文件的静态方法 C:Directory ...
- u3d单词学习plane
plane n.水平: 平面: 飞机: 木工刨