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] => 服务器,关键词,在线,中文,项目)