php专区

 首页 > php专区 > PHP进阶 > 算法 > lucene smartcn原理(图文)

lucene smartcn原理(图文)

分享到:
【字体:
导读:
         摘要:Smartcn分词器是ictclas简化功能的java版 Smartcn分词三步:1)原子切分;2)找出原子之间所有可能的组词方案;3)N-最短路径中文词语粗分三步。 例如:“他说的确实在理”这句话。 1)原子切分的目的是完成单个汉字的切分。经过原子切分后变成“始#...

lucene smartcn原理(图文)

Smartcn分词器是ictclas简化功能的java版

Smartcn分词三步:1)原子切分;2)找出原子之间所有可能的组词方案;3)N-最短路径中文词语粗分三步。

例如:“他说的确实在理”这句话。

1)原子切分的目的是完成单个汉字的切分。经过原子切分后变成“始##始/他/说/的/确/实/在/理/末##末”。

2)然后根据“词库字典coredict”找出所有原子之间所有可能的组词方案。经过词库检索后,该句话变为“始##始/他/说/的/的确/确/确实/实/实在/在/在理/理/末##末”。

0_1276431257E8bO

3)N-最短路径中文词语粗分,smartCN用的是1-最短路径。首先我们要找出这些词之间所有可能的两两组合的距离(这需要检索BigramDict词典库,图2的权值)。

0_12764312816PZk0_12764313042Ja1

用动态规划的方法容易求得出最短路径:

例如从节点0到5消耗是1+2+3+5 = 3.3+2.2+4.1+4.1 = 13.7

从节点0到4消耗是1+2+4 = 3.3+2.2+7.1 = 12.6

节点7的消耗是min(5->7, 4->7) = min(13.7+11.6 , 12.6 + 11.5) = 28.1 路径4->7

...

求出最短路径,就找出了分词短句的结果。

总结一下smartcn的核心:coredict用来存词,用来扩展单字。

Bigramdict用来存跳转频率。最后用最短路径算法求最佳切分方式。Bigramdict怎么来的,从训练语料里统计出来的。最短路径求解体现了一定的语义分析,代价就是Bigramdict需要训练。

Smartcn不能扩展词库,因为Bigramdict中没有对应的关联,如果要扩展得两个一起。

写的有点仓促,蛮多精华没介绍到,想看更多细节可以看这里

http://www.ictclas.org/content_c_005.html

http://www.cnblogs.com/zhenyulu/articles/668035.html

lucene smartcn原理(图文)
分享到:
计算机专业的学生必须掌握的五门课程
计算机专业的学生必须掌握的五门课程计算机专业概念有点大。就计算机科学与技术专业而言,以下这些是必修的: 1、计算机组成原理(包括先修课程“数字逻辑与数字系统”,简称“数电”):这是一门硬件基础课,学完后你能清楚的知道如何从用最简单的数字元件,像搭积木一样构成整个计算机系统,那就算及格了。 2、线性代数,...
SmartChineseAnalyzer 源码分析
SmartChineseAnalyzer 源码分析smartcn是lucene自带的一个中文分词工具,它源自中科院的ICTCLAS中文分词系统。关于ICTCLAS的算法研究,可以参考这里。SmartChineseAnalyzer里的行为分析,可以从reusableTokenStream或tokenStream方法开始入手。其中前者可以重复使用以提高性能(简单看一下,像是有些实例放到了ThreadLocal...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……