Python一些可能用的到的函数系列121 用正则批量替代KV

文章介绍了在处理NLP标记数据时,如何使用正则表达式和BIO模式进行文本替换。原始方法可能在进一步处理中产生问题,因此提出了一种通过找到匹配项并分别插入B和I的解决方案,以避免列表转换时的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

在处理NLP的标记数据时,可能会用到。

内容

具体来说,有一段文本x, 然后有逗号连接的字符串是目标y,需要按照BIO方式进行替换。

import re
%%timeit 
dic = {'小明': 'xm', '小框': 'xk'}
def rep(match):
    return dic[match.group(1)]

s = '小明和小框'
pat = '(' + '|'.join(list(dic.keys())) + ')'
print(re.sub(pat, rep, s))

xm和xk
xm和xk
57.6 µs ± 8.79 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

这种方式可以替换,但容易产生别的问题。在进一步处理中,字符串将转为列表,所以这样会有问题。

于是采用这种方式解决

pat1 = '小明|小框'

%%timeit
for i in re.finditer(pat1, s):
    the_start = i.start()
    the_end = i.end()
    s_list[the_start] = 'B'
    s_list[the_start +1 : the_end] = 'I'

2.51 µs ± 333 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

s_list


['B', 'I', '和', 'B', 'I']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值