NLP之逆向最大匹配算法(BMM)
算法概述
BMM是一个基于词典的分词算法,与之相似的还有正向最大匹配算法(FMM)和双向匹配算法(BM)。
算法的大致过程为:
1、输入最大词长maxWordLength,字典wordDict,待分句子。
2、从待分句子的末尾开始向前截取长度为maxWordLength的子句,进行分词。
3、对一个子句的分词过程为,首先判断子句是否在字典中,若在,则保存这个子句,并从原句中删除这个子句,转到2。
若不在,则判断子句长度是否为1,若为1,则将单字保存,从原句中删除单字,转到2。若不为1,则将子句中最右边的一个字删除,形成新的子句,转到3。
代码实现
"""逆向最大匹配算法"""
def BMM(wordDict, maxWordLength, sentence):"""@:param:wordDict:分词字典maxWordLength:最大词长sentence:待分句子,不要有标点符号@:return:result:分词结果,是句子分词的逆序"""result = []while len(sentence) != 0:#最大词长大于待分句子时,重置最大词长if len(sentence) < maxWordLength:maxWordLength = len(sentence)#待分子句segWord = sentence[len(sentence)-maxWordLength:len(sentence)]while not(segWord in wordDict):#while 循环结束有两种情况,1是segWord存在于字典中,#2是,segWord为单字。#防止初始segWord长度为1,出错if len(segWord) > 1:segWord = segWord[1:]else:#result.append(segWord)#sentence = sentence[:len(sentence)-1]break#第二个循环结束,则将分词结果保存到result#并从原句中删除已分词result.append(segWord)sentence = sentence[:len(sentence)-len(segWord)]return result
运行结果
def main():maxWordLength, sougoDict = readDict("sougoDict.txt")sentence1 = "今天天气怎么样"result1 = BMM(sougoDict, maxWordLength, sentence1)printResult(result1)sentence2 = "最高买价和最低买价分别是多少"result2 = BMM(sougoDict, maxWordLength, sentence2)printResult(result2)sentence3 = "乱七八糟的字绗舆硎闿庹"result3 = BMM(sougoDict, maxWordLength, sentence3)printResult(result3)
运行结果
说明
这个代码只是一个基础版本,没有经过完整测试,仅供参考,如有什么问题,还望多多指教。
分词词典
分词词典是从参考文章《千万级巨型汉语词库分享》中截取出的一小部分,共有30万常用词,需说明的是字典不是最新的。
下载链接
参考文章
中文分词入门之最大匹配法
千万级巨型汉语词库分享
NLP之逆向最大匹配算法(BMM)相关推荐
- 自然语言处理之中文分词逆向最大匹配算法(RMM算法)
经过了一阶段的学习上课,现在已经开始开始在自然语言处理的道路上安心研究,最近看了一本叫<python自然语言处理实战核心技术与算法>,大致的溜了一遍,感觉写的很基础了,个人认为主要写的好的 ...
- 双向最大匹配算法(含完整代码实现,ui界面)正向最大匹配算法,逆向最大匹配算法
双向最大匹配算法(含完整代码实现,ui界面)正向最大匹配算法,逆向最大匹配算法 一.理论描述 中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词 ...
- python双向最大匹配算法_中文分词算法 之 基于词典的逆向最大匹配算法
在之前的博文中介绍了基于词典的正向最大匹配算法,用了不到50行代码就实现了,然后分析了词典查找算法的时空复杂性,最后使用前缀树来实现词典查找算法,并做了3次优化. 下面我们看看基于词典的逆向最大匹配算 ...
- 分词算法----正向和逆向最大匹配算法(含Python代码实现)
文章目录 分词算法(Segmentation Method) 最大匹配算法(Maximum Matching) 需要的前提 正向最大匹配算法(Forwards Maximum Match,FMM) 逆 ...
- NLP 中文分词-双向匹配算法(理论+Python实现)
一.理论描述 1.中文分词的概念: 是指把没有明显分界标志的字串切分为词串,包括标点符号.数字.数学符号.各种标记.人名.地名.机构名等未登录词的识别.汉语自动分词主要包括:(1)根据分词规范,建立机 ...
- 2022-0828-0640,中文分词,逆向最大匹配算法 RMM
# encoding:utf8text = "我们这帮人都是辛苦的打工人" words = ["我", "们", "我们" ...
- 用python实现FMM和BMM
词是自然语言中能够独立运用的最小单位,是自然语言处理的基本单位. 自动分词分析就是利用计算机对自然语言的形态进行分析,判断词的结构和类别等. 最大匹配法(Maximum Match Method) 正 ...
- NLP(CAS10年NLP课程note)
语言模型 幂律分布 齐夫定律(英语:Zipf's law,IPA/ˈzɪf/)是由哈佛大学的语言学家乔治·金斯利·齐夫(George Kingsley Zipf)于1949年发表的实验定律.它可以表述 ...
- 【NLP】为什么中文分词比英文分词更难?有哪些常用算法?(附代码)
导读:人类文明的重要标志之一是语言文字的诞生.数千年来,几乎人类所有知识的传播都是以语言和文字作为媒介. 自然语言处理是使用计算机科学与人工智能技术分析和理解人类语言的一门学科.在人工智能的诸多范畴中 ...
最新文章
- python使用生成器生成浮点数列表、使用生成器生成(正)负的浮点数列表
- 3D打印产业化机遇与挑战
- 使用apply调用函数
- 单位四元数(unit quaternion)
- mysql metadata lock(一)
- “春色满园”!谷歌新数据中心有望实现100%可再生能源
- php ci 处理图片 裁剪,Codeigniter实现智能裁剪图片的方法
- 软件与软件工程的概念
- 实时获取滚动条的高度_适用于星上快速处理的雷达高度计有效波高反演技术
- Spring 入门程序
- java通道 硬件通道 如何联系_Java NIO5:通道和文件通道
- 5种获取RSS全文输出的方法
- 国网英语计算机职称考试技巧,计算机职称考试通关的三大技巧
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第1节 基本概念_01maven概述
- EOS 创建钱包与账户
- 笔记——专访李运华:程序员如何在技术上提升自己
- Python 的输出矩阵的一些常用设置
- 如何简单抓取拼多多买家订单列表
- 简单动态字符串(SDS)
- 从IIS到PAGE对象:ASP.NET之旅