注意文本的格式,建议UTF-8防止出现不可见字符导致无法匹配

class CSegment:def __init__(self, MaxLen, seg):self.MaxLen = MaxLen  # 初始化MaxLenself.seg = seg  # 初始化分隔符# 初始化词典(数据类型为dict)self.Dict=[]self.setDict()# 初始化分词结果self.result = []def setDict(self):# 打开词典文件file = open("D:\\chineseDic.txt",mode='r')# 添加到词典中for line in file:self.Dict[line.split(',')[0]]=1#Dict可以O(1)查找,下面list是O(m)#self.Dict.append(line.split(',')[0])def MM(self, sentence):  # 正向最大匹配indexpos, Len = 0, self.MaxLenwhile indexpos < len(sentence):  # 顺序扫描str_ = sentence[indexpos:indexpos + Len]  # 从待切分语料中正向取长度为 MaxLen 的字串 str_if str_ in self.Dict or len(str_) == 1:  # 匹配成功,list和dict都是这样写self.result.append(str_)  # 将结果添加到result词典中indexpos, Len = indexpos + Len, self.MaxLen  # indexpos向后移动, Len复位为MaxLenelse:Len -= 1# 根据seg自动返回切分好的句子return "{}".format(self.seg).join(self.result)def RMM(self, sentence):  # 反向最大匹配indexpos, Len = len(sentence), self.MaxLenwhile indexpos > 0:# 从待切分语料中反向取长度为 MaxLen 的字串 str_str_ = sentence[indexpos - Len:indexpos]if str_ in self.Dict or len(str_) == 1:self.result.append(str_)  # 匹配成功indexpos, Len = indexpos - Len, self.MaxLen  # indexpos向前移动, Len复位else:Len -= 1# 根据seg自动返回切分好的句子return "{}".format(self.seg).join(self.result[::-1])def getResult(self, ans: str, seg: str):M = ans.split(seg)  # 标准答案集N = self.result  # 实际测试结果n = [i for i in M if i in N]  # M ∩ Ntry:P = len(n) / len(N)R = len(n) / len(M)F = (2 * P * R) / (P + R)except ZeroDivisionError:  # 一个词都没有分对P, R, F = 0, 0, 0# 百分号格式化(输出)return "结果: \nP:{:.3%}\nR:{:.3%}\nF:{:.3%}".format(P, R, F)def main():sentence = input("输入待分词句子: \n")MaxLen = int(input("MaxLen = "))seg = input("输入切分符号: ")ans = input("输入标准文本串: \n")print("MM:")MMCutter = CSegment(MaxLen=MaxLen, seg=seg)print(MMCutter.MM(sentence=sentence))print(MMCutter.getResult(ans=ans, seg=seg))print("RMM:")RMMCutter = CSegment(MaxLen=MaxLen, seg=seg)print(RMMCutter.RMM(sentence=sentence))print(RMMCutter.getResult(ans=ans, seg=seg))main()

自然语言处理--MM、RMM算法及Python 复习相关推荐

  1. 自然语言处理之中文分词逆向最大匹配算法(RMM算法)

    经过了一阶段的学习上课,现在已经开始开始在自然语言处理的道路上安心研究,最近看了一本叫<python自然语言处理实战核心技术与算法>,大致的溜了一遍,感觉写的很基础了,个人认为主要写的好的 ...

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

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

  3. 教程 | 理解和实现自然语言处理终极指南(附Python代码)

     教程 | 理解和实现自然语言处理终极指南(附Python代码) 时间 2017-02-16 14:41:39 机器之心 原文  http://www.jiqizhixin.com/article ...

  4. 《数据结构与算法:Python语言描述》一1.3算法和算法分析

    本节书摘来自华章出版社<数据结构与算法:Python语言描述>一书中的第1章,第1.3节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看 1.3算法 ...

  5. [强化学习代码笔记]Python复习

    文章目录 Python复习 1. 介绍 2. 编写规范 3. 基本语法 一切都是对象 查看帮助 空/否定 保留字 as assert del try...except...finally global ...

  6. python思想读后感_数据结构与算法:Python语言描述读后感1000字

    <数据结构与算法:Python语言描述>是一本由裘宗燕著作,机械工业出版社出版的平装图书,本书定价:CNY 45.00,页数:343,特精心从网络上整理的一些读者的读后感,希望对大家能有帮 ...

  7. 基于朴素贝叶斯的垃圾分类算法(Python实现)

    有代码和数据集的 https://blog.csdn.net/weixin_33734785/article/details/91428991 附有git库代码的 https://www.cnblog ...

  8. 手把手教你在多种无监督聚类算法实现Python(附代码)

    来源: 机器之心 本文约2704字,建议阅读6分钟. 本文简要介绍了多种无监督学习算法的 Python 实现,包括 K 均值聚类.层次聚类.t-SNE 聚类.DBSCAN 聚类. 无监督学习是一类用于 ...

  9. 八大排序算法的 Python 实现

    八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入 ...

最新文章

  1. XML中CDATA及其字符实体的使用
  2. Swift基础语法 、 元组(Tuple)
  3. c语言 数组指针,C语言数组名及指向数组指针的小结
  4. C语言-实现矩阵的转置-随机函数产生随机数并赋予数组中-190222
  5. python迭代器使用_Python迭代器的用法
  6. LeetCode 775. 全局倒置与局部倒置(归并排序/二分查找/一次遍历)
  7. linux 源码搭建lnmp_详解CentOS 7.0源码包搭建LNMP 实际环境搭建
  8. byte二维数组表示
  9. JAVA延迟执行(thread方式和timer方式)
  10. Linux系统下文件与目录操作
  11. 遥感影像预处理流程及基本概念介绍(辐射校正、辐射定标、大气校正、正射校正等)
  12. 概率算法/拉斯维加斯 蒙特卡洛 舍伍德算法
  13. android怎么监听多点触摸_android 手势监听和多点触摸 笔记
  14. elementui打包后出现图标乱码的问题解决
  15. 老男孩28期学员卞勃森决心书
  16. sonar代码质量检测告警“static“ base class members should not be accessed via derived types
  17. 重新认识Windows计算器Calc(MatLab计算替代品)——你所不知道的细节
  18. 关于PostgreSQL执行计划中的Bitmap Heap Scan、Bitmap Index Scan、Recheck Cond
  19. 15数字华容道解法 图解_数字华容道攻略(数字华容道最快解法图)
  20. 2021 HZNU Winter Training Day 17 (2018 German Collegiate Programming Contest (GCPC 18))

热门文章

  1. NDIS小端口驱动ndisEdge学习二——小端口驱动的初始化
  2. 给“四时有惑”播客招募几位志愿者
  3. 网络对抗技术_实验四_恶意代码技术
  4. IOTE 2019物联网嘉年华在深圆满落幕
  5. 【秋钓皮皮】 奔跑吧,皮皮!(有图了)
  6. MES系统对企业而言是必须的吗?
  7. 荣耀锐龙版笔记本怎么样?开箱评测了解一下
  8. 计算机考研跨审计好跨嘛,跨专业考研,快来看看你符不符合条件
  9. altium designer 10 的AD10Crakc.zip解压后没有patch.exe
  10. 微信 IOS系统 安卓时间格式