想知道自然语言处理分词时如何如何抉择正向最大匹配、逆向最大匹配和双向最大匹配,只能通过实验得到数据反推哪个更合适吗?有没有什么方式或者提前根据语料的性质来决定选择的方法?
首先我们要明白:正向最大匹配是采用从左到右的方式,从句子中抽取一个子串作为一块词;逆向最大匹配是采用从右到左的方式,从句子中抽取一个子串作为一块词;而双向最大匹配是采用正向最大匹配和逆向最大匹配的结合,从句子中抽取一个子串作为一块词。
那么自然语言处理分词时如何抉择呢?
对于自然语言处理分词,一般会根据语料的性质来决定使用哪种方法,例如,如果语料中有外来词,那么逆向最大匹配会是一个不错的选择;而如果语料中又很多词组,那么双向最大匹配可能会更加准确。也可以通过实验得到数据,来反推哪个更合适。
有没有什么方式或者提前根据语料的性质来决定选择的方法?
是的,我们可以根据语料的性质来决定使用哪种方法,例如,如果语料中包含大量外来词,那么逆向最大匹配会是一个不错的选择;另外,如果语料中包含很多词组,那么双向最大匹配可能会更加精准。
正如方法名称,正向表示对句子从左到右选择词典中最长的词条进行匹配,获得分词结果。
dictA = ['南京','南京市', '南京市长', '市长' ,'长江大桥', '大桥']
maxDictA = max([len(word) for word in dictA])
sentence = "南京市长江大桥"
def cutA(sentence):
result = []
sentenceLen = len(sentence)
n = 0
while n < sentenceLen:
matched = 0
for i in range(maxDictA, 0, -1):
piece = sentence[n:n+i]
if piece in dictA:
result.append(piece)
matched = 1
n = n + i
break
if not matched:
result.append(sentence[n])
n += 1
return result