最大匹配的分词方法是通过设置最大的匹配长度,对输入的sentence基于已有词典进行匹配分词。例如说,词典为“自然,语言,自然语言,处理,自然语言处理”,输入的sentence是“自然语言处理”,当设置max_len为6的时候,“自然语言处理”就会分成一个词,当设置max_len为5的时候,就会分为“自然语言,处理”。
下面是简单的Python代码实现:
class Segmentation:
def __init__(self, vocab):
'''
:param vocab: 词典
'''
self.vocab = vocab
def max_match_forword(self, input_sentence, max_len:int):
result = []
tmp = 0
while tmp < len(input_sentence):
for i in range(max_len):
index = tmp + max_len -i
if input_sentence[tmp: index] in self.vocab:
result.append(input_sentence[tmp:index])
tmp = index
break
elif index == 1 + tmp:
result.append(input_sentence[tmp])
tmp = index
return result
if __name__ == '__main__':
# import jieba
# jieba.add_word('自然语言处理')
# i = jieba.cut_for_search('自然语言处理是计算机科学领域与人工智能领域中的一个重要方向')
# print('\',\''.join(i))
vocab = ['自然','语言','自然语言','自然语言处理','处理','计算','算机','科学','计算机','计算机科学','领域','人工','智能','人工智能','领域','一个','重要','方向']
model = Segmentation(vocab)
sentence = '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向'
result = model.max_match_forword(sentence, max_len=7)
print(result)
输出:['自然语言处理', '是', '计算机科学', '领域', '与', '人工智能', '领域', '中', '的', '一个', '重要', '方向']