PHP+mysql数据库开发搜索功能:中英⽂分词+全⽂检索(MySQL全⽂检索+中⽂分词(。。。
1. PHP+mysql数据库开发类似百度的搜索功能:中英⽂分词+全⽂检索
2. 中⽂分词:
综上:只能使⽤SCMS中⽂分词了。
3. 全⽂检索
a)  MySQL全⽂检索(⽀持英⽂分词)
ii.  需要进⼀步学习MySQL全⽂检索
b) Sphinx:基于SQL的全⽂检索引擎
ii. Sphinx是⼀个基于SQL的全⽂检索引擎,可以结合MySQL,PostgreSQL做全⽂搜索,它可以提供⽐数据库本⾝更专业的搜索功能,使得应⽤程序更容易实现专业化的全⽂检索。Sphinx特别为⼀些脚本语⾔设计搜索API接⼝,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了⼀个存储引擎插件。
i. ⽬前后端服务器只⽀持 UNIX (含Linux/BSD/MacOS等) 操作系统,前端开发包只⽀持 PHP 语⾔。
ii. Xunsearch 可以帮助您建⽴门户/垂直搜索/论坛搜索/WEB站内搜索/⽂档⽂献资料搜索等。
php_scws.dll/Win32 安装说明
1. 根据您当前⽤的 PHP 版本,下载相应已编译好的 php_scws.dll 扩展库。
⽬前⽀持 PHP-4.4.x 和 PHP-5.2.x 系列,下载地址分别为:
php-4.4.x: www.xunsearch/scws/down/php-4.4.x/php_scws.dll
php远程连接mysql数据库
php-5.2.x: www.xunsearch/scws/down/php-5.2.x/php_scws.dll
php-5.3.x: www.xunsearch/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 放到上述⽬录中
词典系列:www.xunsearch/scws/down/scws-dict-chs-gbk.tar.bz2
www.xunsearch/scws/down/scws-dict-chs-utf8.tar.bz2
www.xunsearch/scws/down/scws-dict-cht-utf8.tar.bz2
5. 从 scws 主页上下载规则集⽂件,解压后将 *.ini 放到第 3 步建⽴的⽬录
规则集⽂件压缩包:www.xunsearch/scws/
解压后有三个⽂件分别为 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提供了词库,后解压⾄任意⽂件夹,我解压⾄php安装⽬录下。在命令⾏下进⼊您PHP的安装⽬录,我的⽬录
是”D:/wampServer/wamp/bin/php/php-5.3.29-Win32-VC9-x86“。
<中⽂本格式为:
  # 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也提供了,可以⾃动获得词语的权重值。
  ATTR是词性,也就是标⽰词语是名字、动词、形容词等等词性的。详细的词性标⽰⽅法请看SCWS的说明:
步骤1:执⾏命令⾏,将词库先导出来,⽣成⼀个⽂本⽂件()
命令格式为: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:/
⼏秒后在d:⽬录下我就获得了导出的纯⽂本⽂件。
导⼊词库命令: 命令格式为:php make_xdb_file.php <;要⽣成的.xdb> [导⼊的⽂本⽂件]
php make_xdb_file.php C:/"Program Files"/scws/etc/dict2.xdb d:/
  ⽣成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++;
}
⼜出现新问题:
这个问题还没有解决。导⼊词库失败。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。