转一个,中文分词方法概述
2010-07-09 13:02
369 查看
感兴趣的可以看看自然语言理解,很好的图书,可以了解中文的处理过程,
动态规划的中文分词方法
中文分词方法有很多,其中基于词典的分词方法有:
基于模式匹配的方法:(速度快)
正向最大匹配、逆向最大匹配法、双向匹配法
基于规则的方法:(索引压缩的效果最好)
最少分词法
基于统计的分词方法有:
统计语言模型分词(2-gram,3-gram)
串频统计的汉语自动分词
除了这些基本的方法,为了获得最佳的效果,也可以引入动态规划的方法获得最优解。
设句子P = W0W1W2?Wn , 其中Wi (0≤i≤n) 为句子P中的第i 个汉字。Si(0≤i≤n+1)为句子的第i个间隙(切分位置)
那么一个句子P理论上有多少种分词法呢?
分词分法总数的通项:F(n)表示一个有n个单词的句子包含的全部不同的分词方法。
F(n)=1+ F(n-1)+F(n-2)+F(n-3)+F(n-4)+..F(1)
F(1)=1
F(2)=2
F(3)=4
F(4)=8
…
F(n)=2F(n-1)
则F(n)=2n-1
如果将词频看做是距离,则求解最佳切分方法等价于在2n-1的解空间中寻找1种最佳的切分方法使得路径最短。为此我们举个例子:
早起先刷牙
图中红圈为切分点,切分点之间的连线表示确定的一种分词
图中给出了三种分法,分别是[早][起][先][刷][牙]、[早起][先][刷牙]和[早][起先][刷牙]
假定我们有这样一个字频和词频表,分别如下
早 400
早起 100
起 500
起先 150
先 500
刷 300
刷牙 100
牙 500
则以上三种切分法的代价分别为
[早][起][先][刷][牙]:400+500+500+300+500 = 2200
[早起][先][刷牙]:100+500+100 = 700
[早][起先][刷牙]:400+150+100 =750
因此选用第2种切分法。
动态规划的伪代码大致为:
Segment(S,low,high,cost,last)
{
Mincost = MAX;
If(high-low<=1)
{
mincost = Costof(cost,L(low,high-low)); //其中L(start,length)的含义表示从start开始从P中取length长度的文本,Costof为该段文本的字频,或者词频,如果不存在则为无穷大;如果cost数组中已经计算过,则不重复计算,直接取值返回。
cost[low][high] = mincost;
Return mincost;
}
for(i = low+1 to high )
{
a = Segment(S,low,i,cost,last);//为了简单这里做了精简,事实上如果a返回的是无穷大,则后面不用继续计算,直接跳出,因为这种情况下无论如何也不可能是最优解,可以直接剪枝。
b = Segment(S,i,high,cost,last);
if(a+b<Mincost)
{
Mincost = a + b;
Cost[low][high]=Mincost;
Last[low][high] = i;//Last记录最佳切分点
}
}
ExtractSegmentPos(Last,low,high);//该函数是将切分点一一展开。
}
ExtractSegmentPos(Last,low,high)
{
SegPos=MAX;
if(high-low>1)
{
If(Last[low][high]>0)
{
SegPos = Last[low][high];
output(SegPos);
}
else
{
return;
}
}
ExtractSegmentPos(Last,low, SegPos);
ExtractSegmentPos(Last, SegPos,high);
}
参考文献
[1] 孙 晓, 黄德根 基于动态规划的最小代价路径汉语自动分词 [J]小型微型计算机系统 第27 卷第3 期 2006 年3 月
其他推荐阅读
http://www.leadbbs.com/MINI/default.asp?230-2682632-0-0-0-0-0-a-.htm
http://blog.csdn.net/pennyliang/archive/2010/07/07/5717498.aspx
本文http://blog.csdn.net/pennyliang/archive/2010/07/07/5717498.aspx来自CSDN博客,转载请标明出处:http://blog.csdn.net/pennyliang/archive/2010/07/07/5717498.aspx
动态规划的中文分词方法
中文分词方法有很多,其中基于词典的分词方法有:
基于模式匹配的方法:(速度快)
正向最大匹配、逆向最大匹配法、双向匹配法
基于规则的方法:(索引压缩的效果最好)
最少分词法
基于统计的分词方法有:
统计语言模型分词(2-gram,3-gram)
串频统计的汉语自动分词
除了这些基本的方法,为了获得最佳的效果,也可以引入动态规划的方法获得最优解。
设句子P = W0W1W2?Wn , 其中Wi (0≤i≤n) 为句子P中的第i 个汉字。Si(0≤i≤n+1)为句子的第i个间隙(切分位置)
那么一个句子P理论上有多少种分词法呢?
分词分法总数的通项:F(n)表示一个有n个单词的句子包含的全部不同的分词方法。
F(n)=1+ F(n-1)+F(n-2)+F(n-3)+F(n-4)+..F(1)
F(1)=1
F(2)=2
F(3)=4
F(4)=8
…
F(n)=2F(n-1)
则F(n)=2n-1
如果将词频看做是距离,则求解最佳切分方法等价于在2n-1的解空间中寻找1种最佳的切分方法使得路径最短。为此我们举个例子:
早起先刷牙
图中红圈为切分点,切分点之间的连线表示确定的一种分词
图中给出了三种分法,分别是[早][起][先][刷][牙]、[早起][先][刷牙]和[早][起先][刷牙]
假定我们有这样一个字频和词频表,分别如下
早 400
早起 100
起 500
起先 150
先 500
刷 300
刷牙 100
牙 500
则以上三种切分法的代价分别为
[早][起][先][刷][牙]:400+500+500+300+500 = 2200
[早起][先][刷牙]:100+500+100 = 700
[早][起先][刷牙]:400+150+100 =750
因此选用第2种切分法。
动态规划的伪代码大致为:
Segment(S,low,high,cost,last)
{
Mincost = MAX;
If(high-low<=1)
{
mincost = Costof(cost,L(low,high-low)); //其中L(start,length)的含义表示从start开始从P中取length长度的文本,Costof为该段文本的字频,或者词频,如果不存在则为无穷大;如果cost数组中已经计算过,则不重复计算,直接取值返回。
cost[low][high] = mincost;
Return mincost;
}
for(i = low+1 to high )
{
a = Segment(S,low,i,cost,last);//为了简单这里做了精简,事实上如果a返回的是无穷大,则后面不用继续计算,直接跳出,因为这种情况下无论如何也不可能是最优解,可以直接剪枝。
b = Segment(S,i,high,cost,last);
if(a+b<Mincost)
{
Mincost = a + b;
Cost[low][high]=Mincost;
Last[low][high] = i;//Last记录最佳切分点
}
}
ExtractSegmentPos(Last,low,high);//该函数是将切分点一一展开。
}
ExtractSegmentPos(Last,low,high)
{
SegPos=MAX;
if(high-low>1)
{
If(Last[low][high]>0)
{
SegPos = Last[low][high];
output(SegPos);
}
else
{
return;
}
}
ExtractSegmentPos(Last,low, SegPos);
ExtractSegmentPos(Last, SegPos,high);
}
参考文献
[1] 孙 晓, 黄德根 基于动态规划的最小代价路径汉语自动分词 [J]小型微型计算机系统 第27 卷第3 期 2006 年3 月
其他推荐阅读
http://www.leadbbs.com/MINI/default.asp?230-2682632-0-0-0-0-0-a-.htm
http://blog.csdn.net/pennyliang/archive/2010/07/07/5717498.aspx
本文http://blog.csdn.net/pennyliang/archive/2010/07/07/5717498.aspx来自CSDN博客,转载请标明出处:http://blog.csdn.net/pennyliang/archive/2010/07/07/5717498.aspx
相关文章推荐
- 一个基于搜索的中文分词方法( A Search-based Chinese Word Segmentation Method)
- 我又发现一个直接就能安装中文小红帽的方法
- Python结巴中文分词工具使用过程中遇到的问题及解决方法
- Lucene下引入ICTCLAS进行中文分词的实现方法
- Python中文分词实现方法(安装pymmseg)
- 一个隐马尔科夫模型的应用实例:中文分词
- struts资源文件的中文解决方法,附带Struts1.2动态FormBean加验证功能的一个例子
- Ubuntu下使用Java调用IKAnalyzer中文分词程序失效的解决方法
- 从最底层实现汉字输出,一个中文启动界面的实现方法
- 中文分词器分词效果的评测方法
- 7步从零开始搭建一个SOLR支持中文分词【solr3.3】
- Lucene下引入ICTCLAS进行中文分词的实现方法
- 一个div中文字居中的方法
- 数据库分词查询的优缺点以及英文和中文各自的分词方法(二)
- JFreeChart 中文乱码 一站式解决 一个方法搞定
- 一个超级简单的在线中文分词服务
- php实现scws中文分词搜索的方法
- 一个简单的中文分词
- poi的autoSizeColumn方法对全角或者说中文支持不好的一个解决办法