跳至主要内容

Textacy:Python 中文本数据清洗与规范化入门

了解 Textacy(一个 Python 库)如何简化机器学习中的文本数据预处理。认识其字符规范化、数据掩蔽等独特功能,并看看它与 NLTK、spaCy 等库的比较。
· 5分钟 阅读

使用 AI 探索

本教程由我们的社区成员贡献,已由 DataCamp 为确保清晰与准确进行编辑。

有意分享您的专业见解吗?我们非常期待!欢迎通过我们的 社区投稿表提交文章或想法。

作为数据从业者,您很清楚在任何机器学习项目中构建稳健的数据清洗与准备流程的重要性。然而,面对文本数据时,这样的流程尤为关键,因为文本数据具有独特挑战。诸如噪声数据、拼写错误、缩写、俚语和语法错误等问题都可能对机器学习模型的性能产生负面影响。

为了确保用于机器学习模型的文本数据准确、一致且无错误,精心设计的数据清洗与准备流程至关重要。通常包括一系列任务,如文本规范化、分词、停用词移除、词干提取、词形还原以及数据掩蔽。

尽管诸如NLTK、gensim 和 spaCy 等流行库提供了丰富的文本处理与清洗工具,但处理文本数据仍会带来一系列独特挑战,进而显著影响模型性能。这些挑战从字符规范化到数据掩蔽不一而足。虽然上述库可以应对这些问题,但往往需要投入大量时间和精力。

这正是 Textacy 大显身手之处。Textacy 是一个 Python 库,能够以简单易用的方式处理处理文本数据时常见的一系列问题。尽管其他库也提供类似功能,但在本场景下,Textacy 专注于解决字符规范化和数据掩蔽等特定问题,使其脱颖而出。

Textacy 字符规范化

字符规范化是将文本数据转换为标准格式的过程,在处理多语言文本数据时尤为重要。

Text = ‘ the cafe “Saint-Raphaël” is loca-/nted on Cote d’Azur.’

带重音的字符是文本规范化中的常见问题,可能严重影响机器学习模型的准确性。

问题在于人们并不总是统一使用带重音的字符,这会导致数据不一致。

例如,标记 "Saint-Raphaël" 与 "Saint-Raphael" 可能指代同一实体,但如果不进行规范化,它们将不会被识别为相同。此外,文本中常常包含由连字符连接的词,上文中的撇号也会给分词带来问题。针对这些问题,对文本进行规范化并用 ASCII 等价字符替换重音和花式字符是合理的做法。

我们将使用 Textacy 来实现这一目的,因为它提供了一组预定义的函数,能够以简便高效的方式解决该问题。下表展示了部分 Textacy 的预处理函数,这些函数可独立于其他库运行。

Function

Description

normalize _hyphentated_words

重新组合因换行而被分开的单词

normalize_quotation_marks

将各种花式引号替换为 ASCII 等价字符

normalize_unicode

统一 Unicode 中带重音字符的不同编码

remove_accents

将带重音字符替换为 ASCII

replace_emails

将电子邮件替换为 __EMAIL__

replace_urls

将 URL 替换为 __URL__

text = "The café "Saint-Raphaël" is loca-\nted on Cote dʼAzur."


import textacy
import textacy.preprocessing as tprep


def normalize(text):
   text = tprep.normalize_hyphenated_words(text)
   text = tprep.normalize_quotation_marks(text)
   text = tprep.normalize_unicode(text)
   text = tprep.remove_accents(text)
   return text

使用上述基于 Textacy 预定义预处理函数的 normalize 函数,可以以最小代价解决规范化问题。

print(normalize(text)

输出:

The cafe Saint-Raphael is located in Cote d' Azure

Textacy 数据掩蔽

文本数据中往往不仅包含普通单词,还包含多种标识符,如 URL、电子邮件地址或电话号码。有时我们恰恰对这些项目感兴趣。但在很多情况下,出于无关性或隐私考虑,移除或掩蔽这些信息会更好。

Textacy 提供了一些用于数据掩蔽的便捷替换函数,如上表所示。这些函数是预定义的,能够轻松掩蔽敏感或无关信息,而无需编写自定义正则表达式函数。

text = "Check out https://spacy.io/usage/spacy-101"print(replace_urls(text))

输出:

Check out __URL__

总结

本文展示了如何使用 Textacy 简化文本数据的预处理过程。借助其内置函数,Textacy 能够轻松应对字符规范化、数据掩蔽等常见预处理挑战。

通过精简预处理流程,Textacy 为专注于自然语言处理更复杂、更具挑战性的部分铺平了道路。无论您在做情感分析、主题建模,还是其他任何 NLP 任务,Textacy 都能帮助您快速高效地让数据做好分析准备。

因此,下次当您面临预处理挑战时,不妨考虑使用 Textacy 来简化工作流,为自己节省宝贵的时间与精力。

如果您觉得这份 Textacy 指南有帮助,并希望深入了解文本数据预处理与自然语言处理,欢迎报名 DataCamp 的Python 自然语言处理基础课程。

主题