华为OD-2024年E卷-中文分词模拟器[200分] -- python

问题描述:

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

说明:

  1. 精确分词:字符串分词后,不会出现重叠。即"ilovechina",不同词库可分割为"i,love,china","ilove,china",不能分割出现重叠的"i,ilove,china",i 出现重叠
  2. 标点符号不成词,仅用于断句
  3. 词库:根据外部知识库统计出来的常用词汇例:dictionary = ["i", "love", "china", "lovechina", "ilove"]
  4. 分词原则:采用分词顺序优先且最长匹配原则"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"

复制代码
ilovechina
i,love,china,ch,na,ve,lo,this,is,the,word

i,love,china

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

i,a,t
#说明:单个字母,不在词库中且不成词则输出单个字母

解题思路:

按照分词规则:

  1. 分词顺序优先、不能重叠:分词从头开始,分完一个进入下一个
  2. 最长匹配原则:优先匹配最长符合条件的单词
  3. 英文标点符号:处理时将其加入ans结果列表,在输出ans时,判断是否需要额外补逗号','

可能的问题:由示例2可看出并没有保证词库单词能完全匹配目标字符串,如果当前最长匹配的单词,后续却没有其他单词能够与其组成目标字符串,会输出单个字母

代码实现:

python 复制代码
s = input()
arr = input().split(',')
ans = []
i = 0
while i < len(s):
    #标点符号处理:直接加入ans并跳过后续单词处理
    if not ('a' <= s[i] <= 'z'):
        ans.append(s[i])
        i += 1
        continue
    temp = s[i]
    curr_temp = s[i]
    curr_i = i+1
    #从当前字符开始,最长匹配,若curr_temp能在词库找到,则更新加入ans的temp及当前索引
    for j in range(i+1,len(s)):
        curr_temp += s[j]
        if curr_temp in arr:
            curr_i = j+1
            temp = curr_temp
    i = curr_i
    ans.append(temp)
#判断是否需要输出逗号','
for i in range(len(ans)):
    print(ans[i],end = '',sep = '')
    if i+1 < len(ans) and 'a' <= ans[i][0] <= 'z' and 'a' <= ans[i+1][0] <= 'z':
        print(',',end = '',sep = '')
相关推荐
数研小生11 小时前
亚马逊商品列表API详解
前端·数据库·python·pandas
独好紫罗兰11 小时前
对python的再认识-基于数据结构进行-a005-元组-CRUD
开发语言·数据结构·python
jianghua00111 小时前
Python中的简单爬虫
爬虫·python·信息可视化
喵手12 小时前
Python爬虫实战:针对Python官网,精准提取出每一个历史版本的版本号、发布日期以及对应的文档/详情页链接等信息,并最终清洗为标准化的CSV文件!
爬虫·python·爬虫实战·零基础python爬虫教学·python官方数据采集·采集历史版本版本号等信息·导出csv文件
databook12 小时前
像搭积木一样思考:数据科学中的“自下而上”之道
python·数据挖掘·数据分析
luoluoal12 小时前
基于python的医疗问句中的实体识别算法的研究(源码+文档)
python·mysql·django·毕业设计·源码
啊阿狸不会拉杆12 小时前
《机器学习导论》第 9 章-决策树
人工智能·python·算法·决策树·机器学习·数据挖掘·剪枝
喵手12 小时前
Python爬虫实战:城市停车收费标准自动化采集系统 - 让停车费透明化的技术实践(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·城市停车收费标准·采集城市停车收费数据·采集停车数据csv文件导出
无水先生12 小时前
python函数的参数管理(01)*args和**kwargs
开发语言·python
py小王子12 小时前
dy评论数据爬取实战:基于DrissionPage的自动化采集方案
大数据·开发语言·python·毕业设计