203、【数组】NLP分词实现(Python)

题目描述

给定一个词典,比如["杭州","西湖","博物馆","杭州西湖博物馆","我"]​

对于输入的文本进分词:我在杭州的杭州西湖博物馆玩了一天​

分词结果处理为如下形式的字符串: 我\W 在 杭州\W 的 杭州西湖博物馆\W 玩了一天​

对于输入的文本进分词:我在杭州的杭州西湖博物玩了一天​

分词结果处理为如下形式的字符串: 我\W 在 杭州\W 的 杭州\W 西湖\W 博物玩了一天

代码实现

python 复制代码
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))
相关推荐
时来天地皆同力.1 小时前
Java面试基础:概念
java·开发语言·jvm
豌豆花下猫1 小时前
让 Python 代码飙升330倍:从入门到精通的四种性能优化实践
后端·python·ai
夏末蝉未鸣011 小时前
python transformers库笔记(BertForTokenClassification类)
python·自然语言处理·transformer
hackchen1 小时前
Go与JS无缝协作:Goja引擎实战之错误处理最佳实践
开发语言·javascript·golang
铲子Zzz3 小时前
Java使用接口AES进行加密+微信小程序接收解密
java·开发语言·微信小程序
小小小新人121233 小时前
C语言 ATM (4)
c语言·开发语言·算法
Two_brushes.3 小时前
【linux网络】网络编程全流程详解:从套接字基础到 UDP/TCP 通信实战
linux·开发语言·网络·tcp/udp
weixin_418813873 小时前
Python-可视化学习笔记
笔记·python·学习
小白学大数据3 小时前
R语言爬虫实战:如何爬取分页链接并批量保存
开发语言·爬虫·信息可视化·r语言
争不过朝夕,又念着往昔3 小时前
Go语言反射机制详解
开发语言·后端·golang