Thinkphp 3.2 中词分词 加权搜索
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Thinkphp 3.2 中词分词 加权搜索,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1927字,纯文字阅读大概需要3分钟。
内容图文
![Thinkphp 3.2 中词分词 加权搜索](/upload/InfoBanner/zyjiaocheng/1133/b6cd8599e6d8471cbfd5803f85301b0f.jpg)
原文地址:http://www.cnblogs.com/kekukele/p/4544349.html
前段时间,利用业余时间做了一个磁力搜索的网站Btdog,其中使用到了简单的中文分词与加权搜索,在这里分享给大家,供大家参考。
在我的网站中,中文分词使用的是SCWS分词系统,这个分词系统提供PHP两种使用方式:一种是你可以采用源码安装,具体安装步骤请参考这里;
另外一种是使用其提供的API接口,具体方法参考这里。
下面,我们假设你已经掌握了SCWS的使用,事实上,其使用也非常简单,若你不会其使用,也不影响本文下面的阅读。
SCWS系统中其每个分好的词包括以下属性/键值:
- word 词的内容
- off 该词在未分词文本中的偏移位置
- idf 该词的 IDF 值
- attr 词性 (北大标注格式) 参见这里。
在这里我们重点介绍下分词属性中的idf,这个是我们在我们的分词算法中需要用到的。
IDF全称inverse document frequency(逆向文档频率)是一个词普遍重要性的度量,某一特定词的IDF值,用总文件数除以包含该词的文章数量,再将得到的商取对数(log)。计算公式:IDF = log(D/Dt),D为文章总数,Dt为该词出现的文章数量。IDF的主要思想是:如果包含词条t的文档越少,也就是Dt越小,IDF越大,则说明词条t具有很好的类别区分能力。
我们举例说明下,如 搜索内容 ”复仇者的联盟“,其SCWS的分词结果如下:
可以看出,其分词结果中,关键词”复仇者“的idf为9.06,最具区分能力,而关键词”的“的idf值为0,基本没有区分能力,”联盟“的idf为4.34也具有较强的区别能力。因此,我们在我们的分词搜索中,可以简单地使用idf值作为加权排序的依据。
在scws分词系统中,其idf的取值为0-10,因此在我们下面给出的算法中,我们把内容全文匹配的权重设为10,即最大。其他分词后关键词的权重值设为其idf值,然后根据权重大小将结果逆序排列。这要我们就实现了简单的中文分词加权排序。核心代码具体如下:
//@param:需要分词的内容
//Return:mysql查询条件字符串,加权排序字符串,关键词
privatefunction split_words($text){ $split_words = scws_new(); $split_words->set_charset(‘utf-8‘); $split_words->set_ignore(true); $split_words->set_dict(‘/usr/local/scws/etc/dict.utf8.xdb‘); $split_words->set_rule(‘/usr/local/scws/etc/rules.utf8.ini‘); $split_words->send_text($text); $weight=10; $condition[‘where‘] = "name LIKE ‘%".$text."%‘"; $condition[‘order‘] = "(CASE WHEN name LIKE ‘%".$text."%‘ THEN $weight ELSE 0 END)"; //设置全文匹配最大权重while ($words_result = $split_words->get_result()) { foreach($words_resultas$word_arr){$condition[‘where‘] .= " OR name LIKE ‘%".$word_arr[‘word‘]."%‘";
//设置分词后关键词的权重为其idf的值
$condition[‘order‘] .= " + (CASE WHEN name LIKE ‘%".$word_arr[‘word‘]."%‘ THEN ".$word_arr[‘idf‘]." ELSE 0 END)"; $condition[‘keywords‘][$cnt++] = $word_arr[‘word‘]; } } $split_words->close(); return$condition; }
当然,更复杂的分词还要考虑词的词频TF,不过即使简单的这样,我们也基本能达到比较好的效果了,具体效果,大家可以到http://btdog.com.cn体验下。
原文:http://www.cnblogs.com/kekukele/p/4544349.html
内容总结
以上是互联网集市为您收集整理的Thinkphp 3.2 中词分词 加权搜索全部内容,希望文章能够帮你解决Thinkphp 3.2 中词分词 加权搜索所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。