使用 Python、SpaCy 和 Streamlit 构建结构化金融新闻源

源节点: 1876513

使用 Python、SpaCy 和 Streamlit 构建结构化金融新闻源

标签: 金融, NLP, 蟒蛇, 空间, 流光

通过构建命名实体识别 (NER) 应用程序开始使用 NLP。


By 哈什特亚吉, 数据科学讲师 | 导师 | 优酷主播


使用 Python、SpaCy 和 Streamlit 构建结构化金融新闻源

NLP 非常有趣且广泛使用的应用之一是命名实体识别(NER)。

从原始数据和非结构化数据中获取洞察力至关重要。 上传文档并从中获取重要信息称为信息检索。

信息检索一直是 NLP 中的一项主要任务/挑战。 NER(或 NEL — 命名实体链接)用于多个领域(金融、药物、电子商务等),用于信息检索目的。

在本教程帖子中,我将向您展示如何利用 NEL 开发一个自定义的股市新闻提要,列出互联网上的热门股票。

先决条件

 
 
没有这样的先决条件。 您可能需要对 Python 和 NLP 的基本任务(如标记化、POS 标记、依赖解析等)有一定的了解。

我将更详细地介绍重要的部分,因此即使您是一个完整的初学者,您也可以了解正在发生的事情。

所以,让我们继续吧,继续下去,您将拥有一个可以开始研究的最小股票新闻提要。

您需要的工具/设置:

 
 

  1. 用于对数据和 SpaCy 库进行初始测试和探索的 Google Colab。
  2. VS Code(或任何编辑器)来编写 Streamlit 应用程序。
  3. 股票市场信息(新闻)的来源,我们将在其上执行 NER 和稍后的 NEL。
  4. 一个虚拟的 python 环境(我使用的是 conda)以及像 Pandas、SpaCy、Streamlit、Streamlit-Spacy 这样的库(如果你想展示一些 SpaCy 渲染。)

目的

 
 
该项目的目标是学习和应用命名实体识别来提取重要实体(在我们的示例中为上市公司),然后使用知识库(Nifty500 公司列表)将每个实体与一些信息联系起来。

我们将从互联网上的 RSS 提要中获取文本数据,提取热门股票的名称,然后提取它们的市场价格数据以测试新闻的真实性,然后再对这些股票进行任何头寸。


注意:NER 可能不是最先进的问题,但它在行业中有很多应用。


继续使用 Google Colab 进行实验和测试:

第一步:提取趋势股新闻数据

 
 
为了获得一些可靠的真实股市新闻,我将使用 经济日报 和 钱控制 本教程的 RSS 提要,但您也可以使用/添加您所在国家/地区的 RSS 提要或 Twitter/Telegram(组)数据,以使您的提要信息更多/准确。

机会是巨大的。 本教程应作为应用 NEL 在不同领域构建应用程序以解决不同类型的信息检索问题的垫脚石。

如果您继续查看 RSS 提要,它看起来像这样:

https://economictimes.indiatimes.com/markets/rssfeeds/1977021501.cms


 

我们的目标是从这个 RSS 提要中获取文本标题,然后我们将使用 SpaCy 从标题中提取主要实体。

标题出现在此处为 XML 的标记。

首先,我们需要捕获整个 XML 文档,我们可以使用 requests 图书馆做到这一点。 确保在 colab 的运行时环境中安装了这些包。

您可以运行以下命令来直接从 colab 的代码单元安装几乎所有包:

!pip install <package_name>

寄一个 GET 在提供的链接上请求以捕获 XML 文档。

import requestsresp = requests.get("https://economictimes.indiatimes.com/markets/stocks/rssfeeds/2146842.cms")

运行单元格以检查您在响应对象中获得的内容。

它应该会给你一个 HTTP 代码 200 的成功响应,如下所示:



现在您有了这个响应对象,我们可以将其内容传递给 BeautifulSoup 类来解析 XML 文档,如下所示:

from bs4 import BeautifulSoupsoup = BeautifulSoup(resp.content, features='xml')
soup.findAll('title')

这应该为您提供 Python 列表中的所有标题:



图片作者

 

太棒了,我们有文本数据,我们将使用 NLP 从中提取主要实体(在这种情况下是上市公司)。

是时候将 NLP 付诸行动了。

第 2 步:从标题中提取实体

 
 
这是令人兴奋的部分。 我们将使用一个 预训练的核心语言模型 来自 spaCy 库以提取标题中的主要实体。

一些关于 spaCy 和核心模型的信息。

空间 是一个开源的 NLP 库,可以以超快的速度处理文本数据。 它是 NLP 研究领域的领先库,正在大规模用于企业级应用程序。 spaCy 以解决问题而闻名。 它支持超过 64 种语言,并且可以很好地与 TensorFlow 和 PyTorch 配合使用。

谈到核心模型,spaCy 有两大类预训练语言模型,它们在不同大小的文本数据上进行训练,为我们提供最先进的推理。

  1. 核心模型——用于通用的基本 NLP 任务。
  2. 入门模型——适用于需要迁移学习的利基应用。 我们可以利用模型的学习权重来微调我们的自定义模型,而无需从头开始训练模型。

由于我们的用例在本教程中是基本的,因此我们将坚持使用 en_core_web_sm 核心模型管道。

因此,让我们将其加载到我们的笔记本中:

nlp = spacy.load("en_core_web_sm")

请注意: Colab 已经为我们下载了这个,但是如果您尝试在本地系统中运行它,则必须首先使用以下命令下载模型:

python -m spacy download en_core_web_sm

en_core_web_sm 基本上是一个针对 CPU 优化的英文流水线,它具有以下组件:

  • tok2vec — 向量的标记(对文本数据执行标记化),
  • 标记器——为每个标记添加相关元数据。 spaCy 利用一些统计模型来预测每个标记的词性 (POS)。 更多在 文件.
  • 解析器——依赖解析器在令牌之间建立关系。
  • 其他组件包括 sender、ner、attribute_ruler、lemmatizer。

现在,为了测试这个模型可以为我们做什么,我将通过实例化模型传递一个标题,然后检查句子的不同部分。

# make sure you extract the text out of <title> tagsprocessed_hline = nlp(headlines[4].text)

管道执行从标记化到 NER 的所有任务。 这里我们先有令牌:



图片作者

 

您可以使用 pos_ 属性。



图片作者

 

每个令牌都标有一些元数据。 例如,Trade 是一个专有名词,Setup 是一个名词, : 是标点符号,等等,等等。 给出了完整的标签列表 相关信息.

然后,您可以通过使用以下命令查看依赖关系图来了解它们之间的关系 dep_ 属性:



图片作者

 

在这里,Trade 是一个 Compound,Setup 是 Root,Nifty 是 appos(并列修饰符)。 同样,所有的语法标签都可以找到 相关信息.

您还可以使用以下置换来可视化令牌之间的关系依赖关系 render() 方法:

spacy.displacy.render(processed_hline, style='dep',jupyter=True, options={'distance': 120})

这将给出这个图:



图片作者

 

实体抽取

 
 
并查看句子的重要实体,您可以通过 'ent’ 作为相同代码中的样式:



作者图片——我使用了另一个标题,因为我们上面使用的标题没有任何实体。

 

对于不同的实体,我们有不同的标签,例如日期为 DATE,Glasscoat 有 GPE,可以是国家/城市/州。 我们主要寻找具有 ORG 标签的实体,这些实体将为我们提供公司、机构、机构等。

我们现在能够从文本中提取实体。 让我们开始使用 ORG 实体从所有标题中提取组织。

这将返回所有公司的列表,如下所示:



图片作者

 

很容易,对吧?

这就是 spaCy 的魅力所在!

下一步是在知识库中查找所有这些公司,为该公司提取正确的股票代码,然后使用 yahoo-finance 等库提取其市场详细信息,如价格、回报等。

第 3 步 - 命名实体链接

 
 
该项目的目标是了解哪些股票在市场上嗡嗡作响并在您的仪表板上获取它们的详细信息。

我们有公司名称,但为了获得他们的交易详细信息,我们需要公司的交易股票代码。

由于我正在提取印度公司的详细信息和新闻,因此我将使用外部数据库 漂亮的 500 家公司(一个 CSV 文件)。

对于每家公司,我们将在使用 Pandas 的公司列表中查找它,然后我们将使用 雅虎财经 图书馆。

图片作者

 

在这里您应该注意的一件事是,我在将每个股票代码传递给 Ticker 的类 yfinance 图书馆。 这是因为印度 NSE 股票代码以 .NS 后缀在 yfinance.

嗡嗡作响的股票将出现在如下数据框中:



图片作者

 

瞧! 这不是很好吗? 这样一个简单而深刻的应用程序可以为您指明正确的方向,并拥有正确的股票。

现在,为了使其更易于访问,我们可以使用刚刚使用 Streamlit 编写的代码创建一个 Web 应用程序。

第 4 步 — 使用 Streamlit 构建 Web 应用程序

 
 
是时候转到编辑器并为 NLP 应用程序创建新项目和虚拟环境了。

对于此类演示数据应用程序,Streamlit 入门非常容易。 确保你已经安装了 streamlit。

pip install Streamlit

现在,让我们创建一个名为 app.py 的新文件并开始编写功能代码以准备好应用程序。

在顶部导入所有必需的库。

import pandas as pdimport requestsimport spacyimport streamlit as stfrom bs4 import BeautifulSoupimport yfinance as yf

为您的应用程序添加标题:

st.title('Buzzing Stocks :zap:')

通过运行测试您的应用程序 streamlit run app.py 在您的终端中。 它应该会在您的网络浏览器中打开一个应用程序。

我添加了一些额外的功能来从多个来源捕获数据。 现在,您可以将您选择的 RSS 提要 URL 添加到应用程序中,数据将被处理,趋势股票将显示在数据框中。

要访问整个代码库,您可以在此处查看我的存储库:

 
GitHub – dswh/NER_News_Feed
 

您可以添加多个样式元素、不同的数据源和其他类型的处理,以使其更高效和有用。

我的应用程序在当前状态下看起来像横幅中的图像。

如果你想一步一步地跟着我,看我在这里编写这个应用程序:

下一步!

 
 
除了选择财务用例之外,您还可以选择您选择的任何其他应用程序。 医疗保健、电子商务、研究等。 所有行业都需要处理文档并提取和链接重要实体。 尝试另一个想法。

一个简单的想法是提取研究论文的所有重要实体,然后使用 Google 搜索 API 创建它的知识图。

此外,如果您想将股票新闻提要应用程序提升到另一个层次,您还可以添加一些交易算法来生成买入和卖出信号。

我鼓励你尽情发挥你的想象力。

你怎么能联系到我!

 
 
如果您喜欢这篇文章并希望看到更多此类内容,您可以订阅 我的通讯 or 我的YouTube频道 在那里我将继续分享人们可以构建的此类有用且快速的项目。

如果您是刚刚开始编程或想进入数据科学或机器学习领域的人,您可以查看我的课程: WIP 车道学院.

感谢艾略特·冈恩。

 
简介: 哈什特亚吉 是一位在 Web 技术和数据科学(又名全栈数据科学)方面拥有丰富经验的工程师。 他指导了 1000 多名 AI/Web/数据科学有志者,并正在设计数据科学和 ML 工程学习轨道。 此前,Harshit 与耶鲁大学、麻省理工学院和加州大学洛杉矶分校的研究科学家一起开发了数据处理算法。

原版。 经许可重新发布。

相关新闻:

来源:https://www.kdnuggets.com/2021/09/-structured-financial-newsfeed-using-python-spacy-and-streamlit.html

时间戳记:

更多来自 掘金队