有些语言的书写系统,由于没有词边界的可视表示这一事实,使得文本分词变得更加困难。
这里介绍一种简单的分词方法。
一,分词问题描述
对以下没有明显词边界的句子进行分词:
- doyouseethekitty
- seethedoggy
- doyoulikethekitty
- likethedoggy
遇到的第一个挑战仅仅是表示这个问题:我们需要找到一种方法来分开文本内容与分词
标志。
我们可以给每个字符标注一个布尔值来指示这个字符后面是否有一个分词标志。
例如:
>>> text = "doyouseethekittyseethedoggydoyoulikethekittylikethedoggy"
>>> seg1 = "0000000000000001000000000010000000000000000100000000000"
>>> seg2 = "0100100100100001001001000010100100010010000100010010000"
其中seg1和seg2表示两个分词结果,0表示当前字符不是分词结束位置,1表示在当前字符下分开。
可以用如下函数来将seg分词标志对原文本进行分词。
def segment(text, segs):
words = []
last = 0
for i in range(len(segs)):
if segs[i] == '1':
words.append(text[last:i+1])
last = i+1
words.append(text[last:])
return words
>>> text = "doyouseethekittyseethedoggydoyoulikethekittylikethedoggy"
>>> seg1 = "0000000000000001000000000010000000000000000100000000000"
>>> seg2 = "0100100100100001001001000010100100010010000100010010000"
>>> segment(text, seg1)
['doyouseethekitty', 'seethedoggy', 'doyoulikethekitty', 'likethedoggy'