浅析常用分词算法的比较与设想

所属分类: 网络编程 / ASP.NET 阅读数: 1127
收藏 0 赞 0 分享

与基于理解的分词算法和基于统计的分词算法相比,基于文本匹配的算法更加通用。基于文本匹配的算法又称之为“机械分词算法”,他是它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功,可识别出一个词。按照扫描方向的不同,文本匹配分词方法可以分为正向匹配和逆向匹配两种;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。

  常用的几种机械分词方法如下:

  1) 正向最大匹配法(由左到右的方向)

  2) 逆向最大匹配法(由右到左的方向)

  3) 最少切分(使每一句中切出的词数最小)。

  其他的还有将上述各种方法相互组合形成的分词算法,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般很少使用。本文中着重讨论正向最大匹配法和逆向最大匹配法。

  由于机械分词算法的准确性取决于算法的准确性与词库完备性两个方面。在本文中设想词库充分大,包含需要的词语。

  一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各种其它的语言信息来进一步提高切分的准确率。

  我们先看两句中文:

  1) 长春市长春节致辞

  2) 长春市长春药店

  我们假使词库中包含如下词语“长春”,“长春市”,“市长”,“春节”,“致辞”,“春药”,“药店”,“春药店”等。

  用正向最大匹配法得到的结果是:

  长春市/长春/节/致辞(分成4个词,其中“节”未匹配到,语义错误)

  长春市/长春/药店(分成3个词,都匹配到,语义正确)

  用逆向最大匹配法得到的结果是:

  长春/市长/春节/致辞(分成4个词,都匹配到,语义正确)

  长春/市长/春药店(分成3个词,都匹配到,语义错误)

  从此,我们可以看到正向最大匹配法和逆向最大匹配法的利弊所在:都能够正确解释部分中文,同时都有一些无法区分。

  是否可以考虑将这两种匹配法结合起来,各取所长呢?答案是肯定的。

  首先,我们对同一个词用正向最大匹配法和逆向最大匹配法分别切词,再将结果进行比较。如切分“长春市长春节致辞”,因为正向最大匹配法有一个词语无法匹配,故选择使用逆向最大匹配法作为结果。

  其次,我们可以引入词频的概念,及每一个词语都会根据其在汉语中出现的概率获得一个词频值。我们对“长春市长春药店”进行两种方法的分词,但是因为逆向最大匹配法得到的“春药店”的词频相比于其他词语的词频要低很多。我们可以认为这种分词方法得到的结果不通用,取正向最大匹配法得结果。

  当然,还可以将其他的一些方法(如扫描标志法,词性检查法等)与这两种匹配法相结合,以获得更好更准确的分词效果。

更多精彩内容其他人还在看

asp.net 虚方法、抽象方法、接口疑问

asp.net 虚方法、抽象方法、接口疑问等说明。
收藏 0 赞 0 分享

c#  操作符?? null coalescing operator

?? "null coalescing" operator 是c#新提供的一个操作符,这个操作符提供的功能是判断左侧的操作数是否是null,如果是则返回结果是右侧的操作数;非null则返回左侧的操作数。
收藏 0 赞 0 分享

.net 反序题目的详细解答第1/2页

在各种答案,以及平时面试过程中,这道题总归会有一些非常典型的错误发生。其中给老赵的感觉也非常有意思,不知其中的“思路”是否如老赵猜测那样。
收藏 0 赞 0 分享

implicitly convert type 'int' to 'short'的原因与解决方法

implicitly convert type 'int' to 'short'的原因与解决方法
收藏 0 赞 0 分享

比较完整的 asp.net 学习流程

好多朋友想学习后台编程语言,但请注意的事,学习后台是个循序渐进的过程,不可能一下就到位,其实不只是asp.net其它的编程语言都需要下面的一些知识。
收藏 0 赞 0 分享

官网 Ext direct包中.NET版的问题

下载了官网的 Ext direct 包进行研究,发现服务器端返回结果存在一点小问题。
收藏 0 赞 0 分享

C# XML操作 代码大全(读XML,写XML,更新,删除节点,与dataset结合等)第1/2页

C#操作XML(读XML,写XML,更新,删除节点,与dataset结合等),以下就是操作XML的所有方法,相信可以满足很大一部份的使用了。
收藏 0 赞 0 分享

c# 连接字符串数据库服务器端口号 .net状态服务器端口号

正常的数据库连接字符串配置,这是在MSSQL服务器端口是1433(默认)的情况下。
收藏 0 赞 0 分享

ASP.NET 路径问题的解决方法

相对路径和绝对路径在ASP.NET中可以用~/来解决.
收藏 0 赞 0 分享

asp.net TemplateField模板中的Bind方法和Eval方法

在TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现。以下是Bind方法的格式,Eval的格式也是和Bind一样的。 Bind("列的名称","显示的格式文")
收藏 0 赞 0 分享
查看更多