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

 更新时间:2021年9月22日 10:13  点击:2153

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

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

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

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

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

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

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

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

  我们先看两句中文:

  1) 长春市长春节致辞

  2) 长春市长春药店

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

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

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

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

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

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

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

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

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

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

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

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

[!--infotagslink--]

相关文章

  • C# List 排序各种用法与比较

    这篇文章主要介绍了C# List 排序各种用法与比较的相关资料,需要的朋友可以参考下...2020-06-25
  • Shell字符串比较相等、不相等方法小结

    这篇文章主要介绍了Shell字符串比较相等、不相等方法小结,本文直接给出代码,但代码中含有大量注释,需要的朋友可以参考下...2020-07-11
  • DOS比较运算符(LSS,LEQ,GTR,GEQ,EQU,NEQ)

    这篇文章主要介绍了DOS比较运算符(大于、小于、等于)等,主要是用于判断文件日期大小等,方便后续操作...2021-09-12
  • golang 字符串比较是否相等的方法示例

    这篇文章主要介绍了golang 字符串比较是否相等的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-21
  • Python实现快速大文件比较代码解析

    这篇文章主要介绍了Python实现快速大文件比较代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-05
  • 浅析常用分词算法的比较与设想

    这篇文章介绍了常用分词算法的比较与设想,有需要的朋友可以参考一下...2021-09-22
  • 关于C++中定义比较函数的三种方法小结

    下面小编就为大家带来一篇关于C++中定义比较函数的三种方法小结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
  • mysql中varchar类型的日期进行比较、排序等操作的实现

    在mysql使用过程中,日期一般都是以datetime、timestamp等格式进行存储的,但有时会因为特殊的需求或历史原因,日期的存储格式是varchar,那么应该怎么进行比较和排序等问题,本文就来介绍一下...2021-11-14
  • C语言字符串大小比较

    本文给大家分享给大家的是C语言的字符串大小比较的函数,有需要的小伙伴可以参考下。...2020-04-25
  • Perl实现高水线算法(解决多值比较问题方法)

    这篇文章主要介绍了Perl实现高水线算法(解决多值比较问题方法),从本文代码示例中还可以学习到数组遍历、函数写法、函数调用等知识,需要的朋友可以参考下...2020-06-29
  • C# 如何实现一个基于值相等性比较的字典

    这篇文章主要介绍了C# 如何实现一个基于值相等性比较的字典,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-02-01
  • Perl字符串比较和整数比较的区别详解

    这篇文章主要介绍了详解Perl字符串比较和整数比较的区别,需要的朋友可以参考下...2020-06-29
  • .NET CORE中比较两个文件内容是否相同的最快方法

    这篇文章主要给大家介绍了关于.NET CORE中比较两个文件内容是否相同的最快方法,文中通过示例代码介绍的非常详细,对大家学习或者使用.NET CORE具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2021-09-22
  • SQLite字符串比较时的大小写问题解决方法

    这篇文章主要介绍了SQLite字符串比较时的大小写问题解决方法,本文总结了比较字符串时的大小写问题的3种解决方案,需要的朋友可以参考下...2020-07-11
  • C#实现类型的比较示例详解

    这篇文章主要给大家介绍了关于C#实现类型的比较的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
  • Java比较对象大小两种常用方法

    这篇文章主要介绍了Java比较对象大小两种常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-11
  • java 中ArrayList与LinkedList性能比较

    这篇文章主要介绍了java 中ArrayList与LinkedList性能比较的相关资料,需要的朋友可以参考下...2020-04-25
  • Nginx中IF语句实现数学比较功能

    这篇文章主要介绍了Nginx中IF语句实现数学比较功能,即在Nginx中用if判断数字大小,类似编程语言中的逻辑比较,需要的朋友可以参考下...2016-01-27
  • C++对象排序的比较你了解吗

    这篇文章主要为大家详细介绍了C++对象排序的比较,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助...2022-02-25