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

一、最大匹配法

  最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描)。
最大匹配算法有三种:
  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)

3、结果

在这里插入图片描述

### 头歌平台自然语言处理第一关词频统计实现方 #### 数据准备与环境配置 为了完成头歌平台上自然语言处理的第一关——词频统计任务,需先准备好相应的开发环境并加载待处理的数据集。通常情况下,在Python环境中操作更为便捷,因为其拥有丰富的库支持文本处理工作。 ```python import jieba # 中文分词工具包 from collections import Counter # 统计词频使用的类 ``` #### 文本读取与初步清理 从文件或其他来源获取原始文本后,应对其进行必要的清洗,去除无关字符或标记,确保后续处理的有效性和准确性[^3]。 ```python def clean_text(text): cleaned_text = ''.join([char for char in text if '\u4e00' <= char <= '\u9fff']) # 只保留汉字 return cleaned_text ``` #### 分词处理 对于中文而言,不同于英文可以直接按空格分割单词,而是需要借助特定算法来识别词语边界。这里采用`jieba`作为分词器,它实现了多种高效的分词策略,适用于不同场景下的需求[^2]。 ```python def segment_text(cleaned_text): words = jieba.lcut(cleaned_text) # 使用精确模式进行分词 return words ``` #### 计算词频分布 利用Python内置的`collections.Counter`对象可以轻松地对列表中的元素频率进行统计汇总,进而得到整个文档内的词汇出现次数排行情况。 ```python def count_word_frequency(words): word_counts = Counter(words) sorted_word_counts = dict(sorted(word_counts.items(), key=lambda item: item[1], reverse=True)) return sorted_word_counts ``` #### 完整流程示例代码 下面给出了一段完整的Python脚本用于演示上述各个阶段的操作过程: ```python if __name__ == '__main__': raw_text = "在这里输入要分析的文章内容..." # 替换成实际文章路径或字符串形式的内容 # 步骤执行 cleaned_text = clean_text(raw_text) segmented_words = segment_text(cleaned_text) frequency_distribution = count_word_frequency(segmented_words) # 输出前十个高频词汇及其对应的数量 top_10_frequent_words = list(frequency_distribution.items())[:10] print(top_10_frequent_words) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值