zoukankan      html  css  js  c++  java
  • 【nlp】中文分词基础原则及正向最大匹配法、逆向最大匹配法、双向最大匹配法的分析

    分词算法设计中的几个基本原则:

    1、颗粒度越大越好:用于进行语义分析的文本分词,要求分词结果的颗粒度越大,即单词的字数越多,所能表示的含义越确切,如:“公安局长”可以分为“公安 局长”、“公安局 长”、“公安局长”都算对,但是要用于语义分析,则“公安局长”的分词结果最好(当然前提是所使用的词典中有这个词)

    2、切分结果中非词典词越少越好,单字字典词数越少越好,这里的“非词典词”就是不包含在词典中的单字,而“单字字典词”指的是可以独立运用的单字,如“的”、“了”、“和”、“你”、“我”、“他”。例如:“技术和服务”,可以分为“技术 和服 务”以及“技术 和 服务”,但“务”字无法独立成词(即词典中没有),但“和”字可以单独成词(词典中要包含),因此“技术 和服 务”有1个非词典词,而“技术 和 服务”有0个非词典词,因此选用后者。

    3、总体词数越少越好,在相同字数的情况下,总词数越少,说明语义单元越少,那么相对的单个语义单元的权重会越大,因此准确性会越高。

    下面详细说说正向最大匹配法、逆向最大匹配法和双向最大匹配法具体是如何进行的:

    先说说什么是最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描)。例如:词典中最长词为“中华人民共和国”共7个汉字,则最大匹配起始字数为7个汉字。然后逐字递减,在对应的词典中进行查找。

    下面以“我们在野生动物园玩”详细说明一下这几种匹配方法:

    1、正向最大匹配法:

    正向即从前往后取词,从7->1,每次减一个字,直到词典命中或剩下1个单字。

    第1次:“我们在野生动物”,扫描7字词典,无

    第2次:“我们在野生动”,扫描6字词典,无

    。。。。

    第6次:“我们”,扫描2字词典,有

    扫描中止,输出第1个词为“我们”,去除第1个词后开始第2轮扫描,即:

    第2轮扫描:

    第1次:“在野生动物园玩”,扫描7字词典,无

    第2次:“在野生动物园”,扫描6字词典,无

    。。。。

    第6次:“在野”,扫描2字词典,有

    扫描中止,输出第2个词为“在野”,去除第2个词后开始第3轮扫描,即:

    第3轮扫描:

    第1次:“生动物园玩”,扫描5字词典,无

    第2次:“生动物园”,扫描4字词典,无

    第3次:“生动物”,扫描3字词典,无

    第4次:“生动”,扫描2字词典,有

    扫描中止,输出第3个词为“生动”,第4轮扫描,即:

    第4轮扫描:

    第1次:“物园玩”,扫描3字词典,无

    第2次:“物园”,扫描2字词典,无

    第3次:“物”,扫描1字词典,无

    扫描中止,输出第4个词为“物”,非字典词数加1,开始第5轮扫描,即:

    第5轮扫描:

    第1次:“园玩”,扫描2字词典,无

    第2次:“园”,扫描1字词典,有

    扫描中止,输出第5个词为“园”,单字字典词数加1,开始第6轮扫描,即:

    第6轮扫描:

    第1次:“玩”,扫描1字字典词,有

    扫描中止,输出第6个词为“玩”,单字字典词数加1,整体扫描结束。

    正向最大匹配法,最终切分结果为:“我们/在野/生动/物/园/玩”,其中,单字字典词为2,非词典词为1。

    2、逆向最大匹配法:

    逆向即从后往前取词,其他逻辑和正向相同。即:

    第1轮扫描:“在野生动物园玩”

    第1次:“在野生动物园玩”,扫描7字词典,无

    第2次:“野生动物园玩”,扫描6字词典,无

    。。。。

    第7次:“玩”,扫描1字词典,有

    扫描中止,输出“玩”,单字字典词加1,开始第2轮扫描

    第2轮扫描:“们在野生动物园”

    第1次:“们在野生动物园”,扫描7字词典,无

    第2次:“在野生动物园”,扫描6字词典,无

    第3次:“野生动物园”,扫描5字词典,有

    扫描中止,输出“野生动物园”,开始第3轮扫描

    第3轮扫描:“我们在”

    第1次:“我们在”,扫描3字词典,无

    第2次:“们在”,扫描2字词典,无

    第3次:“在”,扫描1字词典,有

    扫描中止,输出“在”,单字字典词加1,开始第4轮扫描

    第4轮扫描:“我们”

    第1次:“我们”,扫描2字词典,有

    扫描中止,输出“我们”,整体扫描结束。

    逆向最大匹配法,最终切分结果为:“我们/在/野生动物园/玩”,其中,单字字典词为2,非词典词为0。

    3、双向最大匹配法:

    正向最大匹配法和逆向最大匹配法,都有其局限性,我举得例子是正向最大匹配法局限性的例子,逆向也同样存在(如:长春药店,逆向切分为“长/春药店”),因此有人又提出了双向最大匹配法,双向最大匹配法。即,两种算法都切一遍,然后根据大颗粒度词越多越好,非词典词和单字词越少越好的原则,选取其中一种分词结果输出。

    如:“我们在野生动物园玩”

    正向最大匹配法,最终切分结果为:“我们/在野/生动/物/园/玩”,其中,两字词3个,单字字典词为2,非词典词为1。

    逆向最大匹配法,最终切分结果为:“我们/在/野生动物园/玩”,其中,五字词1个,两字词1个,单字字典词为2,非词典词为0。

    非字典词:正向(1)>逆向(0)(越少越好)

    单字字典词:正向(2)=逆向(2)(越少越好)

    总词数:正向(6)>逆向(4)(越少越好)

    因此最终输出为逆向结果。

  • 相关阅读:
    centos8 将SSSD配置为使用LDAP并要求TLS身份验证
    Centos8 搭建 kafka2.8 .net5 简单使用kafka
    .net core 3.1 ActionFilter 拦截器 偶然 OnActionExecuting 中HttpContext.Session.Id 为空字符串 的问题
    Springboot根据不同环境加载对应的配置
    VMware Workstation12 安装 Centos8.3
    .net core json配置文件小结
    springboot mybatisplus createtime和updatetime自动填充
    .net core autofac依赖注入简洁版
    .Net Core 使用 redis 存储 session
    .Net Core 接入 RocketMQ
  • 原文地址:https://www.cnblogs.com/xuelisheng/p/9712973.html
Copyright © 2011-2022 走看看