在自然语言处理当中,经常对数据集进行一些数据字符的替换,表情的替换,以便在tokenizer的时候不被识别成[unk],造成信息的缺失

常规方法使用python自带的replace方法实现,但数据量很大时,效率显得低了

比如下面的代码,处理60000条数据需要3+小时

from tqdm.notebook import tqdm
emoji_dict = {}
with open('/Users/xinyuuliu/Desktop/data/emoji/emoji_map_full.txt') as f_emoji:
emojilist = f_emoji.readlines()
for em in emojilist:
emoji,emoji_str = em.split(maxsplit=1)
emoji_dict[emoji] = emoji_str.strip()
# print(emoji_dict) bar = tqdm(enumerate(data['text']),total=len(data['text'])) for idx,text in bar:
for em in emoji_dict:
text = text.replace(em,emoji_dict[em])
data['text'][idx] = text
# if idx == 10:
# break  data

可以看到处理6%的数据已经14分钟了

 

如何加速,使用flashtext模块,如果会异步就更快了,这里我还没有实现异步 

pip install flashtext

from flashtext import KeywordProcessor
# 1. 初始化关键字处理器
keyword_processor = KeywordProcessor() # 2. 添加关键词
for em in emoji_dict:
keyword_processor.add_keyword(em, emoji_dict[em]) # 3. 替换关键词
bar = tqdm(enumerate(data['text']),total=len(data['text']))
for idx,text in bar:
data['text'][idx] = keyword_processor.replace_keywords(text)
# 4. 结果
data 

可以看到处理7%的数据用了7分钟,明显比replace快了一倍

看下替换效果:

替换完后的数据:

 

asyncio+flashtext异步替换字符串,这老快了

import asyncio
import flashtext async def replace_text(text, keyword_processor):
"""
异步替换文本函数
"""
replaced_text = keyword_processor.replace_keywords(text)
return replaced_text async def replace_text_in_list(text_list, keyword_processor):
"""
对列表中的文本进行异步替换
"""
tasks = []
for text in text_list:
task = asyncio.create_task(replace_text(text, keyword_processor))
tasks.append(task)
replaced_text_list = await asyncio.gather(*tasks)
return replaced_text_list if __name__ == '__main__':
text_list = ['hello world', 'this is a test', 'python is awesome']
keyword_processor = flashtext.KeywordProcessor()
keyword_processor.add_keyword('python', 'Java')
keyword_processor.add_keyword('world', 'universe') loop = asyncio.get_event_loop()
replaced_text_list = loop.run_until_complete(replace_text_in_list(text_list, keyword_processor))
print(replaced_text_list)

  

python flashtext字符串快速替换,自然语言处理加速的更多相关文章

  1. python 快速替换csv数据集字符串列表中的表情符号为空,asyncio,re,pandas

    传统的字符串列表替换字符串使用遍历非常慢 比如下面这段代码,如果处理几十万或上百万的数据集时,会非常的慢,几小时几天都可能 import re p = re.compile(u'['u'\U0001F ...

  2. python字符串内容替换的方法(转载)

    python字符串内容替换的方法 时间:2016-03-10 06:30:46来源:网络 导读:python字符串内容替换的方法,包括单个字符替换,使用re正则匹配进行字符串模式查找与替换的方法.   ...

  3. Python - 字符串的替换(interpolation) 具体解释

    字符串的插值(interpolation) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27054263 字符串的替换 ...

  4. Python replace() 和 re.sub() 字符串字符替换

    Python replace() 和 re.sub() 字符串字符替换 replace() testStr = 'aa:bb[cc' testStr.replace(':','_') 每次只能替换一个 ...

  5. python中字符串操作--截取,查找,替换

    python中,对字符串的操作是最常见的,python对字符串操作有自己特殊的处理方式. 字符串的截取 python中对于字符串的索引是比较特别的,来感受一下: s = '123456789' #截取 ...

  6. Python 的字符串格式化和颜色控制

    (部分内容源自武神博客和网络收集.) Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两 ...

  7. python之字符串类型的格式化

    python之字符串类型的格式化 要点:python字符串通过format()方法进行格式化处理.(Python语言同时支持两种字符串格式化方法,一种类似C语言中printf()函数的格式化方法,支持 ...

  8. Python格式化字符串~转

    Python格式化字符串 在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整理一下,以便索引. 格式化操作符(%) "%"是Python风格的字符串格式化操作 ...

  9. Python基础-字符串格式化_百分号方式_format方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  10. Python格式化字符串

    在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整理一下,以便索引. 格式化操作符(%) "%"是Python风格的字符串格式化操作符,非常类似C语言里的pr ...

随机推荐

  1. MP实现ID自增 &日志 &自动填充 & 逻辑删除 &乐观锁

    默认ID自增 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl 此时的依赖 <dep ...

  2. CodeIgniter3.chm 打包编译 需要 hhc.exe - php框架

    电子书地址 https://github.com/CodeIgniter-Chinese/rapid-php-application-development 我打包编译好了chm,https://fi ...

  3. bat 执行 窗口jar包

    bat 执行 窗口jar包 @echo off start javaw -jar .\yourname.jar exit

  4. PlayBook 详解

    4)Playbook 4.1)Playbook 介绍 PlayBook 与 ad-hoc 相比,是一种完全不同的运用 Ansible 的方式,类似与 Saltstack 的 state 状态文件.ad ...

  5. JavaXMail发送邮件功能实现

    原文:JavaXMail发送邮件功能实现 | Stars-One的杂货小窝 好久之前实现的邮件发送功能,一直没整理出来,考虑到之后有个项目需要,先整理一波 提示: 本文代码例子是使用Kotlin语言编 ...

  6. 除gRPC之外的另一个选择,IceRPC-支持QUIC

    作者引言 自从19年开始接处到RPC,当时完全没有相关概念,接触到的都是http,tcp等,当时公司用的是zeroc出品的ice框架,对应rpc非常强大,跨平台,跨语言.可惜的国内并不是主流,主流是g ...

  7. 开发一个本地的供需求平台软件小程序单靠广告费就能月入3w+,你觉得香不香!

    最近合作了一个客户,需求是把现成的这种网站包装成App,在各大应用商店也能下载,做用户留存. 需求不复杂,现在已经完工了.事后处于好奇我又分析了一下这个项目的商业模式发现还挺好的,看前台数据基本上已经 ...

  8. Android端Charles抓包

    目录介绍 01.下载安装 02.抓包代理设置 03.抓包Https操作 04.抓包原理介绍 05.抓包数据介绍 06.常见问题总结 07.Android拦截抓包 01.下载安装 下载地址(下载对应的平 ...

  9. Python实现简易版TCP代理

    什么是TCP代理 TCP代理是一种网络代理技术,它允许客户端和服务器之间通过一个位于中间的第三方TCP代理服务器进行通信.TCP代理的工作方式是客户端向代理服务器发送TCP连接请求,代理服务器将此请求 ...

  10. linux查看资源使用情况

    linux查看资源使用情况 top -c # 查看资源使用情况 top 输出如下内容 top - 14:54:21 up 95 days, 20:03, 3 users, load average: ...