本文实例讲述了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程序设计有所帮助。