在自然语言处理当中,经常对数据集进行一些数据字符的替换,表情的替换,以便在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. Java基础全程复习笔记(值得参考)

    Java基础复习笔记 第01章:Java语言概述 1. Java基础学习的章节划分 第1阶段:Java基本语法 Java语言概述.Java的变量与进制.运算符.流程控制语句(条件判断.循环结构).br ...

  2. vue-cli-service build 时间戳 方便查看bug发布时间和项目发布时间对比

    vue.config.js let ret = '' const date = new Date() ret += date.getFullYear() ret += '-'+ (date.getMo ...

  3. C#使用Stateless和箭头控件实现状态机的控制及显示

    之前开发一个小工具,内部实现一个状态机,并显示状态机当前状态及状态间的转移过程.我使用了Stateless开源类库及一个开源自定义箭头控件.自定义箭头控件是HZHControls其中一个控件,我单独把 ...

  4. 四种方式实现点击chrome链接在ie中显示页面

    1.c++ socket通过浏览器在ie中打开指定url github源码:https://github.com/iamzken/cpp-open-ie 2.vb生成exe,url访问exe启动ie并 ...

  5. Git进阶命令-reset

    之前有关Git,写过一片文章: Git五个常见问题及解决方法 一.reset命令使用场景 有时候我们提交了一些错误的或者不完善的代码,需要回退到之前的某个稳定的版本,面对这种情况有两种解决方法: 解决 ...

  6. 检验实时3D像素流送平台好坏的七个标准!(下)

    上篇文章我们介绍了<检验实时3D像素流送平台质量的七个标准>中的前四个标准,本文我们将继续给您介绍检验像素流送平台质量的其他三个标准. 您的平台是通过云还是仅通过渲染的图像传输数据? 您的 ...

  7. 三维模型3DTile格式轻量化压缩文件大小的技术方法研究

    三维模型3DTile格式轻量化压缩文件大小的技术方法研究 倾斜摄影三维模型,由于数据量大.复杂度高,轻量化压缩成为其在网络传输和实时渲染中必不可少的环节.以下是几种常用的3DTile格式轻量化压缩技术 ...

  8. 说说Vue 3.0中Treeshaking特性?举例说明一下?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.是什么 Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术,专业术语叫 Dead code eliminat ...

  9. quartus之rom的IP测试

    quartus之rom的IP测试 1.rom的作用 rom,就是只读存储器,内部数据在下载电路时就已经确认,不能使用信号驱动更改,只能够读取,一般用于比较重要的配置数据.在quartus中,可以直接调 ...

  10. AXI-自定义IP-PS设计

    基于AXI4的自定义IP核的设计 1.实验目标 利用vivado中内置的AXI总线初始化的IP核设计工具,将自己设计的流水灯的PL代码打包成IP核外设,挂在PS上,通过PS上的按钮控制流水灯的开始和结 ...