前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >flashtext:大规模文本数据清洗利器

flashtext:大规模文本数据清洗利器

作者头像
AiTechYun
发布2019-05-14 16:26:52
2.1K0
发布2019-05-14 16:26:52
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号

文本分析文本数据挖掘快速入门】时候经常遇到同意多形词,如 BigApple/NewYork/NN 都可能代指纽约市,当我们统计纽约市出现的次数的时候我们需要分别统计这三个词的数目并进行加总。

flashtext对于处理上面的问题非常擅长,而且运算速度特别快。清洗数据的速度,我们可以拿正则表达式来和flashtext作比较

我们发现运行正则表达式来清洗数据,速度会随着数据量线性下降,而flashtext的清洗性能基本保持不变。

一、安装

代码语言:javascript
复制
pip3 install flashtext

二、官方文档

代码语言:javascript
复制
https://flashtext.readthedocs.io/en/latest/

三、常用用法

3.1 不清洗,直接提取关键词

代码语言:javascript
复制
from flashtext import KeywordProcessor
keyword_processor = KeywordProcessor()
keyword_processor.add_keyword('Big Apple')
keyword_processor.add_keyword('Bay Area')
keywords_found = keyword_processor.extract_keywords('I love big Apple and Bay Area.')
keywords_found

Run

代码语言:javascript
复制
['Big Apple', 'Bay Area']

3.2 同义词指代,抽取关键词

像big apple 和new york都代指纽约,我们需要先清洗好数据,统一用一个词语代指纽约,再去抽取关键词语。这就用到 add_keyword方法。

代码语言:javascript
复制
from flashtext import KeywordProcessor
kw_processor = KeywordProcessor()
#给关键词处理器对象中加入待识别的关键词
kw_processor.add_keyword('Big Apple', 'New York')
kw_processor.add_keyword('Bay Area')
#对文本数据进行关键词提取
kws_found = kw_processor.extract_keywords('I love Big Apple and Bay Area.')
kws_found

Run

代码语言:javascript
复制
['New York', 'Bay Area']

3.3 多个同义词指代

如果同义词太多,可以用字典构建映射关系。使用到的方法是addkeywordsfrom_dict

代码语言:javascript
复制
from flashtext import KeywordProcessor
keyword_processor = KeywordProcessor()
keyword_dict = {"java": ["java_2e", "java programing"],
                "product management": ["PM", "product manager"]}
                #从字典中加入映射关系keyword_processor.add_keywords_from_dict(keyword_dict)
                #从列表中加入关键词keyword_processor.add_keywords_from_list(["java", "python"])
                keyword_processor.extract_keywords('I am a product manager for a java_2e and python platform')

Run

代码语言:javascript
复制
['product management', 'java', 'python']

3.4 移除关键词

有的时候我们可能加错了关键词,想去除之前添加的关键词。这就用到removekeyword/removekeywords/removekeywordsfromdict/removekeywordsfromlist

代码语言:javascript
复制
from flashtext import KeywordProcessor
keyword_processor = KeywordProcessor()keyword_dict = {    "java": ["java_2e", "java programing"],
    "product management": ["PM", "product manager"]}
    keyword_processor.add_keywords_from_dict(keyword_dict)print(keyword_processor.extract_keywords('I am a product manager for a java_2e platform'))
keyword_processor.remove_keyword('java_2e')
keyword_processor.remove_keywords_from_dict({"product management": ["PM"]})
keyword_processor.remove_keywords_from_list(["java programing"])
keyword_processor.extract_keywords('I am a product manager for a java_2e platform')

Run

代码语言:javascript
复制
['product management', 'java']['product management']

3.5 关键词个数

查看自定义的关键词个数

代码语言:javascript
复制
from flashtext import KeywordProcessor
keyword_processor = KeywordProcessor()keyword_dict = {    "java": ["java_2e", "java programing"],
    "product management": ["PM", "product manager"]}
keyword_processor.add_keywords_from_dict(keyword_dict)print(len(keyword_processor))

Run

代码语言:javascript
复制
4

3.6 判断某个词是否存在于关键词处理器中

代码语言:javascript
复制
from flashtext import KeywordProcessor
keyword_processor = KeywordProcessor()
keyword_processor.add_keyword('j2ee', 'Java')
print('j2ee' in keyword_processor)

Run

代码语言:javascript
复制
True

add_keyword()中的传入的顺序不同,结果也不同

代码语言:javascript
复制
print(keyword_processor.get_keyword('j2ee'))
print(keyword_processor.get_keyword('Java'))

Run

代码语言:javascript
复制
JavaNone

这个比较简单

代码语言:javascript
复制
keyword_processor['colour'] = 'color'
print(keyword_processor['colour'])

Run

代码语言:javascript
复制
color

3.7 获取关键词映射关系

代码语言:javascript
复制
from flashtext import KeywordProcessor
keyword_processor = KeywordProcessor()
keyword_processor.add_keyword('j2ee', 'Java')
keyword_processor.add_keyword('colour', 'color')
keyword_processor.get_all_keywords()

Run

代码语言:javascript
复制
{'j2ee': 'Java', 'colour': 'color'}

3.8 替换关键词

代码语言:javascript
复制
from flashtext import KeywordProcessor
kw_processor2 = KeywordProcessor()
# 给关键词处理器对象中加入待识别的关键词
kw_processor2.add_keyword('New Delhi', 'NCR region')
kw_processor2.add_keyword('Big Apple','New York')  
# 注意顺序#对文本数据进行关键词替换
new_sentence = kw_processor2.replace_keywords('I love Big Apple and new delhi.')
new_sentence

Run

代码语言:javascript
复制
'I love New York and NCR region.'

3.9 关键词的位置

flashtext还能计算待考察词语的开始与结束的索引值

代码语言:javascript
复制
from flashtext import KeywordProcessor
keyword_processor = KeywordProcessor()
keyword_processor.add_keyword('Big Apple', 'New York')
keyword_processor.add_keyword('Bay Area')
keywords_found = keyword_processor.extract_keywords('I love big Apple and Bay Area.', span_info=True)
keywords_found

Run

代码语言:javascript
复制
[('New York', 7, 16), ('Bay Area', 21, 29)]

3.10 额外的信息

根据关键词,还能抽取一些额外的信息,如时间、位置等。但这些功能在中文中可能不太适用,英文问题不大。

代码语言:javascript
复制
from flashtext import KeywordProcessor
kp = KeywordProcessor()
kp.add_keyword('Taj Mahal', ('Monument', 'Taj Mahal'))
kp.add_keyword('Delhi', ('Location', 'Delhi'))
kp.extract_keywords('Taj Mahal is in Delhi.')

Run

代码语言:javascript
复制
[('Monument', 'Taj Mahal'), ('Location', 'Delhi')]
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、安装
  • 二、官方文档
  • 三、常用用法
    • 3.1 不清洗,直接提取关键词
      • 3.2 同义词指代,抽取关键词
        • 3.3 多个同义词指代
          • 3.4 移除关键词
            • 3.5 关键词个数
              • 3.6 判断某个词是否存在于关键词处理器中
                • 3.7 获取关键词映射关系
                  • 3.8 替换关键词
                    • 3.9 关键词的位置
                      • 3.10 额外的信息
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档