分词算法的python实现(正向最大匹配法)

正向最大匹配法又称MM法,其基本思想是: 假设分词词典中的最长词由i个汉字字符组成,则 用被处理文档的当前字符串中前i个字作为匹配 字段查找词典。若词典中存在这样一个字词,则 匹配成功,匹配字段作为一个词被切分出来,否则 匹配失败。应将匹配字段中的最后一个字去掉, 对剩下的字串重新进行匹配处理。如此进行下 去,直到匹配成功。然后取下一个字字串进行匹 配处理,直到文档被扫描完为止。

下面是我用python对MM算法的简单实现。其中用到的词库大家可以在网上找到。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os

note1=input("Enter your input: ");          #键入文本内容
head1=0;
i1=10;
wordlist1=[]                                #分词存放列表
typeis=input("敏感词检测输入0,分词输入其他任意数字:")
if (typeis=='0'):                           #选择词库
    f=open('./mingan.txt','r')
else:
    f=open('./ciku.txt','r')
for eachline in f:
    nlen=len(eachline)-1;
    wordlist1.append(eachline[:nlen])
f.close()
def function1(note,wordlist,head,i):        #分词算法
    won=[]
    while (head <= len(note)):
        if (head>=(len(note)-i)):
            i=len(note)-head
        for p in range(i):
            rear=head+i-p;
            flag=0
            for each in wordlist:
                if (note[head:rear]==each):
                    print ("词有",each);
                    won.append(each);
                    head=head+len(each);
                    flag=1;
                    break;
            if (flag==1):
                break;
        if (flag==0):
            head=head+1;


    return won
won1=function1(note1,wordlist1,head1,i1)
print(won1)



os.system("pause")

你可能感兴趣的:(python,分词,算法,文本)