注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

偶有所得,记录在此

有分享交流才有进步,永远不要固步自封

 
 
 

日志

 
 

基于 Aho-Corasick 算法实现中文全分词  

2010-06-23 12:19:20|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
项目背景
----------------------------
早先用 Hash 和红黑树实现过一个版本《发布一个敏感词过滤的小项目》 ;后来经同事测试,速度不如一个叫 esmre 的模块快。

花了点时间研究了 esmre 的实现,发现人家采用了 AC 自动机,分词时,根本不需要回溯,效率高很多;不过 esmre 只处理了单字节的字符,对多字节字符支持并不好。

参考了下 esmre 的实现,用 Ac 算法和红黑树重新实现了一个,内部采用 utf-8 编码。

源码包下载及安装
-------------------------------
      http://code.google.com/p/pysoft/downloads/detail?name=acseg-0.1.tar.gz"
      python setup.py install

使用样例
--------------------------------
>>> from acseg import AcIndex
>>> index = AcIndex()
>>> index.add_word("hello")  # 只接受 utf-8 编码,内部不做编码检测
>>> index.add_word("world")
>>> index.fix()
>>> index.full_seg("helloxhellworworld")
['hello', 'world']

采用一网上收集的字典文件
>>> from acseg import AcIndex
>>> index = AcIndex()
>>> index.load_dict("src/word.txt")  # 字典文件只接受 utf-8 编码,每行一个关键词
>>> index.fix()

经典分词测试
>>> result = index.full_seg("工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作")
>>> " ".join(result)
工信 处女 干事 每月 月经 经过 下属 科室 都要 亲口 口交 交代 口交 交换 交换机 技术 技术性 性器 器件 安装 工作

其它信息
-------------------
使用 mem_collector 管理内存,经 Valgrind 检测,无内存泄漏。
欢 迎下载试用,有问题麻烦及时反馈,谢谢。


注:mem_collector 项目
      http://chinaren.wei.blog.163.com/blog/static/13907612920103225325129/


C 语言接口,请参照 src/test.c 文件。


如果有幸被用到,麻烦留言,算是给予鼓励了,我好有动力继续改进,谢谢先。
  评论这张
 
阅读(2198)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017