自然语言处理入门的第一个代码:最大正向匹配算法

今天终于成功的把最大正向匹配算法的代码写好啦,虽然是一个很简单的算法,但是对于我这个自然语言处理小白来说,也花费了好久呢,还是有点小开心的,哈哈。

最大正向匹配算法原理:从右到左依次匹配语料库中的词语

步骤:1、找出语料库中最长的词语长度 max_lenth 2、将max_lenth与需要划分的句子进行比较,选较小值作为句子的划分长度3、根据划分长度划分句子,并将划分后的句子与语料库进行匹配,若语料库中存在该句子,则该句子为完整语句,将该句子从需要划分的句子中剔除后,重新执行上述操作,若没有该句子,则将句子中的字从右至左依次剔除,并逐一进行匹配,直至匹配到相应的句子或匹配到句子的第一个字后,再重新执行上述操作。

相应代码

dict_list=[]

def init():

with open('中医词典.txt','r')as dict:

for iin dict:

i=i.strip()

dict_list.append(i)

print(dict_list)

def FMM(sentence,dict_list):

cut_word_list=[]

maxLenth_dict_list=max(len(word)for wordin dict_list)

while len(sentence)>0:

word_lenth =min(maxLenth_dict_list, len(sentence))

cut_word=sentence[:word_lenth]

while len(cut_word)>0:

if len(cut_word)==1:

cut_word_list.append(cut_word)

break

            elif cut_wordin dict_list:

cut_word_list.append(cut_word)

break

            else:

cut_word=sentence[:word_lenth-1]

word_lenth=word_lenth-1

        sentence=sentence[len(cut_word):]

words='/n'.join(cut_word_list)

return  words

def main():

sentence=input('请输入要分词的句子:')

init()

word=FMM(sentence,dict_list)

print(word)

if __name__ =='__main__':

main()

中医代码是本人从网站爬下来的语料库,可以更改为自己的语料库。

正向最大匹配算法,是基于词典的语料库算法,所以在使用时,需要构建相应的词典。

你可能感兴趣的:(自然语言处理入门的第一个代码:最大正向匹配算法)