概述

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

N-Gram 算法具体过程:

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

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

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

如下图所示

程序分为两步:文本过滤、滑动取词

文本过滤

def text_filter(text: str) -> str:"""文本过滤器:过滤掉文本数据中的标点符号和其他特殊字符:param text: 待过滤的文本:return: 过滤后的文本"""result = str()for t in text:if t.isalnum():if t.isalpha():t = t.lower()result += str(t)return result

滑动取词

def slide_word(text: str, l: int = 5) -> list:"""滑动取词器Input: text='abcd',l=2Output: ['ab','bc','cd']:param text: 过滤后的文本 (只包含小写数字/字母):param l: 滑动窗口长度,默认为 5:return:"""tf = text_filter(text)result = list()if len(tf) <= l:result.append(tf)return resultfor i in range(len(tf)):word = tf[i:i + l]if len(word) < l:breakresult.append(word)return result

测试

if __name__ == '__main__':banner = 'abcdefghigkLMN*^%$*   \r\n)021'print(slide_word(banner))

输出

['abcde', 'bcdef', 'cdefg', 'defgh', 'efghi', 'fghig', 'ghigk', 'higkl', 'igklm', 'gklmn', 'klmn0', 'lmn02', 'mn021']

N-Gram 分词算法 Python 实现相关推荐

  1. 中文分词算法python代码_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  2. 简易中文分词算法(python)_自然语言处理(NLP)中的的中文分词算法及 Python 实现...

    本 Chat 首先简单介绍了自然语言处理中中文分词的概念和应用场景.然后通过两个简单的小例子展示了算法的步骤.接着编写了 Python 代码,并在<红楼梦>上做了测试.最后,总结了我在写代 ...

  3. 中文分词算法python代码_python实现中文分词FMM算法实例

    本文实例讲述了python实现中文分词FMM算法.分享给大家供大家参考.具体分析如下: FMM算法的最简单思想是使用贪心算法向前找n个,如果这n个组成的词在词典中出现,就ok,如果没有出现,那么找n- ...

  4. 正向最大匹配算法 python代码_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  5. python最大分词_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  6. Python实现mmseg分词算法和吐嘈

    http://blog.csdn.net/acceptedxukai/article/details/7390300#comments 前两天一直在写爬虫,也是一直有心写个简单的搜索引擎吧,写出来肯定 ...

  7. python实现分词算法代码

    分词是自然语言处理的一个基本工作,中文分词和英文不同,字词之间没有空格.中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果.中文分词技术属于自然语言处 ...

  8. 自然语言处理实验—分词算法(含python代码及详细例子讲解)

    自然语言处理实验-分词算法 最近在学自然语言处理,这是第一个上机实验自然语言处理的分词算法,也是自然语言处理比较入门的算法.和大家分享一下. 首先,自然语言处理,英文是(Nature Language ...

  9. python双向最大匹配算法_中文分词算法 之 基于词典的逆向最大匹配算法

    在之前的博文中介绍了基于词典的正向最大匹配算法,用了不到50行代码就实现了,然后分析了词典查找算法的时空复杂性,最后使用前缀树来实现词典查找算法,并做了3次优化. 下面我们看看基于词典的逆向最大匹配算 ...

最新文章

  1. hdu3006 状态压缩+位运算+hash(小想法题)
  2. 20165301第十周课下补做
  3. Scala print语句格式打印
  4. day12_oracle hint——SQL优化过程中常见Oracle中HINT的30个用法
  5. CentOS 快速安装pip
  6. python怎么用matplotlib画,用matplotlib在python中绘制OHLC图
  7. Windows 2003 NTP 时间服务器设置
  8. 科沃斯扫地机器人风扇模块_扫地机器人不能开机,不能关机,风扇不转
  9. 抖音“市长带你看湖北”首场直播:总成交额1793万元
  10. H3C-IMC 自动发现功能如何使用
  11. 二叉树的几种遍历方法
  12. [转载] 重新抛出异常与 public Throwable fillInStackTrace()
  13. ubuntu安装 opencv-3.4.3
  14. 《我想吃掉你的胰脏》观后感
  15. win10文件服务器ssd当缓存盘,Win10怎么启用设备上的写入缓存|提高固态硬盘性能方法...
  16. Android系统 GPIO状态查询
  17. 深入浅出SQLITE3
  18. 解析华为MAS EIE系统硬件与软件结构
  19. node命令与切换node版本
  20. 微软2012年4月最有价值专家(MVP)名单 51CTO十四位用户当选

热门文章

  1. java基于ssm中小型企业公文流转系统的设计与实现
  2. GIS与ESRI:ESRI商业合作伙伴最大的商业机会在哪里?
  3. idea中代码不提示,写错误代码也不报错解决方法
  4. 基于PyQt5的图形化界面开发——模拟医院管理系统
  5. java 对excel 截图_java基于poi实现快速操作Excel的工具[v2.1.0]版本更新
  6. ‘dependencies.dependency.systemPath‘ for cn.ac:xxxx:jar should not point at files
  7. 从CAD图到GeoServer的探索手账
  8. HCIE网络安全第一天
  9. 机器学习中决策树浅析
  10. C指针进阶(2)(函数指针与指针函数,回调函数与转移表)