开源啦~~ 傻鸡鸡 分词程序 Beta 0.1版

来源:互联网 发布:淘宝电脑配件能买么 编辑:程序博客网 时间:2024/09/21 06:19

       傻鸡鸡 分词程序是用 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、弄个可用的基础词典

.......