ThinkPHP 3.2 中文分词 提取关键字

 转载自陕西企尚网络科技有限公司 原文地址点击打开链接

由于业务的需求,公司研发团队正在基于ThinkPHP为底层框架的CMS系统。今天遇到了提取标题中的关键词这一个功能,我们在一起研究了很长时间。决定用Pscws4中文分词开源系统。中建出了一些小小的问题,所以委托小编我在此记录一下,为各位PHPer提供一下参考。


SCWS 中文分词

SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统)。

这是一套基于词频词典的机械式中文分词引擎,它能将一整段的中文文本基本正确地切分成词。 词是中文的最小语素单位,但在书写时并不像英语会在词之间用空格分开, 所以如何准确并快速分词一直是中文分词的攻关难点。

SCWS 采用纯 C 语言开发,不依赖任何外部库函数,可直接使用动态链接库嵌入应用程序, 支持的中文编码包括 GBK、UTF-8 等。此外还提供了 PHP 扩展模块, 可在 PHP 中快速而方便地使用分词功能。

分词算法上并无太多创新成分,采用的是自己采集的词频词典,并辅以一定的专有名称,人名,地名, 数字年代等规则识别来达到基本分词,经小范围测试准确率在 90% ~ 95% 之间, 基本上能满足一些小型搜索引擎、关键字提取等场合运用。首次雏形版本发布于 2005 年底。

第一步:准备好Pscws4资料

下载 XDB 词典文件  【 简体中文(UTF-8)
下载PSCWS4 pscws4-20081221.tar.bz2
下载规则集文件【 rules.tgz

第二步:将下载的文件解压,其中的 dict.utf8.xdb 和 规则集文件 按照下图放置

ThinkPHP 3.2 中文分词 提取关键字_第1张图片

第三步:将解压出来的PSCWS4类Pscws4.class.php 和 xdb_r.class.php 放到 ThinkPHP/Library/Vendor/Pscws下

第四步:在控制器里面实力类。


function get_tags($title,$num){
	import("Vendor.Pscws.Pscws4");
	$pscws = new \PSCWS4('utf8');
	$pscws->set_dict(CONF_PATH . 'etc/dict.utf8.xdb');
	$pscws->set_rule(CONF_PATH . 'etc/rules.utf8.ini');
	$pscws->set_ignore(true);
	$pscws->send_text($title);
	$words = $pscws->get_tops($num);
	$pscws->close();

	$tags = array();
	foreach ($words as $val) {
		$tags[] = $val['word'];
	}
	
	return implode(',', $tags);
}
本来到这个时候就应该做好了,实现我们需要的分词功能了,但是却出现乱码了。这个问题折腾我们技术很长时间,怎么调试都不对,什么文件的读取权限之类的,全部都试一遍都不行。最后只好看源码。最终发现问题
在PSCWS4的构造函数中。

将构造函数修改为: function __construct($charset = 'gbk') { $this->PSCWS4($charset); }

ThinkPHP整合PSCWS4到此完满结束。

你可能感兴趣的:(thinkphp)