原文:
www.kdnuggets.com/2019/04/building-flask-api-automatically-extract-named-entities-spacy.html
作者:Susan Li,高级数据科学家
图片来源:Pixabay
目前大量的非结构化文本数据提供了丰富的信息源,如果数据可以被结构化的话。命名实体识别 (NER)(也称为命名实体提取)是从半结构化和非结构化文本源中构建知识的第一步之一。
只有在进行 NER 后,我们才能至少揭示信息中包含了谁和什么。因此,数据科学团队将能够看到一个结构化的表示,展示一个语料库中所有人名、公司名、地点等的名称,这可以作为进一步分析和研究的起点。
在 上一篇文章中,我们学习并实践了 如何使用 NLTK 和 spaCy 构建命名实体识别器。为了更进一步,创建有用的东西,本文将介绍如何使用 spaCy 开发和部署一个简单的命名实体提取器,并通过 Flask API 用 Python 服务它*。
我们的目标是构建一个 API,我们提供文本,例如《纽约时报》文章(或任何文章)作为输入,我们的命名实体提取器将识别并提取四种类型的实体:组织、人物、地点和金额。基本架构如下:
图 1
为了构建 API,我们需要创建两个文件:
-
index.html
用于处理 API 的模板。 -
app.py
用于处理请求并返回输出文件。
最终产品将如下所示:
图 2
我们从构建 API 开始,逐步创建两个文件。我们的项目文件夹结构如下:
- 我们的项目位于 ***Named-Entity-Extractor ***文件夹中。
图 3
templates
目录与创建的 app.py 文件在同一文件夹中。
图 4
- index.html 位于 templates 文件夹中。
-
我们将我们的应用命名为“命名实体提取器”
-
使用 BootstrapCDN,将 stylesheet
<link>
复制粘贴到我们的<head>
中,放在所有其他样式表之前,以加载我们的 CSS。 -
获取 Bootstrap 的导航头部,从 a template for a simple informational website 获取 navbar。它包含一个称为 jumbotron 的大召唤框和三个支持内容。
-
从模板的 source code 中复制粘贴 navbar 代码。
-
Bootstrap 需要一个容器元素来包裹站点内容并容纳我们的网格系统。
-
在我们的案例中,对于第一个容器,我们将创建一个垂直表单,其中包含两个输入字段,一个“清除”按钮和一个“提交”按钮。
-
文本表单控件使用
form-control
类进行样式化。 -
我们为用户提供了四个任务选项(即命名实体提取任务),它们是:Organization,Person,Geopolitical 和 Money。
-
第二个容器为用户的操作提供上下文反馈消息,即命名实体提取的结果。
-
我们不仅希望将命名实体提取结果打印给用户,还希望打印每个命名实体提取的结果数量。
-
将 JavaScript 复制粘贴到我们 HTML 页面接近末尾的
<script>
标签中,紧接着闭合的</body>
标签之前。
我们的 app.py
文件相当简单且易于理解。它包含将由 Python 解释器执行以运行 Flask Web 应用程序的主要代码,其中包括用于识别命名实体的 spaCy 代码。
-
我们将应用作为单一模块运行;因此,我们用参数
__name__
初始化了一个新的 Flask 实例,让 Flask 知道它可以在与自身所在目录相同的目录中找到 HTML 模板文件夹(templates
)。 -
我们使用路由装饰器(
@app.route('/')
)来指定应触发index
函数执行的 URL。 -
我们的
index
函数简单地渲染了位于templates
文件夹中的index.html
HTML 文件。 -
在
process
函数内部,我们对用户输入的原始文本应用 nlp,并从原始文本中提取预定的命名实体(Organization,Person,Geopolitical 和 Money)。 -
我们使用
POST
方法将表单数据传输到服务器的消息体中。最后,通过在app.run
方法中设置debug=True
参数,我们进一步激活了 Flask 的调试器。 -
我们使用
run
函数仅在 Python 解释器直接执行此脚本时才运行应用程序,这通过使用if
语句与__name__ == '__main__'
进行确保。
我们快完成了!
-
启动 **命令提示符。
-
进入我们的 命名实体提取器 文件夹。
图 5
- 打开你的 Web 浏览器,将 “
127.0.0.1:5000/
” 粘贴到地址栏中,我们将看到这个表单:
图 6
- 我从 nytimes复制粘贴了一些文章段落,这是一个加拿大故事:
图 7
- 在“选择任务”下选择“Organization”,然后点击“提交”,我们得到的是:
图 8
- 很好。让我们尝试“Person”实体:
图 9
- “Geopolitical”实体:
图 10
- “Money”实体:
图 11
完成了!
如果你按照以上步骤操作并达到了这里,恭喜你!你已经以零成本创建了一个简单但有效的命名实体提取器!回头看,我们只需要创建两个文件,所需的只是开源库和学习如何使用它们来创建这两个文件。
通过构建这样的应用,你已经学会了新技能,并使用这些技能创造了有用的东西。
完整源代码可在这个 代码库找到。祝周一愉快!
参考:
个人简介: Susan Li 正在通过一篇文章改变世界。她是位于加拿大多伦多的高级数据科学家。
原文。经许可转载。
相关:
-
你需要了解的关于 NLP 和机器学习的文本预处理
-
利用迁移学习和弱监督廉价构建 NLP 分类器
-
简单神经网络与 LSTM 时间序列预测介绍
1. Google Cybersecurity Certificate - 快速进入网络安全职业。
2. Google Data Analytics Professional Certificate - 提升你的数据分析水平
3. Google IT Support Professional Certificate - 支持你的组织进行 IT 工作