今天在找资料的时候无意间查找一个跟眼下工作不太相关但是一眼看到就很感兴趣的内容,讲解的是文本中数据的查找替换等的一个操作工具。之前做了比较多的相关的工作是网页html处理的工作,这里经常替换或者查找指定文本字符串的时候我们都是采用正则表达式的方法来完成的,书写相对来说也是比较灵活的,直到今天发现了flashtext,我才意识到原来同样的事情可以用不一样的方式提高很多的效率也更加便捷了。

鉴于工作时间的限制这里没有太多时间去分析原算法作者的思路,这里先给出来原作者论文地址:

Replace or Retrieve Keywords In Documents At Scale

如果对这方面感兴趣的话可以下载来看看,论文也是比较简洁的,但是这丝毫不妨碍flashtext的强大。

在Github社区已经有flashtext的实现,具体可以看这里。

对于flashtext的介绍可以看这篇博客。

我今天主要是依据官网文档的介绍简单的使用一下,因为接下来的工作里很可能就会使用到,所以先学会实用为主。

下面是具体的实践,相应地注释都已经加上了。

#!usr/bin/env python
# encoding:utf-8'''
__Author__:沂水寒城
功能: flashText 学习使用
地址: https://github.com/yishuihanhan/flashtext
介绍: 在文本处理工作中,经常会遇上要替换一些字符串我们使用re正则表达式或者是其他方法都可以完成这项工作,但是处理时间会随着数据量的增大而增大,flashText提供了一种新颖的解决思路,可以保证无论数据量多大处理的时间都是不变的(突显数据结构和算法的强大)
'''import sys
reload(sys)
sys.setdefaultencoding("utf-8")
from flashtext import KeywordProcessordef extractKW(one_str):'''关键词抽取'''kw_list=['Baby','Honest','APPLE','orange','Banana']keyword_processor=KeywordProcessor()for one_kw in kw_list:keyword_processor.add_keyword(one_kw)keywords_found=keyword_processor.extract_keywords(one_str)print 'keywords_found: 'print keywords_founddef replaceKW(one_str):'''关键词替换'''kw_list=['Baby','Honest','APPLE','orange','Banana']keyword_processor=KeywordProcessor()for one_kw in kw_list:keyword_processor.add_keyword(one_kw)#第一个参数是原有的关键词,第二个参数是新指定替换的关键词keyword_processor.add_keyword('apple','Basketball')keyword_processor.add_keyword('orange','tennis')new_sentence=keyword_processor.replace_keywords(one_str)print 'old_sentence: 'print one_strprint 'new_sentence: 'print new_sentencedef IgnoreKW(one_str):'''忽略指定关键词'''keyword_processor=KeywordProcessor(case_sensitive=True)keyword_processor.add_keyword('Apple','HUAWEI')keyword_processor.add_keyword('orange')keywords_found=keyword_processor.extract_keywords(one_str)print 'keywords_found: 'print keywords_foundprint '——|'*10keyword_processor=KeywordProcessor(case_sensitive=False)keyword_processor.add_keyword('Apple','HUAWEI')keyword_processor.add_keyword('orange')keywords_found=keyword_processor.extract_keywords(one_str)print 'keywords_found: 'print keywords_founddef spanKW(one_str):'''跨度关键词抽取,即:返回结果中不仅包含关键词,还包含关键词的起、止位置索引信息'''keyword_processor=KeywordProcessor()keyword_processor.add_keyword('Apple','HUAWEI')keyword_processor.add_keyword('orange')keywords_found=keyword_processor.extract_keywords(one_str,span_info=True)print 'keywords_found: 'print keywords_founddef extraInfo():'''基于关键词抽取获取额外的信息'''keyword_processor=KeywordProcessor()keyword_processor.add_keyword('Taj Mahal', ('Monument', 'Taj Mahal'))keyword_processor.add_keyword('Delhi', ('Location', 'Delhi'))res=keyword_processor.extract_keywords('Taj Mahal is in Delhi.')print 'res: 'print resdef cleanKW(one_str):'''No clean name for Keywords官方文档的解释,没看出来跟直接抽取有什么不同'''keyword_processor=KeywordProcessor()keyword_processor.add_keyword('Apple')keyword_processor.add_keyword('orange')keywords_found = keyword_processor.extract_keywords(one_str)print 'keywords_found: 'print keywords_founddef addMoreKWs():'''一次性添加多个关键词'''keyword_processor=KeywordProcessor()keyword_dict={"fruit": ["apple", "banana","orange","watermelon"],"ball": ["tennis", "basketball","football"]}keyword_processor.add_keywords_from_dict(keyword_dict)keyword_processor.add_keywords_from_list(["apple", "banana"])res=keyword_processor.extract_keywords('I like apple and watermelon but football')print 'res:'print resdef removeKW():'''移除关键词'''keyword_processor = KeywordProcessor()keyword_dict={"fruit": ["apple", "banana","orange","watermelon"],"ball": ["tennis", "basketball","football"]}keyword_processor.add_keywords_from_dict(keyword_dict)print(keyword_processor.extract_keywords('I like apple and watermelon'))keyword_processor.remove_keyword('banana')keyword_processor.remove_keywords_from_dict({"food": ["bread"]})keyword_processor.remove_keywords_from_list(["basketball"])res=keyword_processor.extract_keywords('I am a basketball player and like orange')print 'res:'print resdef countNUM():'''计数'''keyword_processor=KeywordProcessor()keyword_dict={"fruit": ["apple", "banana","orange","watermelon"],"ball": ["tennis", "basketball","football"]}keyword_processor.add_keywords_from_dict(keyword_dict)print 'kw_nums: 'print len(keyword_processor)def checkExists():'''检查当前处理器中指定关键词是否存在'''keyword_processor = KeywordProcessor()keyword_processor.add_keyword('BABY', 'LOVE')print 'LOVE' in keyword_processorkeyword_processor.get_keyword('apple')keyword_processor['orange']='orange'print keyword_processor['orange']def getAllKW():'''获取处理器中所有的关键词'''keyword_processor = KeywordProcessor()keyword_processor.add_keyword('BABY', 'LOVE')keyword_processor.add_keyword('apple', 'orange')keyword_processor.add_keyword('big', 'small')print keyword_processor.get_all_keywords()def changeKW():'''设置或添加字符作为单词字符的一部分,即:改变原有的关键词'''keyword_processor=KeywordProcessor()keyword_processor.add_keyword('Apple')before_kw=keyword_processor.extract_keywords('I love Apple/And orange.')keyword_processor.add_non_word_boundary('/')after_kw=keyword_processor.extract_keywords('I love Apple/And orange.')print 'before_kw: 'print before_kwprint 'after_kw: 'print after_kwif __name__=='__main__':one_str="BABY,I like apple,do you like orange?"extractKW(one_str)print '-*'*50replaceKW(one_str)print '-*'*50IgnoreKW(one_str)print '-*'*50spanKW(one_str)print '-*'*50extraInfo()print '-*'*50cleanKW(one_str)print '-*'*50addMoreKWs()print '-*'*50removeKW()print '-*'*50countNUM()print '-*'*50checkExists()print '-*'*50getAllKW()print '-*'*50changeKW()print '-*'*50

结果如下:

keywords_found:
['Baby', 'APPLE', 'orange']
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
old_sentence:
BABY,I like apple,do you like orange?
new_sentence:
Baby,I like Basketball,do you like tennis?
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
keywords_found:
['orange']
——|——|——|——|——|——|——|——|——|——|
keywords_found:
['HUAWEI', 'orange']
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
keywords_found:
[('HUAWEI', 12, 17), ('orange', 30, 36)]
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
res:
[('Monument', 'Taj Mahal'), ('Location', 'Delhi')]
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
keywords_found:
['Apple', 'orange']
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
res:
['apple', 'fruit', 'ball']
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
['fruit', 'fruit']
res:
['fruit']
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
kw_nums:
7
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
False
orange
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
{'baby': 'LOVE', 'big': 'small', 'apple': 'orange'}
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
before_kw:
['Apple']
after_kw:
[]
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
[Finished in 0.1s]

觉得还是蛮不错的,之后有时间继续研究学习。

超大规模文本数据清洗、查找、匹配神器之python模块flashtext学习使用相关推荐

  1. Python 模块 UUID 学习使用

    Python 模块 UUID 学习使用 一.UUID介绍 UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的 ...

  2. python模块subprocess学习

    subprocess模块介绍 subprocess是python创建子进程的工具,其实和c中的fork出一个子进程,然后在子进程中运行exec执行另外一个进程很类似. subprocess包中有很多方 ...

  3. 【打卡-Coggle竞赛学习2023年1月】文本相似度匹配

    文章目录 ## Part4 文本相似度匹配 ### 背景介绍 ### 数据说明 ### 评估方式 ### 学习打卡 - 任务1:数据集读取 - 任务2:文本数据分析 - 任务3:文本相似度(统计特征) ...

  4. Python中re(正则表达式)模块函数学习

    2019独角兽企业重金招聘Python工程师标准>>> Python正则表达式指南 今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的 ...

  5. python 爬虫基础学习

    原址 摘要: From:https://piaosanlang.gitbooks.io/spiders/content/ 爬虫入门初级篇 IDE 选择: PyCharm(推荐).SublimeText ...

  6. python pyquery不规则数据的抓取_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...

    爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...

  7. linux搜索文件内容含有星号,文本内容查找grep、文件查找find、正则匹配

    一.文本内容查找工具 grep grep   egrep (文本过滤)   fgrep (不支持正则) 对文本的内容按照指定的匹配模式基于行来进行筛选 格式     grep [选项] 模式 文件 选 ...

  8. java 文本查找_Java基于正则表达式实现查找匹配的文本功能【经典实例】

    本文实例讲述了Java基于正则表达式实现查找匹配的文本功能.分享给大家供大家参考,具体如下: REMatch.java: package reMatch; import java.util.regex ...

  9. python 爬虫 标签文本beautifullsoup_【Python爬虫】学习BeautifulSoup

    Beautiful Soup 基本介绍Beautiful Soup 是一个HTML/XML 的解析器,主要用于解析和提取 HTML/XML 数据. 它是基于HTML DOM 的,会载入整个文档,解析整 ...

  10. shell脚本编程神器之awk语法案例详解

    AWK入门指南 文章目录 shell脚本编程神器之awk语法案例详解 安装AWK AWK 起步示例 AWK程序的结构 执行 awk 程序 awk 的错误提示 简单输出 打印每一行 打印特定行 NF,字 ...

最新文章

  1. python爬百度翻译-爬虫 python爬取百度翻译接口 超详细附源码
  2. cookies和session
  3. 什么是springboot框架
  4. vue导出Excel(二)
  5. Python 分析Nginx 日志并存入MySQL数据库(单线程)
  6. AcWing 285. 没有上司的舞会(树形DP)
  7. 内外网双网卡同时上网
  8. c语言有坐标判断正方形,正方形
  9. 计算机无法找到wifi,笔记本无线网络找不到,教您怎么解决笔记本找不到无线网络...
  10. veu项目中下载图片到本地
  11. 如何给pdf添加目录
  12. 个人所得税java程序怎么编写_个人所得税Java实现代码
  13. 一位老学长的真实互联网校招求职心路历程~
  14. 嵌入式 - 瑞萨宣讲
  15. 联想G510 U盘启动
  16. 数据挖掘分析考试笔记
  17. ubuntu系统下C语言编写简单程序
  18. JVM速补知识,还不来抱大腿!
  19. Centos7安装和配置Mysql5.7_CentOS7安装和配置MySQL5.7
  20. Java基于JSP的高校教材管理系统

热门文章

  1. 精益质量管理之做好质量管理工作的三大管理手法
  2. 关于Kafka幂等producer的讨论
  3. xcode 4.5中设置程序名字多语言
  4. 午夜时分的51CTO博客与白天有什么不同?
  5. 删除数组中重复的数字
  6. 页面滚动可视区域的获取
  7. 初识java atomic
  8. pandas如何去掉时间列的小时只保留日期
  9. JavaScript 基础一
  10. JBOSS集群技术升级版解决方案分享(图示篇)