说明
在处理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']