FMM和BMM的python代码实现

  1. FMM和BMM的编程实现,其实两个算法思路都挺简单,一个是从前取最大词长度的小分句,查找字典是否有该词,若无则分句去掉最后面一个字,再次查找,直至分句变成单词或者在字典中找到,并将其去除,然后重复上述步骤。BMM则是从后取分句,字典中不存在则分句最前去掉一个字,也是重复类似的步骤。

  2. readCorpus.py

    import sys
    output = {}
    with open('语料库.txt', mode='r', encoding='UTF-8') as f:for line in f.readlines():if line is not None:# 去除每行的换行符t_line = line.strip('\n')# 按空格分开每个词words = t_line.split(' ')for word in words:# 按/分开标记和词t_word = word.split('/')# 左方括号去除tf_word = t_word[0].split('[')if len(tf_word) == 2:f_word = tf_word[1]else:f_word = t_word[0]# 若在输出字典中,则value+1if f_word in output.keys():output[f_word] = output[f_word]+1# 不在输出字典中则新建else:output[f_word] = 1big_word1 = t_line.split('[')for i in range(1, len(big_word1)):big_word2 = big_word1[i].split(']')[0]words = big_word2.split(' ')big_word = ""for word in words:# 按/分开标记和词t_word = word.split('/')big_word = big_word + t_word[0]# 若在输出字典中,则value+1if big_word in output.keys():output[big_word] = output[big_word]+1# 不在输出字典中则新建else:output[big_word] = 1f.close()with open('output.txt', mode='w', encoding='UTF-8') as f:while output:minNum = sys.maxsizeminName = ""for key, values in output.items():if values < minNum:minNum = valuesminName = keyf.write(minName+": "+str(minNum)+"\n")del output[minName]
    f.close()
    
  3. BMM.py

    MAX_WORD = 19
    word_list = []
    ans_word = []
    with open('output.txt', mode='r', encoding='UTF-8')as f:for line in f.readlines():if line is not None:word = line.split(':')word_list.append(word[0])
    f.close()
    #num = input("输入句子个数:")
    #for i in range(int(num)):
    while True:ans_word = []try:origin_sentence = input("输入:\n")while len(origin_sentence) != 0:len_word = MAX_WORDwhile len_word > 0:# 从后读取最大词长度的数据,若该数据在字典中,则存入数组,并将其去除if origin_sentence[-len_word:] in word_list:ans_word.append(origin_sentence[-len_word:])len_sentence = len(origin_sentence)origin_sentence = origin_sentence[0:len_sentence-len_word]break# 不在词典中,则从后取词长度-1else:len_word = len_word - 1# 单词直接存入数组if len_word == 0:if origin_sentence[-1:] != ' ':ans_word.append(origin_sentence[-1:])len_sentence = len(origin_sentence)origin_sentence = origin_sentence[0:len_sentence - 1]for j in range(len(ans_word)-1, -1, -1):print(ans_word[j] + '/', end='')print('\n')except (KeyboardInterrupt, EOFError):break
    
  4. FMM.py

    MAX_WORD = 19
    word_list = []
    with open('output.txt', mode='r', encoding='UTF-8')as f:for line in f.readlines():if line is not None:word = line.split(':')word_list.append(word[0])
    f.close()
    #num = input("输入句子个数:")
    #for i in range(int(num)):
    while True:try:origin_sentence = input("输入:\n")while len(origin_sentence) != 0:len_word = MAX_WORDwhile len_word > 0:# 读取前最大词长度数据,在数组中则输出,并将其去除if origin_sentence[0:len_word] in word_list:print(origin_sentence[0:len_word]+'/', end='')origin_sentence = origin_sentence[len_word:]break# 不在字典中,则读取长度-1else:len_word = len_word - 1# 为0则表示为单词,输出if len_word == 0:if origin_sentence[0] != ' ':print(origin_sentence[0]+'/', end='')origin_sentence = origin_sentence[1:]print('\n')except (KeyboardInterrupt, EOFError):break
    
  5. 效果图

  • BMM.py(不含大粒度分词)

  • BMM.py(含大粒度分词)

  • FMM.py(不含大粒度分词)

  • FMM.py(含大粒度分词)

我们可以观察到含大粒度分词的情况将香港科技大学,北京航空航天大学等表意能力强的词分在了一起而不是拆开,更符合分词要求。

转载于:https://www.cnblogs.com/FZfangzheng/p/10952070.html

FMM和BMM的python代码实现相关推荐

  1. 用python实现FMM和BMM

    词是自然语言中能够独立运用的最小单位,是自然语言处理的基本单位. 自动分词分析就是利用计算机对自然语言的形态进行分析,判断词的结构和类别等. 最大匹配法(Maximum Match Method) 正 ...

  2. 关于创建zeromq消息队列,设置和更改IP地址,远程可以访问,不只是本地链接。python代码。

    关于zeromq的创建,绑定本地,和绑定其他客户端的方法. 网上一大堆关于zmq的通信模式的介绍,包括三种类型,具体我就不在描述. 但是他们给的demo,都是创建本地作为server服务端,也作为cl ...

  3. python代码怎么写出色_如何写出更具有Python风格的代码,五分钟教会你!

    我们都喜欢 Python,因为它让编程和理解变的更为简单.但是一不小心,我们就会忽略规则,以非 Pythonic 方式编写一堆垃圾代码,从而浪费 Python 这个出色的语言赋予我们的优雅.Pytho ...

  4. OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式...

    OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式 以最简单的4 x 5三通道图像为例,其在内存中Mat类型的数据组织形式如下: 每一行的每一列 ...

  5. 主成分分析(PCA)Python代码实现

    主成分分析(Principal Components Analysis, PCA)简介可以参考: http://blog.csdn.net/fengbingchun/article/details/7 ...

  6. resnet keras 结构_Wandb用起来,一行Python代码实现Keras模型可视化

    大数据文摘出品 来源:wandb 编译:邢畅.宁静 在训练神经网络的过程中,我们可能会希望可视化网络的性能和中间的结构,很多可视化代码的冗长复杂使得我们望而却步,有没有一行代码就能解决可视化的所有问题 ...

  7. c# typescript_在任何IDE中从C#,Java或Python代码获取TypeScript接口的简单方法

    c# typescript by Leonardo Carreiro 莱昂纳多·卡雷罗(Leonardo Carreiro) 在任何IDE中从C#,Java或Python代码获取TypeScript接 ...

  8. Python代码编写过程中有哪些重要技巧?

    近几年,转行做Python技术岗的人越来越多,大家对于Python的关注越来越高,尤其是工作后,很多人都想知道Python代码编写过程中有哪些重要技巧?小编告诉大家,在编写Python代码过程中,除了 ...

  9. Python 代码规范

    前言 Python 学习之旅,先来看看 Python 的代码规范,让自己先有个意识,而且在往后的学习中慢慢养成习惯 目录 Python代码规范 一.简明概述 1.编码 如无特殊情况, 文件一律使用 U ...

最新文章

  1. linux nor flash 读写,9.2 NorFLASH读写实验——M25PExx
  2. Tensorflow快餐教程(12) - 用机器写莎士比亚的戏剧
  3. 端口安全原理介绍及配置命令
  4. matlab 日期加小时数_MATLAB时间与日期的基本操作
  5. rust(52)-二叉最大堆BinaryHeap
  6. java流式传输对象_Java性能:面向教学与流式传输
  7. 第九十八期:TIOBE11月榜单:C、Swift、Go、D与Rust起起伏伏
  8. yml和properties的加载顺序
  9. qt利用QSplitter任意拆分窗口
  10. (13)Verilog程序结构-基本语法(一)(第3天)
  11. linux :Tar 命令参数详解
  12. Junit +cucumber 运行报错 initiallizationError
  13. 甘肃SEO优化:关键词选择 是否“咨询”过关键词规划师以及seo优化技术大牛是怎么练成的
  14. linux查看服务器cpu主频,linux 下查看服务器CPU的信息
  15. 基于python的智能家居系统_基于MicroPython的智能家居实验平台设计
  16. Android PowerManagerService简单分析
  17. Zeppelin安装教程
  18. 等保(公安部82号令)
  19. 二维坐标基本变换(平移、旋转、缩放、镜像、阵列)
  20. hmm念什么_HMM是什么意思

热门文章

  1. linux dd新建文件,linux dd命令 创造一个文件
  2. 网站色彩设计与搭配技术(下)
  3. ROS机器人操作系统教学与应用的思考
  4. 复制互联网——2010全球最值得模仿的230个网站
  5. 论文研读1——对抗样本(Adversarial Example)综述(2018版)
  6. freeswitch部署及网关调试
  7. 如何将图片制作成画中画特效
  8. C/C++动态申请空间方式
  9. java网课|final权限修饰符
  10. Qt 设置背景图片