中文分词模拟器

题目描述

给定一个连续不包含空格的字符串,该字符串仅包含英文小写字母及英文标点符号(逗号、分号、句号),同时给定词库,对该字符串进行精确分词。

说明:

精确分词:字符串分词后,不会出现重叠。即"ilovechina",不同词库可分割为"i,love,china","ilove,china",不能分割出现重叠的"i,ilove,china",i 出现重叠

标点符号不成词,仅用于断句

词库:根据外部知识库统计出来的常用词汇例:dictionary = ["i", "love", "china", "lovechina", "ilove"]

分词原则:采用分词顺序优先且最长匹配原则

"ilovechina",假设分词结果 [i,ilove,lo,love,ch,china,lovechina],则输出 [ilove,china]

错误输出:[i,lovechina],原因:"ilove" > 优先于 "lovechina" 成词

错误输出:[i,love,china],原因:"ilove" > "i"遵循最长匹配原则

输入描述

第一行输入待分词语句 "ilovechina"

字符串长度限制:0 < length < 256

第二行输入中文词库 "i,love,china,ch,na,ve,lo,this,is,this,word"

词库长度限制:1 < length < 100000

输出描述

按顺序输出分词结果 "i,love,china"

用例1

输入

ilovechina

i,love,china,ch,na,ve,lo,this,is,the,word

输出

i,love,china

用例2

输入

iat

i,love,china,ch,na,ve,lo,this,is,the,word,beauti,tiful,ful

输出

i,a,t

说明

单个字母,

不在词库中且不成词则输出单个字母

用例3

输入

ilovechina,thewordisbeautiful

i,love,china,ch,na,ve,lo,this,is,the,word,beauti,tiful,ful

输出

i,love,china,the,word,is,beauti,ful

说明

标点符号为英文标点符号

python 复制代码
import re
old_sentences =list(re.split(r'[,.;]',input()))
words = list(re.split(r'[,.;]',input()))
#后续测试发现sentences中可能因为再末尾存在(逗号,分号,句号)导致有空字符串
sentences = [sentence for sentence in old_sentences if sentence!='']
words = set(words)
def match():
    results=[]
    while len(sentences)>0:
        sentence = sentences.pop(0)
        l = len(sentence) #
        while l>0:
            temp = sentence[:l]#因为要优先匹配长的
            if temp in words:#是否存在该单词
                results.append(temp)
                words.remove(temp) #如果每个单词只能用一次的话就得移除,经过测试发现必须去除

                #如果字串词汇只是句子的部分,则剩余部分还要继续
                if l<len(sentence):
                    sentences.insert(0,sentence[l:])
                break
            l-=1

        if l==0:#没找到就输出单个字母
            results.append(sentence[0])
            if len(sentence)>1:
                sentences.insert(0,sentence[1:])

    return  ','.join(results)
print(match())
相关推荐
EterNity_TiMe_2 分钟前
【论文复现】神经网络的公式推导与代码实现
人工智能·python·深度学习·神经网络·数据分析·特征分析
雨中rain2 分钟前
贪心算法(1)
算法·贪心算法
不爱学习的YY酱9 分钟前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
Stara051110 分钟前
Git推送+拉去+uwsgi+Nginx服务器部署项目
git·python·mysql·nginx·gitee·github·uwsgi
zongzi_49414 分钟前
二次封装的天气时间日历选择组件
开发语言·javascript·ecmascript
平头哥在等你20 分钟前
求一个3*3矩阵对角线元素之和
c语言·算法·矩阵
飞滕人生TYF23 分钟前
动态规划 详解
算法·动态规划
kikyo哎哟喂24 分钟前
Java 代理模式详解
java·开发语言·代理模式
_OLi_26 分钟前
力扣 LeetCode 106. 从中序与后序遍历序列构造二叉树(Day9:二叉树)
数据结构·算法·leetcode
duration~30 分钟前
SpringAOP模拟实现
java·开发语言