正向最大匹配法(Maximum Match Method,MM 法)是指从左向右按最大原则与词典里面的词进行匹配。假设词典中最长词是 m个字,那么从待切分文本的最左边取 m个字符与词典进行匹配,如果匹配成功,则分词, 如果匹配不成功,那么取 m−1 个字符与词典匹配,直到成功匹配为止。

正向最大匹配法

示例

句子: 中华民族从此站起来了
词典:”中华”,”民族”,”从此”,”站起来了”

第一步:词典中最长是 4 个字,所以我们将 “中华民族” 取出来与词典进行匹配,匹配失败。
第二步:于是,去掉 “族”,以 “中华民” 进行匹配,匹配失败
第三步:去掉 “中华民” 中的 “民”,以 “中华” 进行匹配,匹配成功。
第四步:在带切分句子中去掉匹配成功的词,待切分句子变成 “民族从此站起来了”。
第五步:重复上面的第 1 - 4 步骤
第六步:若最后一个词语匹配成功,结束。
最终句子被分成:“中华 / 民族 / 从此 / 站起来了 ”

算法流程

Python实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 文本
text = '我觉得西亚斯是一所很美丽的大学'
# 字典
dic = ('美丽', '觉得', '西亚斯', '我', '大学', '是', '一所', '很', '的')

# 建立一个空数组存放分词结果
words = []

# 初始化最长词长度为0
max_len_word = 0
# 遍历获取最大词长度
for key in dic:
if(len(key)) > max_len_word:
max_len_word = len(key)

while len(text) > 0:
# word_len先等于最大长度 然后逐渐减小
word_len = max_len_word
# 对每个字符串可能有(max_len_word)次循环
for i in range(0, max_len_word):
word = text[0: word_len]
if word not in dic:
word_len -= 1
word = []
else:
text = text[word_len:]
words.append(word)
word = []