中文分词— 前向最大匹配、后向最大匹配(流程)

前向最大匹配法:首先定义MAX_LENGTH的大小(一般为词典中最长的单词的长度),之后将待分词子串从前往后扫描取出MAX_LENGTH的长度,然后在词典中进行匹配,尽可能地选择与词典中最长单词匹配的词作为目标分词,然后进行下一次匹配。

算法流程:

假设词典中最长的单词为 5 个(MAX_LENGTH),那么最大匹配的起始子串字数也为 5 个

(1)从待分词子串中从前往后取出5个字,然后扫描分词字典,测试该5个字的子串是否在字典中
(2)如果存在,则从待分词子串中删除掉该5个字的子串,重新按照规则取子串,重复(1)
(3)如果不存在于字典中,则减少该子串的最右一个字,之后重复(1)

分词实例:

待分词子串:

“我们经常有意见分歧”

词典:

[“我们”,“经常”,“有”,“有意见”,“意见”,“分歧”]

第一轮:从前往后取长度为5的子串为“我们经常有”

我们经常有 (词典没有该词,去掉最右一个字)
我们经常 (词典没有该词,去掉最右一个字)
我们经(词典没有该词,去掉最右一个字)
我们(词典有该词,从待分词子串中删除该词)

第二轮:取子串“经常有意见”

经常有意见 (x)
经常有意 (x)
经常有 (x)
经常 (√)

第三轮:取子串“有意见分歧”

有意见分歧 (x)
有意见分 (x)
有意见 (√)

第四轮:取子串“分歧”

分歧 (√)

前向最大匹配法最终的切分结果为:
“我们 / 经常 / 有意见 / 分歧”

后向最大匹配法:首先定义MAX_LENGTH的大小(一般为词典中最长的单词的长度),之后将待分词子串从后往前扫描取出MAX_LENGTH的长度,然后在词典中进行匹配,尽可能地选择与词典中最长单词匹配的词作为目标分词,然后进行下一次匹配。

假设词典中最长的单词为 5 个(MAX_LENGTH),那么最大匹配的起始子串字数也为 5 个

(1)从待分词子串中从后往前取出5个字,然后扫描分词字典,测试该5个字的子串是否在字典中
(2)如果存在,则从待分词子串中删除掉该5个字的子串,重新按照规则取子串,重复(1)
(3)如果不存在于字典中,则减少该子串的最左一个字,之后重复(1)

分词实例:

待分词子串:

“我们经常有意见分歧”

词典:

[“我们”,“经常”,“有”,“有意见”,“意见”,“分歧”]

第一轮:从前往后取长度为5的子串为“有意见分歧”

有意见分歧 (词典没有该词,去掉最左一个字)
意见分歧 (词典没有该词,去掉最左一个字)
见分歧(词典没有该词,去掉最左一个字)
分歧(词典有该词,从待分词子串中删除该词)

第二轮:取子串“经常有意见”

经常有意见 (x)
常有意见 (x)
有意见(√)

第三轮:取子串“我们经常”

我们经常 (x)
们经常 (x)
经常 (√)

第四轮:取子串“我们”

我们 (√)

后向最大匹配法最终的切分结果为:
“我们 / 经常 / 有意见 / 分歧”

前向最大匹配和后向最大匹配的分词结果有90%的概率是一样的。

双向最大匹配法 :将前向最大匹配算法和后向最大匹配算法进行比较,从而确定正确的分词方法。

算法流程:

(1)比较前向最大匹配和后向最大匹配结果
(2)如果分词数量结果不同,那么取分词数量较少的那个
(3)如果分词数量结果相同
1、分词结果相同,可以返回任何一个
2、分词结果不同,返回单字数比较少的那个

分词实例:

前向匹配最终切分结果为:北京大学 / 生前 / 来 / 应聘,分词数量为 4,单字数为 1
后向匹配最终切分结果为:”北京/ 大学生/ 前来 / 应聘,分词数量为 4,单字数为 0

逆向匹配单字数少,因此返回逆向匹配的结果。

猜你喜欢

转载自blog.csdn.net/liusisi_/article/details/107184294