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

258 阅读4分钟

目录

引言

一、题目描述

二、题目分析:

三、代码

四、输出结果:

​五、总结:


引言

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


一、题目描述


题目看起来很简单:

  • 假设有一个字典,其中包括:“大数据”、“互联网”、“技术”、“数据”、“结构化”、“处理”、“难点”、“分析”、“很大”、“合适”、“平台”。
  • 用关键词对输入的句子用进行词汇切分。
  • 例如输入句子是“互联网大数据技术与分析平台”,按关键词分割
  • 输出:互联网/大数据/技术/与/分析/平台。

其他例子如下:


二、题目分析:

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

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

  1. 先将字符串“互联网大数据技术与分析平台”这个整体与列表匹配,匹配不上的话,删去字符串最右边的字符,变成“互联网大数据技术与分析平”
  2. 再去匹配,匹配不上再删去最右边的字符,变成“互联网大数据技术与分析”
  3. 再去匹配……不断重复这个过程,直达匹配上“互联网”为止 。
  4. 将原字符串减去第一次匹配到的字符串,即“互联网大数据技术与分析平台”减去“互联网”变为“大数据技术与分析”。
  5. 得到的结果再进行循环,再进行匹配,并且把每一次的最终匹配结果存在一个列表里面。
  6. 缝合列表,输出结果。

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


三、代码


代码如下:

import copy
dic_list = ["大数据", "互联网", "技术", "数据", "结构化", "处理", "难点", "分析", "很大", "合适", "平台"]
str_input = input("请输入一个句子:")
str_list = list(str_input)
str_input_2 = copy.copy(str_input)
fin_list = []
fin_list_2 = []
def func_1(str_input):
    while True:
        if len(str_input) != 1:
            if str_input not in dic_list:
                str_input = str_input[:-1:1]
            else:
                return str_input
        else:
            return str_input
def func_2():
    global str_input
    while True:
        try:
            fin_list_2.append(func_1(str_input))
            length = len(func_1(str_input))
            str_input = str_input[length::1]
            if len("".join(fin_list_2)) == len(str_input_2):
                break
        except IndexError:
            fin_list_2.append(str_input[0])
            str_input = str_input.replace(str_input[0],"")
            if len("".join(fin_list_2)) == len(str_input_2):
                break
    fin_str = "/".join(fin_list_2)
    return fin_str
print("原句子是:",str_input_2)
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)将列表缝合起来,返回最终结果。

好啦,就分享到这里啦,感兴趣的小伙伴欢迎评论区交流!