Yaha分词库

前言

因为想弄一个小小的电影搜索站,以及想提取某一个QQ技术群聊天的关键字与自动生成关键的聊天记录的摘要,所以研究了不少分词库,以及提取关键字,自动生词,自动摘要等的算法实现。整个研究过程非常有意思,其中的一些小的代码组件可在这里得到:http://www.oschina.net/code/list_by_user?id=1180874

期间在使用Whoosh与一些分词库结合使用的时候,大体不错,但总是出现各种与个人不适应的地方。比如python的结巴分词,感觉这个项目的作者很不错,开发也挺认真,效果也还可以。但在一些share host下加载字典直接超出内存范围,消耗的内存太大;同时测试了HMM模型,感觉只能发现两个两个的词,对新词的发现效果不是很好。从而萌生了想实现一个方便大家去定制的分词库——哑哈分 词

可定制的分词库——Yaha(哑哈)分词

在线测试地址:http://yaha.v-find.com/ 部署于GAE yahademo.appspot.com

Yaha分词主要特点是把分词过程分成了4个阶段,每个阶段都可以让用户加入自己的一些定制,以面向不同的用户需求。这是一个最简单真白的示例:

# -*- coding=utf-8 -*-
import sys, re
from yaha import Cuttor, RegexCutting, SurnameCutting2, SuffixCutting

str = '唐成真是唐成牛的长寿乡是个1998love唐成真诺维斯基'
cuttor = Cuttor()

# Get 3 shortest paths for choise_best
#cuttor.set_topk(3)

# Use stage 1 to cut english and number
cuttor.set_stage1_regex(re.compile('(\d+)|([a-zA-Z]+)', re.I|re.U))

# Or use stage 2 to cut english and number
#cuttor.add_stage(RegexCutting(re.compile('\d+', re.I|re.U)))
#cuttor.add_stage(RegexCutting(re.compile('[a-zA-Z]+', re.I|re.U)))

# Use stage 3 to cut chinese name
#surname = SurnameCutting()
#cuttor.add_stage(surname)

# Or use stage 4 to cut chinese name
surname = SurnameCutting2()
cuttor.add_stage(surname)

# Use stage 4 to cut chinese address or english name
suffix = SuffixCutting()
cuttor.add_stage(suffix)

seglist = cuttor.cut(str)
print ','.join(list(seglist))

#seglist = cuttor.cut_topk(str, 3)
#for seg in seglist:
# print ','.join(seg)

阶段讲解

  1. stage 1是在分句中实现,通过正则可直接将数字或英文单词分成独立的词,生成独立的这些词不再参与下一步的分词。
  2. stage 2在创建有向无环图之前实现,对分句进行预扫描,加入一些可能形成的词,并赋予一定的概率。
  3. stage 3在创建有向无环图期间实现,从字典得到词的概率,或通过一些匹配模式得到可能的词,赋予一定概率。
  4. stage 4在得到有向无环图的最大概率之后(程序实现当中是最短路径),对一些不能成词的单字再继续进行处理;或得到最短的多条路径之后,根据用户的兴趣得到最终的一条路径。若用户有兴趣,可以在这一步实现对词性的分析。

期望

这个Yaha分词,期望它能对搜索,或对文本分析,以及一些博客用户有所帮助。所以计划还会加入关键字提取,文章摘要,新词分现等功能。分词,英文单词,人名发现,地名发现都已经得到实现。其它各种功能会在陆续开发当中,有兴趣的同学可以参与。

转载于:https://my.oschina.net/dancing/blog/155223

"哑哈"中文词,更快或更准确,由你来定义。通过简单定制,让词模块更适用于你的需求。 "Yaha" You can custom your Chinese Word Segmentation efficiently by using Yaha 基本功能: 精确模式,将句子切成最合理的词。 全模式,所有的可能词都被切成词,不消除歧义。 搜索引擎模式,在精确的基础上再次驿长词进行切,提高召回率,适合搜索引擎创建索引。 备选路径,可生成最好的多条切词路径,可在此基础上根据其它信息得到更精确的词模式。 可用插件: 正则表达式插件 人名前缀插件 地名后缀插件 定制功能。词过程产生4种阶段,每个阶段都可以加入个人的定制。 附加功能: 新词学习功能。通过输入大段文字,学习到此内容产生的新老词语。 获取大段文本的关键字。 获取大段文本的摘要。 支持用户自定义词典 Algorithm 核心是基于查找句子的最大概率路径来进行词。 保证效率的基础上,对词的各个阶段进行定义,方便用户添加属于自己的词方法(默认有正则,前缀名字与后缀地名)。 用户可自定义使用动态规划或Dijdstra算法得到最优的一条或多条路径,再次可根据词性(中科大ictclas的作法)等其它信息得获得最优路径。 使用“最大熵”算法来实现对大文本的新词发现能力,很适合使用它来创建自定义词典,或在SNS等场合进行数据挖掘的工作。 相比已存在的结巴词,去掉了很消耗内存的Trie树结构,以及新词发现能力并不强的HMM模型(未来此模型可能当成一个备选插件加入到此模块)。 目前状态 以上提到的核心部以及基础功能都已得到实现。不过一些细节正在实现当中,目前还未发布版本。 一些片段的代码可以从我的代码享得到:http://www.oschina.net/code/list_by_user?id=1180874 标签:Yaha  中文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值