数据管道(Data Pipelines)难以构建和管理,因此最好使用特定的工具来帮助我们完成任务。Apache Airflow是一个非常流行的开源管理工作流平台,在本文中,您将学习如何使用它来自动化第一个工作流。
本文假设您已经知道如何创建和运行Bash和Python脚本。本教程使用Ubuntu 20.04,并安装了ImageMagick,tesseract和Python3。
如何准备工作流
一个重要的概念是,您将仅使用Airflow来自动化和管理任务,因此必须设计工作流并将其分解为Bash或Python脚本。
我们先创建一个工作流并手动运行它,然后了解如何使用Airflow将其自动化。
自动执行的任务
在本教程中,我们从pdf文件中提取数据并将其保存到csv文件中。
主要任务:
- 从pdf文件中提取文本并将其保存在txt文件中。
- 从文本文件中提取所需的元数据并将其保存到csv文件。
要运行第一个任务,我们使用ImageMagick工具将pdf页面转换为png文件,然后使用tesseract将图像转换为txt文件,这些任务将在Bash脚本中定义。要提取元数据,我们使用Python和正则表达式。
本文来自《数据黑客》,登录官网可阅读更多精彩资讯和文章。
1. 从pdf文件中提取文本
Bash脚本的工作流程如下:
- 接收pdf文件名作为参数
- 将页面转换为png文件
- 将图像转换为txt文件
Bash脚本代码:
#!/bin/bash
PDF_FILENAME="$1"
convert -density 600 "$PDF_FILENAME" "$PDF_FILENAME.png"
tesseract "$PDF_FILENAME.png" "$PDF_FILENAME"
将bash脚本命名为pdf_to_text.sh
,然后运行chmod +x pdf_to_text.sh
并运行./pdf_to_text.sh pdf_filename
来创建txt文件。可在此处下载pdf文件。
2. 提取元数据并将其保存到csv
现在我们有了txt文件,是时候创建正则表达式来提取数据。目的是提取会议每个小时发生的事情。您可以通过使用一种模式来提取数据,该模式可以捕获小时数以及在此之后以及换行之前发生的事情。正则表达式模式:(\d:\d\d)-(\d:\d\d) (.*\n)
。
Python脚本代码:
import re
import csv
if __name__ == "__main__":
pattern = "(\d:\d\d)-(\d:\d\d) (.*\n)"
with open(