Skip to content

Latest commit

 

History

History
189 lines (95 loc) · 8.96 KB

building-flask-api-automatically-extract-named-entities-spacy.md

File metadata and controls

189 lines (95 loc) · 8.96 KB

使用 SpaCy 自动提取命名实体的 Flask API

原文:www.kdnuggets.com/2019/04/building-flask-api-automatically-extract-named-entities-spacy.html

c 注释

作者:Susan Li,高级数据科学家

图

图片来源:Pixabay

目前大量的非结构化文本数据提供了丰富的信息源,如果数据可以被结构化的话。命名实体识别 (NER)(也称为命名实体提取)是从半结构化和非结构化文本源中构建知识的第一步之一。

只有在进行 NER 后,我们才能至少揭示信息中包含了谁和什么。因此,数据科学团队将能够看到一个结构化的表示,展示一个语料库中所有人名、公司名、地点等的名称,这可以作为进一步分析和研究的起点。

在 上一篇文章中,我们学习并实践了 如何使用 NLTK 和 spaCy 构建命名实体识别器。为了更进一步,创建有用的东西,本文将介绍如何使用 spaCy 开发和部署一个简单的命名实体提取器,并通过 Flask API 用 Python 服务它*。

一个 Flask API

我们的目标是构建一个 API,我们提供文本,例如《纽约时报》文章(或任何文章)作为输入,我们的命名实体提取器将识别并提取四种类型的实体:组织、人物、地点和金额。基本架构如下:

图

图 1

为了构建 API,我们需要创建两个文件:

  1. index.html 用于处理 API 的模板。

  2. app.py 用于处理请求并返回输出文件。

最终产品将如下所示:

图

图 2

我们从构建 API 开始,逐步创建两个文件。我们的项目文件夹结构如下:

  • 我们的项目位于 ***Named-Entity-Extractor ***文件夹中。

图

图 3

  • templates 目录与创建的 app.py 文件在同一文件夹中。

图

图 4

  • index.html 位于 templates 文件夹中。

index.html

  • 我们将我们的应用命名为“命名实体提取器”

  • 使用 BootstrapCDN,将 stylesheet <link> 复制粘贴到我们的 <head> 中,放在所有其他样式表之前,以加载我们的 CSS。

  • 获取 Bootstrap 的导航头部,从 a template for a simple informational website 获取 navbar。它包含一个称为 jumbotron 的大召唤框和三个支持内容。

  • 从模板的 source code 中复制粘贴 navbar 代码。

  • Bootstrap 需要一个容器元素来包裹站点内容并容纳我们的网格系统。

  • 在我们的案例中,对于第一个容器,我们将创建一个垂直表单,其中包含两个输入字段,一个“清除”按钮和一个“提交”按钮。

  • 文本表单控件使用 form-control 类进行样式化。

  • 我们为用户提供了四个任务选项(即命名实体提取任务),它们是:OrganizationPersonGeopoliticalMoney

  • 第二个容器为用户的操作提供上下文反馈消息,即命名实体提取的结果。

  • 我们不仅希望将命名实体提取结果打印给用户,还希望打印每个命名实体提取的结果数量。

  • JavaScript 复制粘贴到我们 HTML 页面接近末尾的 <script> 标签中,紧接着闭合的 </body> 标签之前。

app.py

我们的 app.py 文件相当简单且易于理解。它包含将由 Python 解释器执行以运行 Flask Web 应用程序的主要代码,其中包括用于识别命名实体的 spaCy 代码。

  • 我们将应用作为单一模块运行;因此,我们用参数 __name__ 初始化了一个新的 Flask 实例,让 Flask 知道它可以在与自身所在目录相同的目录中找到 HTML 模板文件夹(templates)。

  • 我们使用路由装饰器(@app.route('/'))来指定应触发 index 函数执行的 URL。

  • 我们的 index 函数简单地渲染了位于 templates 文件夹中的 index.html HTML 文件。

  • process 函数内部,我们对用户输入的原始文本应用 nlp,并从原始文本中提取预定的命名实体(OrganizationPersonGeopoliticalMoney)。

  • 我们使用 POST 方法将表单数据传输到服务器的消息体中。最后,通过在 app.run 方法中设置 debug=True 参数,我们进一步激活了 Flask 的调试器。

  • 我们使用 run 函数仅在 Python 解释器直接执行此脚本时才运行应用程序,这通过使用 if 语句与 __name__ == '__main__' 进行确保。

我们快完成了!

尝试我们的 API

  • 启动 **命令提示符

  • 进入我们的 命名实体提取器 文件夹。

图示

图 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 工作


更多相关内容