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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*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的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
5月前
|
Linux
C 统计英文文本word(单词)个数
关于状态机的文章请自行百度,这里主要是在统计时用到了2个状态,IN是代表字符是属于word内,OUT代表当前字符不属于word内,那么什么时候word的个数需要增加1呢,即是status从OUT到IN时(说明当前指针马上就要走到word里了)
37 1
|
5月前
|
机器学习/深度学习
单词 Affiliate 的含义和使用场景介绍
单词 Affiliate 的含义和使用场景介绍
单词 affirmative 的含义和使用场景介绍
单词 affirmative 的含义和使用场景介绍
|
数据采集 开发者
|
算法
字符矩阵内单词搜索
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
52 0
7-4 统计一行文本的单词个数
7-4 统计一行文本的单词个数
101 0
检索字符串中的字符串
检索字符串中的字符串
73 0
|
JavaScript 前端开发 API
全文检索与高亮关键词匹配,用replace就够了
全文关键词检索高亮,这个在业务中常有的功能,比如浏览器默认就有个功能,关键词搜索就会匹配你检索的文字,并且会给你高亮,这是怎么实现的呢?
292 0
全文检索与高亮关键词匹配,用replace就够了
|
存储 SQL JSON
APIJSON - 功能符、数组关键词、对象关键词、全局关键词简表速查
APIJSON - 功能符、数组关键词、对象关键词、全局关键词简表速查
619 0
APIJSON - 功能符、数组关键词、对象关键词、全局关键词简表速查