python正向最大匹配分词和逆向最大匹配分词的实例
作者:yan456jie 发布时间:2021-11-24 22:39:58
标签:python,正向,逆向,分词
正向最大匹配
# -*- coding:utf-8 -*-
CODEC='utf-8'
def u(s, encoding):
'converted other encoding to unicode encoding'
if isinstance(s, unicode):
return s
else:
return unicode(s, encoding)
def fwd_mm_seg(wordDict, maxLen, str):
'forward max match segment'
wordList = []
segStr = str
segStrLen = len(segStr)
for word in wordDict:
print 'word: ', word
print "\n"
while segStrLen > 0:
if segStrLen > maxLen:
wordLen = maxLen
else:
wordLen = segStrLen
subStr = segStr[0:wordLen]
print "subStr: ", subStr
while wordLen > 1:
if subStr in wordDict:
print "subStr1: %r" % subStr
break
else:
print "subStr2: %r" % subStr
wordLen = wordLen - 1
subStr = subStr[0:wordLen]
# print "subStr3: ", subStr
wordList.append(subStr)
segStr = segStr[wordLen:]
segStrLen = segStrLen - wordLen
for wordstr in wordList:
print "wordstr: ", wordstr
return wordList
def main():
fp_dict = open('words.dic')
wordDict = {}
for eachWord in fp_dict:
wordDict[u(eachWord.strip(), 'utf-8')] = 1
segStr = u'你好世界hello world'
print segStr
wordList = fwd_mm_seg(wordDict, 10, segStr)
print "==".join(wordList)
if __name__ == '__main__':
main()
逆向最大匹配
# -*- coding:utf-8 -*-
def u(s, encoding):
'converted other encoding to unicode encoding'
if isinstance(s, unicode):
return s
else:
return unicode(s, encoding)
CODEC='utf-8'
def bwd_mm_seg(wordDict, maxLen, str):
'forward max match segment'
wordList = []
segStr = str
segStrLen = len(segStr)
for word in wordDict:
print 'word: ', word
print "\n"
while segStrLen > 0:
if segStrLen > maxLen:
wordLen = maxLen
else:
wordLen = segStrLen
subStr = segStr[-wordLen:None]
print "subStr: ", subStr
while wordLen > 1:
if subStr in wordDict:
print "subStr1: %r" % subStr
break
else:
print "subStr2: %r" % subStr
wordLen = wordLen - 1
subStr = subStr[-wordLen:None]
# print "subStr3: ", subStr
wordList.append(subStr)
segStr = segStr[0: -wordLen]
segStrLen = segStrLen - wordLen
wordList.reverse()
for wordstr in wordList:
print "wordstr: ", wordstr
return wordList
def main():
fp_dict = open('words.dic')
wordDict = {}
for eachWord in fp_dict:
wordDict[u(eachWord.strip(), 'utf-8')] = 1
segStr = ur'你好世界hello world'
print segStr
wordList = bwd_mm_seg(wordDict, 10, segStr)
print "==".join(wordList)
if __name__ == '__main__':
main()
来源:https://blog.csdn.net/Yan456jie/article/details/78788783


猜你喜欢
- 关于主机名转IP地址只记住两点即可:1、英特网协议一直都是用4字节的IP将包转发给目的地;2、至于主机名是如何转换成IP地址的,这是操作系统
- PHP保存session默认的是采用的文件的方式来保存的,这仅仅在文件的空间开销很小的windows上是可以采用的,但是如果我们采用uinx
- Golang 性能基准测试Golang 中的性能基准测试是使用标准库 testing 来实现的,编写性能测试代码是很容易的:创建性能测试文件
- 对于程序开发新手来说,一个最常见的困惑是测试的主题。他们隐约觉得“单元测试”是很好的,而且他们也应该做单元测试。但他们却不懂这个词的真正含义
- MD5(Message-Digest Algorithm 5) 模块用于计算信息密文(信息摘要),得出一个128位的密文。sha模块跟md5
- 公司的一个项目中,有许多地方需要延时执行一些可重复性的函数(动作),就写了下面这段函数。 呵呵,不知道取什么意思更为确切些,就定为了:Loo
- 写在前面的话作为有个 Python 菜逼,之前一直用的 Pycharm,但是在主题这一块怎么调整都感觉要么太骚,看起来不舒服,要么就是简直不
- 本文实例讲述了JS小游戏的象棋暗棋源码,分享给大家供大家参考。具体如下:游戏运行后如下图所示:Javascript 部分:/** chine
- 与事件循环进行交互,最基本的方式就是任务,任务封装了协程和自动跟踪它的状态。任务是Future类的子类,所以其它协程可以等待任务完成,或当这
- 先来定义分页语句将要用到的几个参数:int currentPage ; //当前页int pageRecord ; //每页显示记录数以之前
- 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAS
- 其实SQLServer提供了一个sp_spaceused的系统存储过程可以实现该功能,下面就是调用的SQL: 代码如下:crea
- binascii模块用法binascii模块用于在二进制和ASCII之间转换>> import binascii# 将binar
- 前言在使用keras时候报错Keyerror ‘acc',这是一个keras版本问题,acc和accuracy本意是一样的,但是不同
- 下面代码即是VBScript代码在服务器端编译后的显示内容,如果我们把这段代码保存成静态文件(HTML)或JS文件,那么上一篇提出的问题就迎
- 1.Python代码import cx_Oracletns=cx_Oracle.makedsn('127.0.0.1',
- 为什么我写ASP分页教程要提到AJAX呢,因为我们要多练习一下编程过程中,结构化的重要性. 再加上很多朋友对分页感到很高深,所以一直都不敢去
- Go 编写定时器和定时任务在 项目开发当中,可能会遇到这样的场景:1 A任务需要在多久之后执行一次(定时器)2.B任务需要每隔多长时间执行一
- 在上一篇博客中,已经将环境搭建好了。现在,我们利用搭建的环境来运行一条测试脚本,脚本中启动一个计算器的应用,并实现加法的运算。创建模拟器在运
- 本文旨在讲述 RPC 框架设计中的几个核心问题及其解决方法,并基于 Golang 反射技术,构建了一个简易的 RPC 框架。项目地址:Tin