在做推荐系统或者纯自然语言处理的过程中,都会接触到大量的非结构化数据。这些数据格式不统一、质量层次不齐,因此,在文本数据处理过程中一直都是一项非常耗费精力的工作。
除了要对文本数据进行预处理之外,文本数据的表示、向量分析、数据可视化都是一项非常麻烦的工作。
在此之前,首先需要利用pandas
等Python库去读取文本数据,然后加上复杂的中间处理逻辑,才能完成一整套文本数据的处理流程。
而今天要介绍的这个Python库可以一站式解决文本数据处理中遇到的各种问题,真正做到了从zero到hero。
Texthero库的名称是由text和hero组成,从它的名称就可以很直观的理解它的重点功能。
Texthero可以在pandas的基础之上进行使用,它是一种高度集成的Python库。因此,在使用过程中,很少会涉及到编程语言层面的障碍。
作为使用者,只需给定文本数据,使用Texthero,可以预处理文本数据,将其映射到向量中,并且可视化所获得的向量空间仅需几行。
Texthero具有如下功能:
在处理文本数据的过程中,会遇到各种各样的脏数据,例如,空格、数字、符号,通过Texthero,只需要1行代码即可把这些脏数据进行清理。
举个例子,有一行文本数据,This sèntencé (123 /) needs to [OK!] be cleaned!
,下面就来看一下清理过程。
>>> import texthero as hero
>>> import pandas as pd
>>> text = "This sèntencé (123 /) needs to [OK!] be cleaned! "
>>> s = pd.Series(text)
删除数字,
>>> s = hero.remove_digits(s)
>>> s
0 This sèntencé ( /) needs to [OK!] be cleaned!
删除括号,
>>> s = hero.remove_brackets(s)
>>> s
0 This sèntencé needs to be cleaned!
删除附加符号,例如,变音符号,
>>> s = hero.remove_diacritics(s)
>>> s
0 This sentence needs to be cleaned!
删除标点符号,
>>> s = hero.remove_punctuation(s)
>>> s
0 This sentence needs to be cleaned
删除额外的空格,
>>> s = hero.remove_whitespace(s)
>>> s
0 This sentence needs to be cleaned
现在来对比一下,清理前和清理后的数据区别,
>>> text = "This sèntencé (123 /) needs to [OK!] be cleaned! "
>>> text = "This sentence needs to be cleaned"
是不是发现数据干净多了?
也许,有同学会提出疑问“这么多行命令,太麻烦了吧?”
在Texthero中,也可以通过1行命令来完成数据预处理,
import texthero as hero
df = pd.read_csv(
"<your csv file>"
)
df['tfidf'] = (
df['text']
.pipe(hero.clean)
)
也就是说,调用一下clean
函数就可以完成清理。
我阅读了一下Texthero源码,发现,clean
函数包含了如下功能:
上述功能只需要1行代码就可以完成。
我认为数据预处理这项功能非常有价值,不仅可以在自然语言、推荐系统领域能够用到。涉及到处理离线数据的很多场景,都会涉及脏数据处理的问题,往往我们需要利用规则或者正则表达式的方式去处理,而利用Texthero很简单的就可以处理这些脏数据。
在自然语言处理方面,它支持如下功能:
Texthero在文本表示方面支持如下功能:
Texthero在向量空间分析方面支持如下功能:
另外,Texthero还支持文本数据可视化。
下面,就来以1个例子,来看一下Texthero的用法。
import texthero as hero
import pandas as pd
df = pd.read_csv(
"https://github.com/jbesomi/texthero/raw/master/dataset/bbcsport.csv"
)
df['tfidf'] = (
df['text']
.pipe(hero.clean)
.pipe(hero.tfidf)
)
df['kmeans_labels'] = (
df['tfidf']
.pipe(hero.kmeans, n_clusters=5)
.astype(str)
)
df['pca'] = df['tfidf'].pipe(hero.pca)
hero.scatterplot(df, 'pca', color='kmeans_labels', title="K-means BBC Sport news")
在这个示例中,就分别用到Texthero如下功能:
下面看一下效果,
如果是手动实现数据预处理、数据可视化、TF-IDF、聚类,那么代码量要比这样多上很多倍。
推荐阅读
AI开发效率倍增!让JupyterLab成为无所不能的开发神器
爬取10000+招聘网站数据,告诉你算法工程师应该选择哪个方向!
数据科学神器 | 一款极大提升数据分析效率的VS Code插件!
个人微信
欢迎各位一起讨论、一起学习,共同促进,感兴趣的可以加我个人微信。