jieba word - maximum matching forward and reverse maximum matching

# -*- coding: utf-8 -*-

#正向最大匹配法

text='研究生命的最初起源'#即将被分词的文本
dic=['研究','研究生','生命','命','的','最','初','起源'] #在这个字典进行匹配
ww=7 #每次取七个字符来匹配
MMresult=[]
index=0
text_length=len(text)

while text_length>index:
    for size in range(ww+index,index,-1):
        print(size,':',ww+index,index,-1)#输出遍历索引的过程
        piece=text[index:size]
        print(piece)#输出每次尝试匹配的字符串
        if piece in dic:
            index=size-1
            break
    index=index+1
    MMresult.append(piece+'--')
print(MMresult)


#逆向最大匹配法

text='研究生命的最初起源'#即将被分词的文本
dic=['研究','研究生','生命','命','的','最','初','起源'] #在这个字典进行匹配
ww=7 #每次取七个字符来匹配
RMMresult=[]
index=len(text)

while index>0:
    for size in range(index-ww,index):
        print(size,':',index-ww,index)#输出遍历索引的过程
        piece=text[size:index]
        print(piece)#输出每次尝试匹配的字符串
        if piece in dic:
            index=size+1
            break
    index=index-1
    RMMresult.append(piece+'--')
RMMresult.reverse()
print(RMMresult)


#把正向最大匹配法写成一个类
'''
class MM(object):

  #  def __init__(self):
   #     self.ww=7
    
    def cut(self,text):
        ww=7 #每次取七个字符来匹配
        result=[]
        index=0
        text_length=len(text)
        dic=['研究','研究生','生命','命','的','最','初','起源']
        while text_length>index:
            for size in range(ww+index,index,-1):
                print(size,':',ww+index,index,-1)#输出遍历索引的过程
                piece=text[index:size]
                print(piece)#输出每次尝试匹配的字符串
                if piece in dic:
                    index=size-1
                    break
            index=index+1
            result.append(piece+'--')
        print(result)
if __name__=='__main__':
    text='研究生命的最初起源'
    token=MM()
    print(token.cut(text))    
   
'''
#把逆向最大匹配法写成一个类
'''
class RMM(object):
    def __init__(self):
        self.w=7
    def cut(self,text):
        dic=['研究','研究生','生命','命','的','最','初','起源'] #在这个字典进行匹配
        result=[]
        index=len(text)

        while index>0:
            for size in range(index - self.w,index):
                print(size,':',index - self.w,index)#输出遍历索引的过程
                piece=text[size:index]
                print(piece)#输出每次尝试匹配的字符串
                if piece in dic:
                    index=size+1
                    break
            index=index-1
            result.append(piece+'--')
        result.reverse()
        print(result)

if __name__=='__main__':
    text="研究生命的最初起源"
    tokenn=RMM()
    print(tokenn.cut(text))
'''

 

Guess you like

Origin blog.csdn.net/zilong9000/article/details/93736296