PHP中文分词中代码共享的简单实现
当然,本文不是要研究中文搜索引擎,而是要与PHP共享一个站点搜索引擎。我用的是中科院的ICTCLAS分词,计算所的开源版本。还有一个开源的竹子,我会遵循工具以后。
从ICTCLAS是一个不错的选择,因为它的算法被广泛传播,有一个开放的学术文献,具有简单的编译和更少的依赖库,但目前只有C / C++,java,和代码C #版本可用,并且有没有代码的PHP版本。如何这样做可以学习C和C++源和学术文献,然后开发一个PHP版本。不过,我想使用进程间通信要调用的C / C + +版本的PHP代码的可执行文件。
源代码下载后,将直接对ICTCLAS用C++开发库和编译环境的机器。它的Makefile脚本有错误,和代码执行测试不添加'。当然,不喜欢Windows ,手术很成功,但这并不影响编译结果。
用于中文分词的PHP类如下。我们用proc_open()函数执行的分词程序,并通过管道及其相互作用,我们输入要分割和分割结果的文本阅读。
复制代码代码如下所示:
< PHP
类NLP {
私有静态cmd_path美元;
不要以///结尾。
静态函数set_cmd_path($路径){
自::cmd_path美元= $路径;
}
私有函数CMD($ STR){
descriptorspec美元=阵列(
0 =数组(管道
1 =数组(管道
);
美元:美元cmd_path CMD =自我。 / ICTCLAS ;
过程= proc_open美元($ CMD,descriptorspec美元,$管);
如果(is_resource(合过程)){
$str = iconv('utf-8 ','gbk,$str);
fwrite(合管{ 0 },$str);
输出= stream_get_contents美元($管{ 1 });
Fclose(合管{ 0 });
Fclose(合管{ 1 });
return_value美元= proc_close(合过程);
}
*
美元=printf命令输入的|美元。自::cmd_path美元 / ICTCLAS ;
执行($ CMD,$输出,RET);
输出=连接()
* /
输出=配平(输出);
输出= iconv('gbk美元,美元'utf-8,输出);
返回$输出;
}
*做一个分词并返回一个单词表。
* /
功能标记($str){
$ =数组();
输出=;
如果($输出){
PS = preg_split美元( / /+,$输出);
foreach($ PS为P){
列表(美元,标签)=(爆炸,$ P);
$ =数组(
赛格= $赛格,
标签,
);
$ $;
}
}
返回$令牌;
}
}
NLP::set_cmd_path(dirname(__file__));
>
它易于使用(确保ICTCLAS编译好的可执行文件和字典是在当前目录):
复制代码代码如下所示:
< PHP
require_once('nlp。php);
var_dump(NLP::标记(你好,世界!;
>