当前位置:   article > 正文

Python实现中文分词--正向最大匹配和逆向最大匹配_采用正向、逆向最大匹配算法,实现中文分词任务。

采用正向、逆向最大匹配算法,实现中文分词任务。

编译原理实验二:Python实现中文分词–正向最大匹配和逆向最大匹配
最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描)。
在这里插入图片描述
文档整理如下:
在这里插入图片描述
最大正向匹配代码如下:

# -*- coding: utf-8 -*-
"""
Created on Fri Feb 21 16:25:22 2020

@author: lenovo
"""

import numpy as np

#处理词典库获得列表
def get_dic():
    f=open("F:/学习文件/编译原理/实验二/词典文档.txt",'r')
    file_open=f.read().split()#按照空格处理文件
    f.close()
    chars=list(set(file_open))#去重之后获得列表
    return chars
dic=get_dic()

def readfile():
    max_length=0
    for i in dic:
        max_length=max(max_length,len(i))##获得最大长度
    zz=max_length
    f=open("F:/学习文件/编译原理/实验二/测试文档.txt",'r')
    ff=open("F:/学习文件/编译原理/实验二/生成文档.txt",'w')
    lines=f.readlines()
    f.close()
    for line in lines:#分别对每一行进行正向最大匹配处理
        max_length=zz
        my_list=[]
        len_hang=len(line)
        while len_hang>0:
            tryW=line[0:max_length]##切割字符串
            while tryW not in dic:
                if len(tryW)==1:#长度为1的时候就直接退出
                    break;
                tryW=tryW[0:len(tryW)-1]
            my_list.append(tryW)
            line=line[len(tryW):]
            len_hang=len(line)
        for i in my_list:
            ff.write(i+" ")
    ff.close()
readfile()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

结果如下:
在这里插入图片描述
逆向最大匹配代码如下:

# -*- coding: utf-8 -*-
"""
Created on Fri Feb 21 19:04:54 2020

@author: lenovo
"""

import numpy as np

#处理词典库获得列表
def get_dic():
    f=open("F:/学习文件/编译原理/实验二/词典文档.txt",'r')
    file_open=f.read().split()
    f.close()
    chars=list(set(file_open))
    return chars
dic=get_dic()

def readfile():
    max_length=0
    for i in dic:
        max_length=max(max_length,len(i))##获得最大长度
    zz=max_length
    f=open("F:/学习文件/编译原理/实验二/测试文档.txt",'r')
    ff=open("F:/学习文件/编译原理/实验二/生成文档逆向最大匹配.txt",'w')
    lines=f.readlines()
    f.close()
    for line in lines:#分别对每一行进行逆向最大匹配处理
        max_length=zz
        my_list=[]
        len_hang=len(line)
        while len_hang>0:
            tryW=line[max(0,len_hang-max_length):len_hang]#防止溢出
            while tryW not in dic:
                if len(tryW)==1:
                    break;
                tryW=tryW[1:len(tryW)]#这里注意,一直是从1开始的
            my_list.append(tryW)
            line=line[0:len_hang-len(tryW)]
            len_hang=len(line)
    while len(my_list):
        tt=my_list.pop()#这里类似栈的操作
        ff.write(tt+" ")
    ff.close()
readfile()##012345
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

结果如下:
在这里插入图片描述
逆向需要考虑一些下标的变化,防止溢出。
努力加油a啊,(o)/~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/374890
推荐阅读
相关标签
  

闽ICP备14008679号