题目描述
给定一个词典,比如[“杭州”,“西湖”,“博物馆”,“杭州西湖博物馆”,“我”]
对于输入的文本进分词:我在杭州的杭州西湖博物馆玩了一天
分词结果处理为如下形式的字符串: 我\W 在 杭州\W 的 杭州西湖博物馆\W 玩了一天
对于输入的文本进分词:我在杭州的杭州西湖博物玩了一天
分词结果处理为如下形式的字符串: 我\W 在 杭州\W 的 杭州\W 西湖\W 博物玩了一天
代码实现
s = "我在杭州的杭州西湖博物馆玩了一天"
s = "我在杭州的杭州西湖博物玩了一天"
record = ["杭州","西湖","博物馆","杭州西湖博物馆","我"]
# 将词表从最长的词到最短的词排序
record.sort(reverse=True, key=lambda x: len(x))
record_num = {}
# 对统一长度的单词进行统计
for word in record:length = len(word)if length in record_num.keys():record_num[length].append(word)else:record_num[length] = [word]# 对字符串进行切分
word_list = list(s)for k, v in record_num.items():# 从词典中最长的词开始遍历for word in v:for i in range(0, len(s)):# 当区间中子串可组成词典中的词时,合并这一段区间(之前被标记过的一定不会被组成)if ''.join(word_list[i:i+len(word)]) == word:word_list = word_list[:i] + [''.join(word_list[i:i+len(word)])+'\W'] + word_list[i+len(word):]print(''.join(word_list))