Python实现中文分词--正向最大匹配和逆向最大匹配

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

# -*- 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()

结果如下:
Python实现中文分词--正向最大匹配和逆向最大匹配_第3张图片
逆向最大匹配代码如下:

# -*- 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

结果如下:
Python实现中文分词--正向最大匹配和逆向最大匹配_第4张图片
逆向需要考虑一些下标的变化,防止溢出。
努力加油a啊,(o)/~

你可能感兴趣的:(Python实现中文分词--正向最大匹配和逆向最大匹配)