使用jieba、前向最大匹配算法、后向最大匹配算法分词

使用jieba、前向最大匹配算法、后向最大匹配算法分词

今天我们开始分词,我整理了王家卫电影里的一些台词,总共有79条,分别出自比较有名的《东邪西毒》、《春光乍泄》、《重庆森林》,这个数据集是这样的。
在这里插入图片描述

前向最大匹配算法

这个算法的思想非常简单,就是从句子的最开始找词典中与它匹配的最长的词,然后不断向后推进,直到完成整个句子的单词配对。

  1. 建立词典
  2. 循环查找配对单词

首先先来建立词典,按理说应该是手动建立,不过这么多词,确实有点为难俺老丁了,就用jieba分词结果来建立词典吧
代码如下:

import jieba
import re
import jieba.posseg as pseg

filepath1 = '王家卫电影台词.txt'
dict=[]
##创建字典
with open(filepath1, 'r', encoding = 'utf-8') as sourceFile:
    lines = sourceFile.readlines()
    for line in lines:
        line1 = line.replace(' ','')     # 去掉文本中的空格
        pattern = re.compile("[^\u4e00-\u9fa5^a-z^A-Z^0-9]")    #只保留中英文、数字,去掉符号
        line2= re.sub(pattern,'',line1)      #把文本中匹配到的字符替换成空字符
        seg = jieba.lcut(line2, cut_all = False)
        for i in range(len(seg)):
            if seg[i] not in dict:
                dict.append(seg[i])
    print(len(dict)) 
    print(dict)

来看一下这个建立好的词典:
一共是619个词
在这里插入图片描述接下来就可以进行分词啦,逐行读取来分一下:

##前向最大匹配算法
def forword_Match(text, Dict):
    word_list = []
    pi = 0    #初始位置
    #找出字典中的最长的词的长度
    m = max([len(word) for word in Dict])
    while pi != len(text):
        n = len(text[pi:])    #当前指针到字符串末尾的长度
        if n < m:
            m = n
        for index in range(m,0,-1):      #从当前 pi 起取 m 个汉字作为词 
            if text[pi:pi+index] in Dict:
                word_list.append(text[pi:pi+index])
                pi = pi + index         # 根据词的长度修改指针pi
                break
    print('/'.join(word_list),len(word_list))
##逐句输出分词结果和每句话分词个数
with open(filepath1, 'r', encoding = 'utf-8') as sourceFile:
    lines = sourceFile.readlines()
    for line in lines:
        line1 = line.replace(' ','')     # 去掉文本中的空格
        pattern = re.compile("[^\u4e00-\u9fa5^a-z^A-Z^0-9]")    #只保留中英文、数字,去掉符号
        line2= re.sub(pattern,'',line1)      #把文本中匹配到的字符替换成空字符
        forword_Match(line2, dict) 

来看一下分词结果吧
在这里插入图片描述

jieba算法

jieba分词就非常简单啦,直接分词就好啦。

##逐句输出分词结果和每句话分词个数
##逐句输出分词结果和每句话分词个数
with open(filepath1, 'r', encoding = 'utf-8') as sourceFile:
    lines = sourceFile.readlines()
    for line in lines:
        line1 = line.replace(' ','')     # 去掉文本中的空格
        pattern = re.compile("[^\u4e00-\u9fa5^a-z^A-Z^0-9]")    #只保留中英文、数字,去掉符号
        line2= re.sub(pattern,'',line1)      #把文本中匹配到的字符替换成空字符
        seg = jieba.lcut(line2, cut_all = False)
        print("/".join(seg),len(seg))

来看看结果吧
在这里插入图片描述

后向最大匹配算法

##逆向最大匹配
def back_Match(text, Dict):
    word_list = []
    pi = len(text) - 1
    m = max(len(word) for word in Dict)
    while pi >= 0:
        n = len(text[0:pi+1])
        if n < m:
            m = n
        for index in range(m-1,-1,-1):
            if text[pi-index:pi+1] in Dict:
                word_list.append(text[pi-index:pi+1])
                pi = pi - index -1
                break

    print('/'.join(word_list[::-1]))
with open(filepath1, 'r', encoding = 'utf-8') as sourceFile:
    lines = sourceFile.readlines()
    for line in lines:
        line1 = line.replace(' ','')     # 去掉文本中的空格
        pattern = re.compile("[^\u4e00-\u9fa5^a-z^A-Z^0-9]")    #只保留中英文、数字,去掉符号
        line2= re.sub(pattern,'',line1)      #把文本中匹配到的字符替换成空字符
        back_Match(line2, dict) 

完整的项目和数据集已经上传到资源啦,不过我发现一个问题,虽然我都设置成了0积分下载,但是CSDN不知道内部怎么操作的,全部变成了2积分下载,所以大家如果没有积分,可以私聊我哦,或者评论我。
这次的我就设置成1.9元下载了,因为不太明白那个积分怎么操作的,如果不着急下载,私聊或者评论我都可以哦,可以私发一下哦。
链接: https://download.csdn.net/download/weixin_46570668/16679077.

Cocos Creator是一个功能强大的游戏开发引擎,它允许开发者创建各种类型的游戏,包括街霸游戏。但是,Cocos Creator本身并不提供街霸游戏的源码,开发者需要自己设计和编写游戏的逻辑、界面以及各种游戏元素。 要创建一个街霸游戏,首先需要进行角色的设计和动画制作。可以使用Cocos Creator内置的动画编辑器来创建和编辑角色的动画效果。然后,开发者需要设计游戏场景,包括背景、道路、建筑等等,可以使用Cocos Creator提供的场景编辑器进行创建和布置。 在街霸游戏中,角色之间的战斗是重要的内容。为了实现战斗机制,需要编写适当的代码来实现攻击、防御、技能等动作的触发和效果。开发者可以使用Cocos Creator的脚本编辑器来编写游戏逻辑脚本,实现战斗机制,并确保游戏的平衡性和可玩性。 此外,街霸游戏还可能包括多人对战模式,可以使用Cocos Creator的网络模块来实现多人对战功能。开发者还可以使用音效编辑工具来添加游戏音效,以提升游戏的体验和乐趣。 总体来说,创建一款街霸游戏需要进行多个方面的设计和开发工作,包括角色设计、动画制作、场景布置、战斗机制实现、网络功能等等。Cocos Creator作为游戏开发引擎,为开发者提供了一系列强大的功能和工具,可以帮助开发者创建出高质量、富有创意的街霸游戏。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫头丁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值