正则表达式是数据科学家工具箱中的基本技能之一,它们在数据预处理、自然语言处理、模式匹配、网络爬虫和数据提取等多种日常任务中都非常有用。本文旨在列出一些可以通过正则表达式自动化的平凡任务。
销售和市场团队经常需要从大型文本文档中找到或提取电子邮件和其他联系信息。如果手动进行这项工作,可能会非常繁琐。这正是正则表达式大放异彩的地方。以下是如何编写一个基本的电子邮件提取器的示例代码:
import re
with open('text.txt') as f:
text = f.read()
print(text)
print(re.findall(r"[\w.-]+@[\w.-]+", text))
这段代码使用re.findall()函数从文档中提取所有符合以下格式的字符串:任何字符(a-z)、任何数字(0-9)和符号'_',后跟'@'符号,然后可以再次有任何字符、任何数字,特别是点。
数据收集是数据科学家工作的一个非常常见的部分,鉴于生活在互联网时代,从网上找到数据比以往任何时候都容易。人们可以简单地从维基百科等网站抓取数据。但是,网络爬虫也有自己的问题——下载的数据通常是混乱的,充满了噪音。这正是正则表达式可以有效地使用的地方!
import re
re.findall(r">([\w\s()]*?)", html)
一旦使用上述代码,将迅速获得主题列表。同样,可以使用以下正则表达式提取所有这些页面的链接:
import re
re.findall(r"\/wiki\/[\w-]*", html)
执行上述代码后,将获得所有这些维基百科页面的链接。如果将上述链接与http://wikipedia.com组合,将能够导航到所有这些维基百科页面。
大多数现实世界的数据都与某种日期或时间列相关联。这些列为模型携带了有用的信息,但由于日期和时间有多种格式,因此处理这些数据变得困难。可以使用正则表达式来处理这些不同的格式吗?让找出答案!
import re
re.findall(r"\d{4}", date)
上述代码将直接从日期中给出年份。同样,可以一次性提取月份和日期信息!
在处理文本数据时,尤其是在自然语言处理中,处理的文本来自各种不同的来源。例如,可以有从网络抓取的数据,或者手动收集的数据,或者使用OCR技术从图像中提取的数据等!
import re
import nltk
# 移除链接
newString = re.sub(r'(https|http)?:\/\/(\w|\.|\/|\?|\=|\&|\%)*\b', '', newString)
# 移除数字(电话号码)
newString = re.sub("[^a-zA-Z]", " ", newString)
# 移除停用词
tokens = [w for w in newString.split() if not w in stop_words]
# 移除短词
long_words = [i for i in tokens if len(i) >= 4]
return " ".join(long_words).strip()