本文实例讲述了php实现scws中文分词搜索的方法。分享给大家供大家参考,具体如下:
1、4个文件(本站下载地址。)解压后,放到一个地方 eg:E:/wamp/scws
2、php.ini 中配置
1
2
3
|
extension = php_scws.dll
scws. default .charset = utf8 //配置默认的编码方式
scws. default .fpath = "E:/wamp/scws" //加压后文件的路径
|
3、使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$so = scws_new();
$so ->set_charset( 'utf8' ); //编码
// 这里没有调用 set_dict 和 set_rule 系统会自动试调用 ini 中指定路径下的词典和规则文件
$so ->add_dict( ini_get ( 'scws.default.fpath' ) . '/dict.utf8.xdb' );
//$so->add_dict('./dd.txt',SCWS_XDICT_TXT);
$so ->set_rule( ini_get ( 'scws.default.fpath' ) . '/rules.utf8.ini' );
$so ->set_duality(0); //散字二元
$so ->set_ignore(0); //忽略标点符号
$so ->set_multi(0);
$wd = '要搜索的内容' ;
$so ->send_text( $wd );
while ( $tmp = $so ->get_result())
//遍历后即得到字符串分割后的内容,
//根据得到的内容分别到数据库中查找(like匹配)
{
}
|
亲自试验了一下如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns= "http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" />
<title>test</title>
</head>
<body>
<?php
function search( $keywords , $table , $key1 , $key2 ){
// (要查找的字符串,表名,字段一,字段二)如果就一个字段的话,$key2='';
$arr = array ();
$str = array ();
if ( preg_match( "/^[^\x80-\xff]+$/" , $keywords )){ //判断keywords是否全为英文,全为英文的话按照字符串切割处理
$str1 = explode ( ' ' , $keywords ); //先按照空格切割
foreach ( $str1 as $key => $value )
{
$str2 = explode ( ',' , $value ); //,切割
foreach ( $str2 as $k => $v )
{
$str3 = explode ( '.' , $v ); //。切割
foreach ( $str3 as $kk => $vv )
{
array_push ( $arr , $vv ); //处理完后,返回一个数组
}
}
}
} else { //对中文的分词处理
$so = scws_new();
$so ->set_charset( 'utf8' );
// 这里没有调用 set_dict 和 set_rule 系统会自动试调用 ini 中指定路径下的词典和规则文件
$so ->add_dict( ini_get ( 'scws.default.fpath' ) . '/dict.utf8.xdb' );
$so ->set_rule( ini_get ( 'scws.default.fpath' ) . '/rules.utf8.ini' );
$so ->set_duality(0); //散字二元
$so ->set_ignore(0); //忽略标点符号
$so ->set_multi(0);
$so ->send_text( $keywords );
while ( $tmp = $so ->get_result()) //得到一个数组,里面包含词组和标点符号
{
foreach ( $tmp as $key => $value )
{
$value = $value [ "word" ];
if (preg_match( "/^[一-龥]{6,21}$/" , $value )) //去除标点符号
{
array_push ( $arr , $value );
}
}
}
}
foreach ( $arr as $key => $value ) //便利得到的数组,到数据库中匹配
{
if ( $key2 != '' )
{
$sql = "select * from `$table` where `$key1` like '%$value%' or `$key2` like '%$value%'" ;
} else {
$sql = "select * from `$table` where `$key1` like '%$value%'" ;
}
$query =mysql_query( $sql );
array_push ( $str , $query );
}
return $str ;
}
include ( 'conn.php' );
$keywords = "哈哈lsd djk,hdjs dd" ;
$table = 'two_key' ;
$key1 = 'address' ;
$key2 = '' ;
$query =search( $keywords , $table , $key1 , $key2 );
foreach ( $query as $key => $value )
{
while ( $row =mysql_fetch_array( $value ))
{
echo $row [id]. '----' . $row [name]. '-----' . $row [address]. '<br>' ;
}
}
?>
</body>
</html>
|
希望本文所述对大家PHP程序设计有所帮助。