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))
相关推荐
go546315846528 分钟前
本地部署 GitHub 上的 Python 人脸识别项目
开发语言·python·github
wjs20241 小时前
PHP 连接 Memcached 服务
开发语言
FreakStudio1 小时前
手把手教你用 MicroPython 玩转幻尔串口舵机,代码+教程全公开
python·嵌入式·大学生·面向对象·技术栈·电子diy·电子计算机
tekin2 小时前
基于 Python 开发在线多人游戏服务器案例解析
服务器·python·游戏·在线多人游戏服务器
Chandler243 小时前
C++11 智能指针:unique_ptr、shared_ptr和weak_ptr 功能特性 模拟实现
开发语言·c++
十八朵郁金香3 小时前
深入理解 JavaScript 中的 this 指向
开发语言·前端·javascript
一只自律的鸡3 小时前
C进阶 自定义类型
c语言·开发语言
让学习成为一种生活方式3 小时前
libGL.so.1: cannot open shared object file: No such file or directory-linux022
linux·开发语言·python
贵州晓智信息科技3 小时前
使用 Three.js 转换 GLSL 粒子效果着色器
开发语言·javascript·着色器
java1234_小锋4 小时前
一周学会Flask3 Python Web开发-Jinja2模板继承和include标签使用
python·flask·flask3