指定关键词进行字符串切分

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 指定关键词进行字符串切分

引言

说起字符串分割,我们第一反应会是字符串中的split方法,如果给定了关键词去分割一个字符串,该怎么操作呢?最近写到了一个很有意思的题目,分享给大家:


一、题目描述

题目看起来很简单:

假设有一个字典,其中包括:“大数据”、“互联网”、“技术”、“数据”、“结构化”、“处理”、“难点”、“分析”、“很大”、“合适”、“平台”。

用关键词对输入的句子用进行词汇切分。

例如输入句子是“互联网大数据技术与分析平台”,按关键词分割

输出:互联网/大数据/技术/与/分析/平台。

其他例子如下:


二、题目分析:

这道题看起来不难啊,这个字典其实就是个关键词字符串构成的列表。第一想法是用in关键字,把输入的句子先按两个两个切割,用in的关键字去和列表判断,再三三判断。可是这样有一个问题:比如输入的互联网大数据技术与分析平台,这里的“与”不在列表里面,是要单独分割出来的,如果用in关键字与其他混为一谈就没办法判断了。并且,“大数据”和“数据”应该切分为两个词,即“大数据”不可切分为“大”“数据”。


所以,想到了另一种做法:

1. 先将字符串“互联网大数据技术与分析平台”这个整体与列表匹配,匹配不上的话,删去字符串最右边的字符,变成“互联网大数据技术与分析平”

1. 再去匹配,匹配不上再删去最右边的字符,变成“互联网大数据技术与分析”

1. 再去匹配……不断重复这个过程,直达匹配上“互联网”为止 。

1. 将原字符串减去第一次匹配到的字符串,即“互联网大数据技术与分析平台”减去“互联网”变为“大数据技术与分析”。

1. 得到的结果再进行循环,再进行匹配,并且把每一次的最终匹配结果存在一个列表里面。

1. 缝合列表,输出结果。

这里要注意:以上述例子为例,这里的“也”由于在列表里匹配不到,会报索引的错误,需要捕获异常,这个功能在func_2函数中有所说明。


三、代码

代码如下:

1. import copy
2. dic_list = ["大数据", "互联网", "技术", "数据", "结构化", "处理", "难点", "分析", "很大", "合适", "平台"]
3. str_input = input("请输入一个句子:")
4. str_list = list(str_input)
5. str_input_2 = copy.copy(str_input)
6. fin_list = []
7. fin_list_2 = []
8. def func_1(str_input):
9. while True:
10. if len(str_input) != 1:
11. if str_input not in dic_list:
12.                 str_input = str_input[:-1:1]
13. else:
14. return str_input
15. else:
16. return str_input
17. def func_2():
18. global str_input
19. while True:
20. try:
21.             fin_list_2.append(func_1(str_input))
22.             length = len(func_1(str_input))
23.             str_input = str_input[length::1]
24. if len("".join(fin_list_2)) == len(str_input_2):
25. break
26. except IndexError:
27.             fin_list_2.append(str_input[0])
28.             str_input = str_input.replace(str_input[0],"")
29. if len("".join(fin_list_2)) == len(str_input_2):
30. break
31.     fin_str = "/".join(fin_list_2)
32. return fin_str
33. print("原句子是:",str_input_2)
34. print("切分结果是",func_2())



四、输出结果:

五、总结:

 

1、这里的字典其实就是一个关键词字符串构成的列表。


2、删除字符串最右边一位用字符串的切片方法:str_input = str_input[:-1:1]


3、在输入的字符串删除初步匹配的结果:


length =len(func_1(str_input))


str_input =str_input[length::1]


4、func_1函数的作用是,你只要输入一个句子,他能返回第一个词(如果第一个词不在列表里面,会报索引错误)


5、fun_2函数的作用是,在原来输入的字符串中不断缩减,提取出来关键词,并且捕获异常。捕获异常的关键代码,即把那个字给提取出来:


6、简单来说,func_1算是造了一个工具,func_2一直在调用这个工具,不断产生结果,并且他还有捕获异常的功能。


7、“\”.join(fin_list)将列表缝合起来,返回最终结果。



相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
人工智能
《Zarya of the Dawn》的尴尬遭遇及美国版权局的应对
《Zarya of the Dawn》的尴尬遭遇及美国版权局的应对
752 3
《Zarya of the Dawn》的尴尬遭遇及美国版权局的应对
|
存储
【C盘瘦身】如何清理Wechat Files,经常使用电脑微信用户必知的常识!
【C盘瘦身】如何清理Wechat Files,经常使用电脑微信用户必知的常识!
3239 0
【C盘瘦身】如何清理Wechat Files,经常使用电脑微信用户必知的常识!
|
消息中间件 缓存 NoSQL
如何实现消费幂等 ?
这篇文章,我们聊聊消息队列中非常重要的最佳实践之一:**消费幂等**。
如何实现消费幂等 ?
|
XML 安全 搜索推荐
大数据之 Solr 集群搭建
Solr是一个基于Java的高性能全文搜索服务器,扩展自Lucene,提供丰富查询语言和优化的查询性能。它支持通过HTTP接口以XML格式进行索引和搜索操作。在集群环境中,涉及解压软件包,配置环境变量,修改Zookeeper参数,文件分发,启动Solr和Zookeeper服务。建议使用非root用户启动,确保安全。启动后,通过WEB UI验证Solr集群部署是否成功,遇到问题如找不到solr.xml文件,可通过指定-Dsolr.solr.home参数解决。
400 8
Vue3,setup的使用需要搭配return进行使用,Vue3中带setup的script的标签和不带能不能合并到一起,export default不能放到setup里会报错,script
Vue3,setup的使用需要搭配return进行使用,Vue3中带setup的script的标签和不带能不能合并到一起,export default不能放到setup里会报错,script
|
数据可视化 算法 C++
脑研究、脑网络分析、可视化的工具箱有哪些?
本文列举并简要介绍了用于脑研究、脑网络分析和可视化的多种工具箱,如Brain Connectivity Toolbox、bctpy、人类连接组项目等,为神经科学研究者提供了丰富的分析和可视化大脑网络的工具选择。
1379 2
脑研究、脑网络分析、可视化的工具箱有哪些?
|
网络协议 Unix Linux
网安人必须人手一份的《Linux私房教程》,GitHub星标286K!
Linux是一套免费使用和自由传播的操作系统内核,是一个基于POSIX和Unix的多用户、多任务支持多线程和多CPU的操作系统内核。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统内核。 作为网络安全的初学者,Linux基础知识和常用命令是我们的必备技能,我们不能只会操作Windows相关的工具。一方面很多网站都是基于Linux环境搭建,比如LAMP,其安全性更好;另一方面,很多命令或工具都集成在了Linux相关环境中,比如Kali等。 今天给小伙伴们分享一份Linux私房教程,这份
|
机器学习/深度学习 存储 算法
卷积神经网络(CNN)的数学原理解析
卷积神经网络(CNN)的数学原理解析
362 2
卷积神经网络(CNN)的数学原理解析
MybatisPlus--IService接口基本用法,MP提供了Service接口,save(T) 这里的意思是新增了一个T, saveBatch 是批量新增的意思,saveOrUpdate是增或改
MybatisPlus--IService接口基本用法,MP提供了Service接口,save(T) 这里的意思是新增了一个T, saveBatch 是批量新增的意思,saveOrUpdate是增或改
|
搜索推荐 Shell
idea如何Ctrl + F查找内容,当前文件内容,Ctrl+R全局替换C t r l + S h i f t + R
idea如何Ctrl + F查找内容,当前文件内容,Ctrl+R全局替换C t r l + S h i f t + R