正向最大匹配算法(中文分词)
一、最大匹配法 最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描)。最大匹配算法有三种: 1、正向最大匹配 2、逆向最大匹配 3、双向匹配 三种算法原理都一样,以正向为例,是从前向后扫描的过程。如下:二、使用北大训练集实现正向最大匹配1、数据集(从中选取北大的训练集
·
一、最大匹配法
最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描)。
最大匹配算法有三种:
1、正向最大匹配
2、逆向最大匹配
3、双向匹配
三种算法原理都一样,以正向为例,是从前向后扫描的过程。
如下:


二、使用北大训练集实现正向最大匹配
1、数据集(从中选取北大的训练集)



2、代码实现
# -*- coding: utf-8 -*-
"""
@author: Junhui Yu
@Date:2020/08/30
"""
pku_training_words = 'icwb2-data/gold/pku_training_words.txt'
words=["欢迎大家来到文本计算与认知智能实验室"]
def get_dic(pku_training_words):
with open(pku_training_words,'r',encoding='gbk',) as f:
try:
file_content = f.read().split()
finally:
f.close()
chars = list(set(file_content))
return chars
dic = get_dic(pku_training_words)
def positive_max_matching():
max_length = 5
for word in words:#分别对每行进行正向最大匹配处理
max_length = 5
word_list = []
len_hang = len(word)
while len_hang>0 :
tryWord = word[0:max_length]
while tryWord not in dic:
if len(tryWord)==1:
break
tryWord=tryWord[0:len(tryWord)-1]
word_list.append(tryWord)
word = word[len(tryWord):]
len_hang = len(word)
return word_list
contents=positive_max_matching()
seg=""
for s in contents:
if seg=="":
seg+=s
else:
seg+="/"+s
print(seg)
3、结果

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)