php分词
php备忘
php分词在某些需求中还是很重要的,特开一贴来备忘一下分词的东西。
目前,分词的在线api很多,由于担心api挂掉,所以本网站并没有用开放的api去做分词,而是用的SCWS自动获取关键词
下面是
调用:
require_once('./Pscws/Pscws.php');
$pscws = new Pscws();
$pscws->set_dict('./Pscws/scws/dict.utf8.xdb');
$pscws->set_rule('./Pscws/scws/rules.utf8.ini');
$pscws->set_ignore(true);
$pscws->send_text($title);
$words = $pscws->get_tops(5);
$tags = array();
$tags[] = $title;
foreach ($words as $val) {
$tags[] = $val['word'];
}
$pscws->close();
return $tags;还有一个比较好的是discuze关键词提取 api
代码:
public static function discuz ($title = '', $content = '')
{
$subjectenc = rawurlencode(strip_tags($title));
$messageenc = rawurlencode(strip_tags(preg_replace("/\[.+?\]/U", '', $content)));
$data = @implode('', file("http://keyword.discuz.com/related_kw.html?title=$subjectenc&content=$messageenc&ics=utf-8&ocs=utf-8"));
if ($data) {
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $data, $values, $index);
xml_parser_free($parser);
$kws = array ();
foreach ($values as $valuearray) {
if ($valuearray['tag'] == 'kw' || $valuearray['tag'] == 'ekw')
$kws[] = trim($valuearray['value']);
}
$return = '';
if ($kws) {
foreach ($kws as $kw) {
$kw = CHtml::encode(strip_tags($kw));
$return .= $dot.$kw ;
$dot = ',';
}
$return = trim($return);
}
return $return;
}
}测试:不同于使用自己的服务器进行分词,Discuz!在线中文分词服务是基于API返回分词结果的。在项目中,我们只需要一个函数即可方便地进行分词、关键词提取。
结果:
Array( [state] => success [message] => 成功获取 [datas] => 服务器,关键词,在线,中文,项目)
