N-Gram 分词算法 Python 实现

本文介绍了N-Gram算法在自然语言处理中的应用,包括文本过滤、滑动取词过程。通过Python实现,该算法用于评估句子合理性及字符串差异度。程序主要包含文本过滤和滑动取词两个步骤。
摘要由CSDN通过智能技术生成

概述

N-Gram 算法是一种单词级别的窗口取词算法,N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理。另外一方面,N-Gram的另外一个作用是用来评估两个字符串之间的差异程度。这是模糊匹配中常用的一种手段。

N-Gram 算法具体过程:

  • 过滤掉文本数据中的标点符号和其他特殊字符;

  • 对所有单词执行小写转换,并删除单词之间的空格、换行符等标志位;

  • 使用长度为 N 的窗口对文本内容执行字符级滑动取词,将结果存入有序列表。

如下图所示
在这里插入图片描述
程序分为两步:文本过滤、滑动取词

文本过滤

def text_filter(text: str) -> str:
    """
    文本过滤器:过滤掉文本数据中的标点符号和其他特殊字符
    :param text: 
  • 2
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以向你展示一个简单的汉语自动分词程序,基于 bi-gram 模型。这个程序需要用到 Python,以及一个汉语语料库。 这里是代码: ```python import codecs def load_corpus(filename): sentences = [] with codecs.open(filename, 'r', 'utf-8') as f: for line in f: sentence = line.strip() sentences.append(sentence) return sentences def build_ngram_model(sentences, n=2): models = [] for i in range(n): models.append({}) for sentence in sentences: words = sentence.split() for i in range(len(words) - n + 1): ngram = ''.join(words[i:i+n]) if ngram not in models[n-1]: models[n-1][ngram] = 0 models[n-1][ngram] += 1 return models def segment(text, models): result = [] max_len = len(text) i = 0 while i < max_len: matched = False for n in range(len(models), 0, -1): if i+n <= max_len: word = text[i:i+n] if word in models[n-1]: result.append(word) i += n matched = True break if not matched: result.append(text[i]) i += 1 return result if __name__ == '__main__': corpus = load_corpus('corpus.txt') models = build_ngram_model(corpus) text = '利用汉语切分和标注语料' result = segment(text, models) print(result) ``` 这个程序的流程如下: 1. 首先,我们从文件中读取语料库,得到一个句子的列表 `sentences`。 2. 我们使用 `build_ngram_model` 函数,将句子转化成 bi-gram 模型。这个函数构建了两个模型,一个是 bi-gram 模型,另一个是 tri-gram 模型(当 `n=3` 时)。 3. 接下来,我们使用 `segment` 函数来分词。这个函数接受一个文本串 `text` 和 bi-gram 模型,并返回词的列表 `result`。对于每一个词,我们在模型中查找匹配的最长 n-gram,然后将其作为一个词加入结果列表中。 注意,这个程序适用于简单的分词需求,但其分词结果可能并不准确。实现更高效、更准确的分词系统需要考虑更多的技术和算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值