中文分词原理与实现
2017-09-14 16:42
274 查看
存在意义
中文文本不存在边界,所以中文分词是专业处理中文信息的搜索引擎需首先面对的问题1 Lucene中文切分
StandardTokenizer单子分词CJKTokenizer二元覆盖
CnTokenizer
单子切分问题问题 搜索’上海’ 结果可能‘海上’
二元覆盖可以解决‘上海‘和’海上‘混淆问题 适合小规模搜索网站
中文分词适用于大规模的搜索引擎
1.1 Lucene切分原理
TokenStream类用来进行基本的分词工作,Analyzer类是TokenStream的外围包装类OffsetAttribute属性保存了词的位置信息;TypeAttribute属性保存了词的类型信息
lucene分词流程
不同字段使用列可以用不同用途的分词器
PerFieldAnalyzerWraper aWrapper = new PerFieldAnalyzerWraper(new CnAnalyzer);
aWraper.addAnalyzer(“address”,newCnAnalyzer());
aWraper.addAnalyzer(“companyName”,newCompanyAnalyzer());
1.2 自定义分词器
2 查找词典算法
术语trie取自retrieval,也被称为数字树、字典树或前缀树,是一种有序树数据结构,哈希树的变种。2.1 标准Trie树
2.2 三叉tire树
三叉搜索树(Ternary Serarch Trie)中,每个节点包括一个字符。三叉搜索树只有三个指针:一个指向左边的树;一个指向右边的树;还有一个向下,指向单词的下一个数据单元。
三叉搜索树上二叉搜索树和数字搜索树的混合体。
它有和数字搜索树差不多的速度但是和二叉搜索树一样只需要相当较少的空间
数字搜索树:缺点占空间,优点搜索速度快
二叉搜索树:缺点搜索速度慢,优点省空间
三叉搜索树:优点搜速度快,省空间
3 中文分词原理
中文分词就是对中文断句,消除部分歧义。中文分词子任务:
分词:
词性标志:(POS)名词或者动词等
语义标注:把每个词标准上语义编
词库常见来源:语料库或词典
中文分词的两类方法:
机械匹配的方法:例正向最大长度匹配和逆向最大长度匹配
统计的方法:例概率语义模型分词方法和最大熵的分词方法
(应为汉语的主干成分后置,所以逆向最大长度切分的精度稍高 例:正向最大长度切分‘有意/见/分歧‘ 逆向最大长度切分’有/意见/分歧‘)
机械匹配方法实现: http://blog.csdn.net/worldwindjp/article/details/18085725
8 新词发现
词典中没有,但结合紧密的字或词有可能组成一个新词。可以用信息熵来度量两个词的结合紧密程度。信息熵的一般公式:
9 未登录词识别
在分词时即时发现词表中没有的词叫未登录词常见的未登录词包括人名,地名,机构名
对未登录人名识别有效信息说明:
1未登录词所在上下文.例如:”..教授”这里教授是人名的上下文
2未登录词本身的概率. 例:”刘备”作为人名出现的次数除以人名出现的总次数
可以通过规则匹配来识别未登录词
可以用二元模型或三元模型来整合未登录词本身的概率 和 未登录词所在的上下文这两种信息
扩展标签
自然语言处理,中文信息处理 lucene solr es 基于lucene接口的java版中文分词器资料来源:<<解码搜索引擎>
相关文章推荐
- 机器学习算法原理与编程实现中文文本分词1
- 中文分词原理和实现
- 《解密搜索引擎技术实战:Lucene&Java精华版》---第四章中文分词原理与实现学习笔记(一)
- 中文分词原理和实现
- 记intel杯比赛中各种bug与debug【其四】:基于长短时记忆神经网络的中文分词的实现
- PHP实现模糊搜索中文分词
- PHP 中文分词及全文检索的实现
- 基于hanLP的中文分词详解-MapReduce实现&自定义词典文件
- C# 中文分词算法(实现从文章中提取关键字算法)
- koa使用之中文分词与自动分类推荐的实现
- python 实现中文分词功能
- Linux开发中GSM 中文短信 SMS PDU编码原理及实现
- Java实现敏感词过滤 - IKAnalyzer中文分词工具
- 中文分词、支持向量机代码实现
- Clucene实现中文分词搜索
- 用条件随机场CRF进行字标注中文分词(Python实现)
- [转]用PHP简易实现中文分词
- 中文分词之Java实现使用IK Analyzer实现
- 使用IK Analyzer实现中文分词
- 中文分词Java简单实现