lijyue925 / ckip-client
针对Laravel Framework优化的中研院断词系统的客户端程序。
Requires
- php: >= 5.3
Requires (Dev)
- phpunit/phpunit: >=3.7.0
- satooshi/php-coveralls: dev-master
This package is not auto-updated.
Last update: 2024-09-28 17:32:28 UTC
README
自然语言处理系统最基本需要让计算机能够分辨文本中词语的意义,才能进一步开发自然语言处理系统的相关算法,其中断词处理便是一个重要的前置技术,而中研院的断词系统便是一个处理中文断词的系统。
重新编写中研院断词系统的客户端程序,主要是为了让有中文断词需求的研究者或程序员可以专注于开发自己的核心算法。中研院官方提供的客户端程序已有很长一段时间没有更新维护,根据我的经验,使用起来非常不愉快,CKIPClient-PHP 可以将这些不愉快都赶走!
中文断词系统还有 Stanford Word Segmenter 这个选择,不过需要先将文本转换成简体字再给 Stanford Word Segmenter 进行断词才会得到比较好的效果,但为了支持国产还是鼓励大家多多使用中研院的断词系统,或许多多使用未来中研院的断词系统会变得越来越好(?)
演示
在线中文断词
注意事项
申请账号
请使用「线上服务申请」进行申请账号的操作,由于中研院断词系统的网页使用 frame 来编写,所以很抱歉我无法直接提供链接,请自行查找「线上服务申请」这个链接。根据经验,申请操作需要几个工作日,只能耐心等待了。
中研院断词系统每天上午六点进行系统维护
请注意中研院断词系统每天上午六点进行系统维护,每次维护期间大概半小时,这段时间请不要执行程序或进行重要的排程工作,否则可能会得到非预期的结果。
不要一次发送大量数据,也不要密集发送数据
这一点是我个人的经验,如果一次发送大量数据,得到的返回 xml 会有不完整,造成 parse error,所以我会先将文章进行断句(利用标点符号断句),再发送给断词系统。也请注意不要密集发送数据给中研院断词系统,否则会被暂时锁定账号。可以在每次发送数据后,让 script sleep 几秒钟,这样就不会被锁定账号了。如何自行断句发送数据给断词系统可以参考:schedule-ckip-test-driver.php
拥有能够执行 PHP 程式的环境
使用 CKIPClient-PHP 必须先在自己的机器上安装好能够执行 PHP 程式的环境。
使用方式
CKIPClient-PHP 提供 CKIPClient.php 作为连接中研院断词系统的接口程序类,ckip-test-driver.php 是一个简单的示例程序,可以直接执行这个程序来观察断词结果。
首先必须先将 CKIPClient.php 类程序引入需要使用断词的 PHP 程序:
require_once "src/CKIPClient.php";
接下来使用「线上服务申请」中取得的 server ip 、 server port 、 username 及 password 初始化 CKIPClient 对象:
$ckip_client_obj = new CKIPClient(
CKIP_SERVER,
CKIP_PORT,
CKIP_USERNAME,
CKIP_PASSWORD
);
然后就可以使用 CKIPClient 对象来处理断词了,将需要断词的文件组成如下格式:
$raw_text = "獨立音樂需要大家一起來推廣,\n".
"歡迎加入我們的行列!\n";
$return_text = $ckip_client_obj->send($raw_text);
上述的示例中,我进行了前处理将文件分段,这样断词出来的效果会比较好,使用一个完整的文件进行断词也可以,但是建议一个句子(标点符号之间的字数)不要超过 80 个字:
$raw_text = "獨立音樂需要大家一起來推廣,歡迎加入我們的行列!";
$return_text = $ckip_client_obj->send($raw_text);
经过上述步骤之后就可以进行返回文件的解析,可以得到文件的断句结果也可以得到文件的断词结果:
取得断句结果
$return_sentences = $ckip_client_obj->getSentence();
print_r($return_sentences);
断句结果会取得一个断句数组:
Array
(
[0] => 獨立(Vi) 音樂(N) 需要(Vt) 大家(N) 一起(ADV) 來(ADV) 推廣(Vt) ,(COMMACATEGORY)
[1] => 歡迎(Vt) 加入(Vt) 我們(N) 的(T) 行列(N) !(EXCLAMATIONCATEGORY)
)
取得断词结果
$return_terms = $ckip_client_obj->getTerm();
print_r($return_terms);
断词结果会取得一个断词数组,其中 term 代表断词, tag 代表断词的词性,如动词、名词等等,详细词性列表可参考中研院断词系统:
Array
(
[0] => Array
(
[term] => 獨立
[tag] => Vi
)
[1] => Array
(
[term] => 音樂
[tag] => N
)
[2] => Array
(
[term] => 需要
[tag] => Vt
)
[3] => Array
(
[term] => 大家
[tag] => N
)
[4] => Array
(
[term] => 一起
[tag] => ADV
)
[5] => Array
(
[term] => 來
[tag] => ADV
)
[6] => Array
(
[term] => 推廣
[tag] => Vt
)
[7] => Array
(
[term] => ,
[tag] => COMMACATEGORY
)
[8] => Array
(
[term] => 歡迎
[tag] => Vt
)
[9] => Array
(
[term] => 加入
[tag] => Vt
)
[10] => Array
(
[term] => 我們
[tag] => N
)
[11] => Array
(
[term] => 的
[tag] => T
)
[12] => Array
(
[term] => 行列
[tag] => N
)
[13] => Array
(
[term] => !
[tag] => EXCLAMATIONCATEGORY
)
)
许可证
在 MIT 许可证 下发布。
联系
如果有任何问题可以与我联系,也欢迎大家帮忙修正 CKIPClient-PHP !
- Twitter: @fukuball
- Gmail: fukuball@gmail.com