中文分词模拟器

题目描述

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

说明:

精确分词:字符串分词后,不会出现重叠。即"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())
相关推荐
du fei2 分钟前
C#文件操作
开发语言·c#
MPCTHU7 分钟前
二叉树、排序算法与结构图
数据结构·算法·排序算法
亓才孓13 分钟前
[leetcode]树的操作
算法·leetcode·职场和发展
月亮有痕迹诶13 分钟前
【C++】智能指针
开发语言·c++·c++11
搞不懂语言的程序员19 分钟前
装饰器模式详解
开发语言·python·装饰器模式
mosquito_lover124 分钟前
矿山边坡监测预警系统设计
人工智能·python·深度学习·神经网络·视觉检测
王禄DUT24 分钟前
化学方程式配平 第33次CCF-CSP计算机软件能力认证
开发语言·c++·算法
船长@Quant24 分钟前
PyTorch量化进阶教程:第二章 Transformer 理论详解
pytorch·python·深度学习·transformer·量化交易·sklearn·ta-lib
Yang-Never26 分钟前
Open GL ES ->纹理贴图,顶点坐标和纹理坐标组合到同一个顶点缓冲对象中进行解析
android·java·开发语言·android studio·贴图
wuqingshun31415926 分钟前
蓝桥杯 XYZ
数据结构·c++·算法·职场和发展·蓝桥杯