中文分词中的正向最大匹配与逆向最大匹配

        我们都知道,英文的分词由于单词间是以空格进行分隔的,所以分词要相对的容易些,而中文就不同了,中文中一个句子的分隔就是以字为单位的了,而所谓的正向最大匹配和逆向最大匹配便是一种分词匹配的方法,这里以词典匹配说明。

       所谓词典正向最大匹配就是将一段字符串进行分隔,其中分隔 的长度有限制,然后将分隔的子字符串与字典中的词进行匹配,如果匹配成功则进行下一轮匹配,直到所有字符串处理完毕,否则将子字符串从末尾去除一个字,再进行匹配,如此反复。逆向匹配与此类似,下面以一个例子来说明:要进行分词的字符串:“研究生命的起源”

 

假定我们的字典中的相关内容如下:

 

研究

研究生

生命

命

的

起源

 

假定最大匹配字数设定为5

 

正向最大匹配过程:

研究生命的

研究生命

研究生 #第一个词匹配成功

 

命的起源

命的起

命的

命 #第二个词匹配成功,一个单字

 

的起源

的起

的 #第三个词匹配成功

 

起源 #第四个词匹配成功

 

那么正向最大匹配的结果就是

 

研究生 命 的 起源

 

现在我们来看看逆向最大匹配的过程:

 

生命的起源

命的起源

的起源

起源 #第一个词匹配成功

 

研究生命的

究生命的

生命的

命的

的 #第二个词匹配成功

 

研究生命

究生命

生命 #第三个词匹配成功

 

研究 #第四个词匹配成功

 

所以逆向最大匹配后的结果为

 

研究 生命 的 起源

 

两种分词过程总结:

【正向匹配:从左到右,逐步去掉右部(底部)的字进行新一轮匹配,逆向匹配:从右到左,逐步去掉左部(底部)的字进行新一轮匹配】

 

因为中文比较复杂以及中文的特殊性,逆向最大匹配大多时候往往会比正向要准确。

 

      从上面可以看出来,其实进行匹配并不困难,当然首先我们得找到一个好的词典。比如汉语词典,搜狗词典等,然后将其加载进一个散列表里,最后从输入读取字符串进行匹配,做中文分词这个还是使用脚本语言比较好,比如python,c 语言做这个比较坑,特别是对字符串的分隔要掌握好,而且非常麻烦,下面所处理的中文是UTF-8编码的,所以如果你输入的字符串不是UTF-8编码可能该程序会无法工作。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define HASH_LEN 39841 //定义散列表大小
#define STACK_LEN 100 //定义栈大小
#define MAX 5 //最大匹配字数

typedef struct hash_node
{
    char *data;
    struct hash_node *next;
}HASH_NODE; //散列表下拉链表结果

typedef struct
{
    int len;
    HASH_NODE *data;
}HASH; //散列表数据结构

typedef struct
{
    int len;
    char *data[STACK_LEN];
}STACK; //栈数据结构

//哈希函数,计算哈希值
unsigned int hash_fun(char *key)
{
    unsigned int seed=131;
    unsigned int hash=0;

    while(*key)
    {
        hash=hash*seed+*key;
        ++key;
    }

    return hash&0x7FFFFFFF;
}

//初始化散列表
void hash_init(HASH *hash)
{
    int i;

    //所有表中数据为空
    for(i=0;i != HASH_LEN;++i)
        hash[i].len=0;
}

//冲突时拉下链表
void hash_list_insert(HASH_NODE *data,char *key)
{
    HASH_NODE *temp;

    while(data->next != NULL)
        data=data->next;

    temp=malloc(sizeof(HASH_NODE));
    temp->data=key;
    temp->next=NULL;
    data->next=temp;
}

//插入数据
void hash_insert(HASH *hash,char *key)
{
    int h;

    h=hash_fun(key)%HASH_LEN;
    //如果当前表中没有数据则直接插入
    //否则插入链表中
    if(hash[h].len > 0)
        hash_list_insert(hash[h].data,key);
    else
    {
        hash[h].data=malloc(sizeof(HASH_NODE));
        hash[h].data->data=key;
        hash[h].data->next=NULL;
    }

    //当前表中数据值加1
    ++hash[h].len;
}

//从该表地址中进行搜索
char *hash_node_key(HASH_NODE *node,char *key)
{
    while(node)
    {
        if(strcmp(node->data,key) == 0)
            return node->data;
        
        node=node->next;
    }
    
    return NULL;
}

//从散列表查找
char *hash_get(HASH *hash,char *key)
{
    int h;

    h=hash_fun(key)%HASH_LEN;
    if(hash[h].len == 0)
        return NULL;

    return hash_node_key(hash[h].data,key);
}

//判断数据是否在该表中
int hash_node_in(HASH_NODE *node,char *key)
{
    while(node)
    {
        if(strcmp(node->data,key) == 0)
            return 1;

        node=node->next;
    }

    return 0;
}

//从表中搜索关键词
//如若存在则返回1
//否则返回0
int hash_in(HASH *hash,char *key)
{
    int h;

    h=hash_fun(key)%HASH_LEN;
    if(hash[h].len == 0)
        return 0;

    return hash_node_in(hash[h].data,key);
}

//打印表的所有数据
void hash_list_print(HASH_NODE *data)
{
    while(data != NULL)
    {
        printf("%s ",data->data);
        data=data->next;
    }
}

//打印散列表
void hash_print(HASH *hash)
{
    int i;

    for(i=0;i != HASH_LEN;++i)
    {
        if(hash[i].len != 0)
        {
            hash_list_print(hash[i].data);
            printf("\n");
        }
    }
}

//加载词典数据并存入散列表中
void load_data(HASH *hash,char *path)
{
    char *buf=NULL;
    char *temp;
    size_t len;
    int s;
    FILE *fp;

    if((fp=fopen(path,"rb")) == NULL)
        return;

    //按行读取
    while((s=getline(&buf,&len,fp)) > 0)
    {
        temp=malloc(sizeof(char)*s);
        snprintf(temp,sizeof(char)*s,"%s",buf);
        //去除回车符
        hash_insert(hash,temp);
        //插入数据

        free(buf);
        buf=NULL;
    }

    fclose(fp);
}

//初始化栈
void stack_init(STACK *stack)
{
    int i;

    //栈数据置零
    stack->len=0;
    for(i=0;i != STACK_LEN;++i)
        stack->data[i]=NULL;
}

//压入一个数据到栈中
int stack_push(STACK *stack,char *data)
{
    if(stack->len >= STACK_LEN)
        return 0;

    stack->data[stack->len]=data;
    ++stack->len;
}

//从栈中弹出一个数据
char *stack_pop(STACK *stack)
{
    if(stack->len <= 0)
        return NULL;

    --stack->len;
    return stack->data[stack->len];
}

//正向最大匹配
int for_match(HASH *hash,STACK *stack,char *data,int *index)
{
    int len=strlen(data);

    while(len)
    {
        //判断词典中是否有该词
        //有则将该词压入栈中
        //否则从字符串后减一个字进行循环
        if(hash_in(hash,data))
        {
            stack_push(stack,data);
            *index+=len;
            return 1;
        }

        len-=3;
        data=realloc(data,sizeof(char)*len+1);
        data[len]='\0';
    }

    return 0;
}

//逆向最大匹配
int re_match(HASH *hash,STACK *stack,char *data,int *index)
{
    int len=strlen(data);

    while(len)
    {
        //判断词典中是否有该词
        //有则将该词压入栈中
        //否则从字符串前减一个字进行循环
        if(hash_in(hash,data))
        {
            stack_push(stack,data);
            *index-=len;
            return 1;
        }

        data+=3;
        len-=3;
    }

    return 0;
}

//预处理字符串
void pre_set(char *str)
{
    char temp[600]={0};
    int i=0;
    int index=0;

    while(i < strlen(str))
    {
        if((str[i]&0xe0) == 0xe0)
        {
            snprintf(temp+index,sizeof(char)*3+1,"%s",str+i);
            i+=3;
            index+=3;
        }
        else if((str[i]&0xc0) == 0xc0) //标点等
            i+=2;
        else if((str[i]&0x80) == 0) //英文字符
            ++i;
    }

    //重新设置字符串
    memset(str,0,strlen(str)+1);
    snprintf(str,strlen(temp)+1,"%s",temp);
}

int main(int argc,char **argv)
{
    HASH hash[HASH_LEN]; //散列表
    STACK stack; //压入匹配到的词的栈
    STACK res; //以顺序打印正向匹配结果的交换栈
    char string[600]={0}; //输入的字符串
    int i=0;
    int index=0;
    char *temp; //取出的字符串

    //初始化
    hash_init(hash);
    stack_init(&stack);
    stack_init(&res);
    load_data(hash,"./现代汉语常用词表.txt");
    //hash_print(hash);
    printf("请输入一个字符串:");
    //scanf("%s",string);
    fgets(string,600,stdin);
    //预处理字符串,去除英文和其它非中文字符
    pre_set(string);

    //开始正向取出字符串
    while(i< strlen(string))
    {
        temp=malloc(sizeof(char)*3*MAX+1);
        snprintf(temp,sizeof(char)*3*MAX+1,"%s",string+i);

        //正向最大匹配
        if(!for_match(hash,&stack,temp,&i))
        {
            /*printf("正向匹配失败!\n");
            return -1;*/
            i+=3;
        }
    }

    //将匹配结果重新排序并打印
    while(temp=stack_pop(&stack))
        stack_push(&res,temp);
    printf("正向最大匹配:\n");
    while(temp=stack_pop(&res))
        printf("%s ",temp);

    //取出逆向匹配字符串
    printf("\n\n");
    i=strlen(string);
    while(i > 0)
    {
        int index=0;

        //如果当前字符串不够5个,则从头开始截取
        if(i < 3*MAX)
            index=0;
        else
            index=i-3*MAX;

        temp=malloc(sizeof(char)*3*MAX+1);
        snprintf(temp,sizeof(char)*3*MAX+1,string+index);

        //开始逆向匹配
        if(!re_match(hash,&stack,temp,&i))
        {
            /*printf("逆向匹配失败!\n");
            return -2;*/
            i-=3;
        }

        //去除已匹配的字符串
        string[i]='\0';
    }

    //打印匹配结果
    printf("逆向最大匹配:\n");
    while(temp=stack_pop(&stack))
        printf("%s ",temp);
    printf("\n");

    return 0;
}

 

 

python自然语言处理(NLP)1------中文分词1,基于规则的中文分词方法 python中文分词方法之基于规则的中文分词 目录 常见中文分词方法 推荐中文分词工具 参考链接 一、四种常见的中文分词方法: 基于规则的中文分词 基于统计的中文分词 深度学习中文分词 混合分词方法 基于规则的中文分词 包括, 正向最大匹配法,逆向最大匹配法和双向最大匹配法。 最大匹配方法是最有代表性的一种基于词典和规则的方法,其缺点是严重依赖... 阅读详情

相关推荐

自然语言处理系列九》中文分词》规则分词》逆向最大匹配法

此文章有对应的陈敬雷老师的清华大学出版社配套书籍教材 【自然语言处理原理与实战(人工智能科学与技术丛书)】 https://item.jd.com/13951851.html 和【分布式机器学习实战(人工智能科学与技术丛书)】,对应京东自营链接地址: https://item.jd.com/12743009.html

weixin_52610848的博客 1084

自然语言处理系列十一》中文分词》规则分词》正向最大匹配法、逆向最大匹配法、双向最大匹配法

此文章有对应的陈敬雷老师的清华大学出版社配套书籍教材 【自然语言处理原理与实战(人工智能科学与技术丛书)】 https://item.jd.com/13951851.html 和【分布式机器学习实战(人工智能科学与技术丛书)】,对应京东自营链接地址: https://item.jd.com/12743009.html

weixin_52610848的博客 2658

利用Python进行中文分词——实现中文文本处理的基础工具

中文是一种复杂的语言,其词语之间没有明显的分隔符号,这给中文文本处理带来了一定的挑战。中文分词是中文文本处理的基础工具,它可帮助我们对中文文本进行有意义的切分和处理。正向最大匹配算法从左到右逐个字符进行匹配,根据词典中的最长词语进行匹配,然后将匹配到的词语切分出来,继续匹配下一个字符。逆向最大匹配算法从右到左逐个字符进行匹配,根据词典中的最长词语进行匹配,然后将匹配到的词语切分出来,继续匹配前面的字符。Jieba库是Python中最流行的中文分词工具之一,下面通过示例演示如何使用Jieba库进行中文分词。

m0_70911440的博客 3075

正向最大匹配 和逆向最大匹配对比比较

正向最大匹配法 &逆向最大匹配法 原理对比 下面介绍的分词算法中最简单的正向最大匹配和反向最大匹配。 这种两种方法都是机械分词方法,它是按照一定的策略将待分析的汉字串与一个”充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。 按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用...

kyle1314608的博客 4802

告别调试烦恼:用Lattice Diamond手把手教你JTAG烧录FPGA(附SRAM/Flash模式详解)

本文详细介绍了使用Lattice Diamond软件进行JTAG烧录FPGA的全流程,包括SRAM临时调试和Flash固化的核心区别。从环境准备、硬件连接到文件准备、烧录模式选择,再到典型问题排查和高级技巧,手把手教你快速掌握FPGA烧录技术,提升开发效率。

weixin_42569329的博客 496

Labview实现服务器(server)与多客户端(clients)通信

服务器可以接收多个客户端发送的消息,并显示消息来源。 服务器可以发送消息到指定客户端 客户端可以自动连接服务器,断连后重连 客户端可以发送消息到服务器,可接收服务器消息 类似框架可以用做中央服务器及客户端项目

u013809089的博客 7976

基于词典的中文分词方法:正向最大匹配法&正向最小匹配法&反向最大匹配法&反向最小匹配法

基于词典的中文分词方法 在文本分类中,像汉语这样的语言,在文本之中没有任何空格,我们可以使用基于词典、基于统计或基于机器学习的方法来分词。而基于词典的分词基本上就是将一个中文字符串与字典中的单词进行匹配。成功匹配的字符串被分割成一个单词。 根据匹配方向和匹配长度优先级,我们可以分为: 匹配方向:正向匹配vs反向匹配 匹配长度优先级:最大匹配vs最小匹配 两两组合,就会有四种匹配方式:正向最大匹配法、正向最小匹配法、反向最大匹配法、反向最小匹配法 以正向最大匹配法为例介绍一下流程,另外三种方式类似: 正向最

qq_40177015的博客 2925

立创开源4G+GPS定位系统:基于微信小程序的低成本低功耗追踪方案

本文介绍了一个基于立创开源平台的超小型4G+GPS定位系统方案。该方案采用28mm*28mm主板,集成4G Cat.1通信与GPS定位,通过微信小程序“点灯专家”实现远程追踪管理,具备低成本、低功耗、易于部署的特点,适用于电动车、宠物、资产追踪等多种场景。

weixin_28895791的博客 394

python最大分词_中文分词--最大正向与逆向匹配算法python实现

最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描)。例如:词典中最长词为“中华人民共和国”共7个汉字,则最大匹配起始字数为7个汉字。然后逐字递减,在对应的词典中进行查找。下面以“我们在野生动物园玩”为例详细说明一下正向与逆向最大匹配方法:1、正向最大匹配法:正向即...

weixin_39770226的博客 1180

WordPress搭建“外贸独立站”完整操作教程

  以往的文章,我们介绍了很多种搭建独立站的方式,有最省事的Shopify 、最专业的Magento以及最省钱的Wordpress Woocommerce。其中,通过主机托管的方式又分了免费的谷歌云vps主机、1美元Godaddy主机以及SiteGround共享主机三种。建站方法方式实在太多了,有免费的,有廉价的,有商业版的,有共享主机、有云主机主机以及各种各样的vps服务器,选择哪种方式,哪款主机,也只有真正试了才直到。   没错,上述的这些方法方式,无一例外,我都亲身折腾过。从个人实际需求和建站方式来

www25qi的博客 8080

python cartopy绘制扇形区域图/cartopy绘制北极部分区域

实际上,这个问题原因还是由于投影转换的问题,在set_extend时,绘制的上下边界仍然是方形、未被正确投影的边界,与我们的set_boundary存在冲突,最根本的原因还是在于cartopy对于投影计算的一些缺陷。另外我们需要指出的是:**该方法不适用于极地投影,即NorthPolarStereo,由于NorthPolarStereo本身投影特性只需一个参数,本身并不适合。我们绘制极地投影时,同样也是使用set_boundary绘制圆形边界,那么当我们想要绘制扇形时,可以通过。请根据喜好自行选择,

weixin_43750300的博客 3212

中文分词:正向最大匹配与逆向最大匹配

正向(前向)最大匹配与逆向(后向)最大匹配。 所谓词典正向最大匹配就是将一段字符串进行分隔,其中分隔 的长度有限制,然后将分隔的子字符串与字典中的词进行匹配,如果匹配成功则进行下一轮匹配,直到所有字符串处理完毕,否则将子字符串从末尾去除一个字,再进行匹配,如此反复。 示例说明 示例1: 对字符串:“研究生命的起源”进行分词。 假定我们的字典中的相关内容如下: 研究 研究生 ...

皮皮blog 9132

Maven证书信任危机:PKIX path building failed的全面解析与实战修复

本文全面解析了Maven构建中常见的`PKIX path building failed`证书验证错误。该错误通常在使用特定镜像仓库或自建仓库时,因SSL/TLS证书不被JDK默认信任而触发。文章深入剖析了错误根源,对比了临时忽略检查与永久导入证书等不同修复方案的安全性与适用场景,并推荐通过`keytool`将证书导入JDK信任库的根治方法,以保障构建安全与稳定。

zzz56的博客 506

正向最大匹配分词和逆向最大匹配分词(附免费源码)

近年来,随着社会化媒体(如博客、微博、社交网站等)的兴起和普及,中文文本的分词成为了中文自然语言处理中的重要任务。分词的目标是将连续的汉字序列切分成有意义的词语,为后续的语义分析和信息处理提供基础。分词对中文文本的理解和处理起着关键作用。分词算法的发展可以追溯到上世纪80年代初,最早的分词方法是基于词典的方法。这些方法通过比对文本与词典中的词语,来确定切分位置。然而随着互联网和社会化媒体的快速发展,传统的基于词典的方法面临着扩展性和准确性的挑战。

Drzeal的博客 1486

VideoPose3d:环境搭建+制作自己的视频

论文链接:3D human pose estimation in video with temporal convolutions and semi-supervised training 代码链接:https://github.com/facebookresearch/VideoPose3D 环境搭建:ubuntu20.04+pytorch1.8+cuda10.2+python3.6+anaconda 1.启动anaconda环境 新建环境命令: conda create -n pytorc.

willbetter01的博客 4943

大数据领域数据采集的人工智能辅助技术

在大数据时代,“数据是石油”的隐喻早已深入人心,但采集高质量数据的过程却像“在大海里捞针”——数据源分散如繁星、格式杂乱如碎片、质量参差不齐如泥沙,传统采集方法(写死的脚本、固定的ETL流程)早已力不从心。这篇文章将带你走进AI辅助数据采集的世界:我们会用“智能捕鱼船”的比喻拆解AI如何解决传统采集的痛点,深入解析“数据源自动发现”“自适应数据解析”“实时质量管控”等核心技术的原理,用代码示例还原AI采集的真实流程,最后探讨多模态采集、联邦学习等未来趋势。

小程序开发 2355

分词算法----正向和逆向最大匹配算法(含Python代码实现)

自然语言处理、分词算法、最大匹配算法及具体代码实现

西小庄村高伟 的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Python】实现正向(逆向)最大匹配法(中文分词,NLP,编译原理)

正向最大匹配法(Maximum Match Method) Step 1 假定分词词典中的最长词有i个汉字字符,则用被处理的当前字串中的前i个字作为匹配字段,查找字典。 Step 2 若字典中存在这样一个i字词,则匹配成功;否则,失败,将匹配字段中的最后一个字符去掉, 对剩下字串进行匹配。 Step 3 如此进行下去,直到匹配成功,即切分出一个词或剩余字串长度为0。 不停的匹配,直到文档被扫描完为...

○( ^皿^)っHiahiahia…的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

中文分词:最大匹配算法

中文分词:最大匹配算法 (一)引言 分词是自然语言处理中非常常见的操作,也是必不可少的文本数据预处理步骤。各国语言的表达方式和书写方式截然不同,因此分词的方式和难度也不同。英文分词是最简单的,因为每个单词已经用空格自动分词了,比如"I like Chinese" 这个句子已经被分成了三个单词。当然,英文分词也是有难点的,比如单词大小写所代表的含义不同以及各种符号的用法,这里暂不讨论。中文是汉字为基本书写单位,词语甚至句子之间并没有明显的区分标记,并且不同的词组合容易产生歧义。比如:“结婚的和尚未结婚的”,计

huanxingchen1的博客 2480

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

正向/逆向最大匹配法分词实现

最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描)。例如:词典中最长词为“中华人民共和国”共7个汉字,则最大匹配起始字数为7个汉字。然后逐字递减,在对应的词典中进行查找。 下面以“我们在野生动物园玩”为例详细说明一下正向与逆向最大匹配方法: 1、正向最大匹配法: 正向即从前往后取词,从7->1,每次减一个字,直到词典命中或剩下1个单字。 第1次:“我们在野生动物

bullnfresh的专栏 4495

python双向最大匹配算法_中文分词引擎 python实现 — 正向最大、逆向最大、双向最大匹配法...

正向最大匹配法分词目标:在词典中进行扫描,尽可能地选择与词典中最长单词匹配的词作为目标分词,然后进行下一次匹配。算法流程:假设词典中最长的单词为 5 个(MAX_LENGTH),那么最大匹配的起始子串字数也为 5 个(1)扫描字典,测试读入的子串是否在字典中(2)如果存在,则从输入中删除掉该子串,重新按照规则取子串,重复(1)(3)如果不存在于字典中,则从右向左减少子串长度,重复(1)分词实例:比...

weixin_39851279的博客 1491

[转]中文分词入门之最大匹配法

  中文分词在中文信息处理中是最最基础的,无论机器翻译亦或信息检索还是其他相关应用,如果涉及中文,都离不开中文分词,因此中文分词具有极高的地位。中 文分词入门最简单应该是最大匹配法了,当年师兄布置给我的第一个学习任务就是实现最大匹配法的分词算法(正向、逆向)。记得当时对自己参考学习最有帮助的 是北大詹卫东老师“中文信息处理基础”的课件和源程序,不过他实现的是mfc程序,词表存储在数据库里。自己...

创意恒动力 275

双向最大匹配算法(含完整代码实现,ui界面)正向最大匹配算法,逆向最大匹配算法

中文自动分词,分词,自然语言处理

计算机编程开发学习交流的专栏 501

【Python自然语言处理】中文分词技术——规则分词

中文分词方法 本文参考自书籍《Python自然语言处理实战:核心技术与算法》 用做个人的学习笔记和分享 1. 规则分词 规则分词是一种机械分词方法,主要通过维护词典,在切分语句时将语句的每个字符串和词表中的词逐一匹配找到则切分,找不到则不切分。具体包括:正向最大匹配法、逆向最大匹配法和双向最大匹配法 1.1 正向最大匹配法 1.1.1 算法描述 ①从左向右取待切分汉语句的m 个字符作为匹配字段...

XD的学习笔记 1202

python自然语言处理实战核心技术与算法——双向最大匹配法

本人初学nlp,使用的是机械工业出版社的《python自然语言处理实战核心技术与算法》,学习到了双向最大匹配法,于是写下这篇文章记录一下整个代码的工作原理以及相应的理解。 目录一、匹配切分二、算法代码及详谈1. 正向最大匹配法2. 逆向最大匹配法3.双向最大匹配法三、总体代码与结果四、改进方式五、参考 一、匹配切分 在中文分词技术中的匹配切分输入规则分词方式,这是一种机械分词的方式,我们通过机器词典中的单词与语句中的每个词语进行匹配,如果匹配成功则切分,如果匹配失败则不与切分。 在匹配切分中,原则是“长.

LiQZ的博客 8691
上一篇: windows常用命令
下一篇: Slor5.x与mmseg4j的集成【使用solr自带的Jetty Server】
iteye_4921
博客等级 码龄8年 25粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值