当前位置:   article > 正文

正向最大匹配算法(中文分词)_正向最大匹配法

正向最大匹配法

一、最大匹配法

  最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描)。
最大匹配算法有三种:
  1、正向最大匹配
  2、逆向最大匹配
  3、双向匹配
  三种算法原理都一样,以正向为例,是从前向后扫描的过程。

如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、使用北大训练集实现正向最大匹配

1、数据集(从中选取北大的训练集)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、代码实现


# -*- coding: utf-8 -*-
"""
@author: Junhui Yu
@Date:2020/08/30
"""

pku_training_words = 'icwb2-data/gold/pku_training_words.txt'
words=["欢迎大家来到文本计算与认知智能实验室"]
def get_dic(pku_training_words): 
    with open(pku_training_words,'r',encoding='gbk',) as f:
        try:
            file_content = f.read().split()
        finally:
            f.close()
    chars = list(set(file_content))
    return chars

dic = get_dic(pku_training_words)

def positive_max_matching():
    max_length = 5
    for word in words:#分别对每行进行正向最大匹配处理
        max_length = 5
        word_list = []
        len_hang = len(word)
        while len_hang>0 :
            tryWord = word[0:max_length]
            while tryWord not in dic:
                if len(tryWord)==1:
                    break
                tryWord=tryWord[0:len(tryWord)-1]
            word_list.append(tryWord)
            word = word[len(tryWord):]
            len_hang = len(word)
    return word_list

contents=positive_max_matching()
seg=""
for s in contents:
    if seg=="":
        seg+=s
    else:
        seg+="/"+s
print(seg)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

3、结果

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/374848
推荐阅读
相关标签
  

闽ICP备14008679号