傻鸡鸡 分词程序是用 Python2.6+ 语言开发的,可跑平台有: win 、 Linux 、unix 等。 理论上支持所有的语言作为客户端。
傻鸡鸡分词 下载地址:http://download.csdn.net/source/3517192
傻鸡鸡分词程序有什么特点?
1、兼容多平台: win 、 linux、unix 等平台,实测平台有: win、centos、freebsd 。
2、根据不同的平台自动选择异步I/O并发模型: epoll 、 kqueue 。 ps : win 下使用 select
3、能有效利用多核,因为并发模型是以 多进程 + 异步结合。
4、不限语言。如果你要分词的应用是PHP写的 ? Python 写的? JAVA 写的? 随便你~~
5、..... 想不出来了....
疑问? 并发性能如何?
推荐使用 linux 和 unix 系统。因为”傻鸡鸡“分词程序使用的是 异步I/O并发模型 (linux 的 epoll 和 freebsd 的 kqueue )。而且对于多核服务器,也做了处理。能比较有效的利用多核。
如何使用?
傻鸡鸡 分词程序之有两个文件,1、confi.py 2、shajj.py
confi.py 是 配置文件,里面可配置 默认监听端口号、默认启动进程数(建议与服务器内核数相等)、要加载的字典、日志文件,配置文件可以有多个,配置文件名字可自己命名。
#encoding=utf-8
#监听端口
listen_port = 9911
#进程数
default_process = 8
#加载字典文件
load_dict = ['dict_extra_da.txt'] #如果你有多个字典,可以在上面写多个
#日志记录
log_file = 'D:\shajj.txt'
shajj.py 是核心文件,分词靠她了。
首先启动分词程序:
命令: python shajj.py 配置文件名
例如:
#python shajj.py conf
运行以后,需要稍等一会,字典正在加载进内存,只在启动需要。当看到
dict load.....
load dict ok!
字典加载完了以后,那么服务端这边就算完成了。那么我们项目就可以使用这个 傻鸡鸡 来进行分词了
给出一个简单的PHP语言使用例子:
<?php
$search = '我是傻鸡鸡'; //我们要进行分词的句子
$fp = fsockopen("192.168.1.241", 9911); //连接到傻鸡鸡分词,我们配置里监听的是9911端口
fwrite($fp,$search);
$content = '';
while(!feof($fp)){
$content .= fread($fp, 1024);
}
fclose($fp);
echo($content); //打印分词结果
?>
刷下浏览器就可以看到返回的结果是一份 XML (所以为啥说,理论上所有语言都能使用傻鸡鸡分词 哇哈)
<?xml version="1.0" encoding="utf-8" ?>
- <document>
- <word>
<keyword>我是</keyword>
<info>bh</info>
</word>
</document>
看 节点 word :表示的是得到的分词。 info 节点返回的是:这个词的词性(这个可以在字典里面自定义拉:比如名字、比如动词、再比如商家、本地人物等自定义词性)
刚我们要进行分词的句子不是 “ 我是傻鸡鸡”吗 怎么 “傻鸡鸡” 没有返回呢? 因为 “傻鸡鸡” 这个词不存在于字典当中,现在我们在看下字典。我们把“傻鸡鸡”这个也放到字典里面,让她也成为一个词。这样在进行分词的时候。“傻鸡鸡”就被当成词返回了。
我们看下词典是如何定义的:
我是 bh
傻鸡鸡 fenci
瓦萨比 waka
中间可以用空格或者tab隔开。好了。傻鸡鸡 放进了词典。那么我再试一次分词,看如何
<?xml version="1.0" encoding="utf-8" ?>
- <document>
- <word>
<keyword>我是</keyword>
<info>bh</info>
</word>
- <word>
<keyword>傻鸡鸡</keyword>
<info>fenci</info>
</word>
</document>
好了" 傻鸡鸡“ 也返回了。
和php-cgi 相比较下性能。在并发100下,同时开启6进程。同一台服务器看下啥情况:
nginx + php-cgi 。一共开启了6个php-cgi 进程
开始并发:
webbench -c 100 -t 30 http://192.168.1.241/info.php ps: info.php 里面就 phpinfo() 而已
看下考试结果
接下来看下傻鸡鸡的:
开了6个 进程。 其中有一个是wait 父进程,它不干活的~~~收割子进程而已
看下过程如何:
哎呀怎么CPU负载那么大。。。 其实是因为这个服务器问题。这个是普通双核服务器。我们和上面的php-cgi 比对下~ 嗯嗯~淡定淡定
考试成绩如下:
这个只是一个试验版本,存在的问题还是有的。不建议用在生产环境... 有时间我会不断更新和维护D~~
下一版本要解决的问题:
1、字典的 BOM 导致分词异常问题。
2、字典里可以添加注释
3、对于中文英文数字混杂的情况
4、弄个可用的基础词典
.......