一、中文分词技术简介
在英语中,单词本身就是词的表达,一篇英语文章就是“单词”加分隔符(空格)来表示的,在汉语中,词以字为基本单位的,但是一篇文章的语义表达却依然是以词来划分的。因此,在处理中文文本时,需要进行分词处理,将句子转化为词的表示。这个切词的过程就是中文分词,它是通过不同的算法利用计算机自动识别出句子的词,在词间加入边界标记符,分割出各个词汇。由于分词的主要困难在于分词的歧义问题,对于同一个句子不同的词划分会导致整个句子所表达的意思完全不一样。其中主要的几种分词方法主要归纳为“规则分词”, “统计分词”, “混合分词(规则+统计)”。
二、规则分词
基于规则的分词是一种机械分词方法,主要是通过维护词典,在切分语句时,将语句的每个字符串与词表中的词进行逐一匹配,如果找到该词则进行切分,否则不予切分。按照匹配切分的方式,主要有正向最大匹配法、逆向最大匹配法以及双向最大匹配法三种方法。
三、正向最大匹配法
算法描述
1、从左向右取待切分汉语句的m个字符作为匹配字段,m为机器词典中最长词条的字符数
2、查找机器词典并进行匹配。若匹配成功,则将这个匹配字段作为一个词切分出来,若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下的字符串作为新的匹配字段,进行再次匹配,重复以上过程,直到切出所有词为止。
代码实现
文章末尾中代码的MM_cut(self, text)函数部分
四、逆向最大匹配法
算法描述
class rule_participle(object):
def __init__(self):
self.window_size = 3
def MM_cut(self, text):
result, index, text_length = "", 0, len(text)
len_num = [0 for i in range(self.window_size + 1)]
dic = ['研究', '研究生', '生命', '命', '的', '起源']
while index < text_length:
for size in range(self.window_size + index, index, -1):
piece = text[index:size]
if piece in dic:
len_num[size - index] += 1
index = size - 1
break
index = index + 1
result += (piece + r'/')
return result, len_num
def RMM_cut(self, text):
result, index, text_length = "", len(text), len(text)
len_num = [0 for i in range(self.window_size + 1)]
dic = ['研究', '研究生', '生命', '命', '的', '起源']
while index > 0:
for size in range(index - self.window_size + 1, index, 1):
piece = text[size:index]
if piece in dic:
len_num[index - size] += 1
index = size + 1
break
index = index - 1
result = (piece + r'/') + result
return result, len_num
def BiMM_cut(self, text):
result1, cnt1 = self.MM_cut(text)
result2, cnt2 = self.RMM_cut(text)
len1, len2 = sum(cnt1), sum(cnt2)
print(len1, len2)
if result1 == result2 or cnt1 < cnt2:
return result1
elif cnt1 > cnt2:
return result2
else:
index = 0
while index < self.window_size + 1:
if cnt1[index] < cnt2[index]:
return result1
elif cnt1[index] > cnt2[index]:
return result2
index += 1
return result1
if __name__ == '__main__':
text = '研究生命的起源'
tokenizer = rule_participle()
tokenizer.MM_cut(text)
tokenizer.RMM_cut(text)
print(tokenizer.BiMM_cut(text))