Aufbau eines strukturierten Finanz-Newsfeeds mit Python, SpaCy und Streamlit

Quellknoten: 1876513

Aufbau eines strukturierten Finanz-Newsfeeds mit Python, SpaCy und Streamlit

Erste Schritte mit NLP, indem Sie eine Anwendung zur Named Entity Recognition (NER) erstellen.


By Harter Tyagi, Data Science-Lehrer | Mentor | YouTuber


Aufbau eines strukturierten Finanz-Newsfeeds mit Python, SpaCy und Streamlit

Eine der sehr interessanten und weit verbreiteten Anwendungen von NLP ist die Named Entity Recognition (NER).

Erkenntnisse aus Rohdaten und unstrukturierten Daten zu gewinnen, ist von entscheidender Bedeutung. Das Hochladen eines Dokuments und das Abrufen der wichtigen Informationen daraus wird als Informationsabruf bezeichnet.

Das Abrufen von Informationen war eine wichtige Aufgabe/Herausforderung im NLP. Und NER (oder NEL – Named Entity Linking) wird in mehreren Bereichen (Finanzen, Medikamente, E-Commerce usw.) zum Abrufen von Informationen verwendet.

In diesem Tutorial-Beitrag zeige ich Ihnen, wie Sie NEL nutzen können, um einen benutzerdefinierten Börsennachrichten-Feed zu entwickeln, der die summenden Aktien im Internet auflistet.

Die Anforderungen:

 
 
Es gibt keine solchen Voraussetzungen als solche. Möglicherweise müssen Sie mit Python und den grundlegenden Aufgaben von NLP wie Tokenisierung, POS-Tagging, Abhängigkeitsanalyse usw. vertraut sein.

Ich werde die wichtigen Teile detaillierter behandeln, damit Sie selbst als Anfänger in der Lage sein werden, Ihren Kopf darüber zu wickeln, was vor sich geht.

Also, machen wir weiter, folgen Sie und Sie haben einen minimalen Aktien-News-Feed, den Sie recherchieren können.

Werkzeuge/Setup, die Sie benötigen:

 
 

  1. Google Colab zum ersten Testen und Erkunden von Daten und der SpaCy-Bibliothek.
  2. VS Code (oder einen beliebigen Editor) zum Codieren der Streamlit-Anwendung.
  3. Quelle von Börseninformationen (Nachrichten), auf denen wir NER und später NEL durchführen.
  4. Eine virtuelle Python-Umgebung (ich verwende Conda) zusammen mit Bibliotheken wie Pandas, SpaCy, Streamlit, Streamlit-Spacy (wenn Sie einige SpaCy-Renderings anzeigen möchten.)

Ziel

 
 
Das Ziel dieses Projekts ist es, die Named Entity Recognition zu erlernen und anzuwenden, um wichtige Entitäten (in unserem Beispiel börsennotierte Unternehmen) zu extrahieren und dann jede Entität mit einigen Informationen unter Verwendung einer Wissensdatenbank (Nifty500-Unternehmensliste) zu verknüpfen.

Wir holen die Textdaten aus RSS-Feeds im Internet, extrahieren die Namen von geschäftigen Aktien und ziehen dann ihre Marktpreisdaten, um die Authentizität der Nachrichten zu testen, bevor wir eine Position in diesen Aktien einnehmen.


Hinweis: NER ist vielleicht kein Stand der Technik, hat aber viele Anwendungen in der Industrie.


Weiter zu Google Colab zum Experimentieren und Testen:

Schritt 1: Extrahieren der Nachrichtendaten zu Trendaktien

 
 
Um zuverlässige authentische Börsennachrichten zu erhalten, verwende ich Economic Times und Geldkontrolle RSS-Feeds für dieses Tutorial, aber Sie können auch die RSS-Feeds Ihres Landes oder Twitter-/Telegramm(gruppen)-Daten verwenden/hinzufügen, um Ihren Feed informativer/genauer zu gestalten.

Die Möglichkeiten sind immens. Dieses Tutorial sollte als Sprungbrett dienen, um NEL anzuwenden, um Apps in verschiedenen Domänen zu erstellen, die verschiedene Arten von Problemen beim Abrufen von Informationen lösen.

Wenn Sie sich den RSS-Feed ansehen, sieht dieser in etwa so aus:

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


 

Unser Ziel ist es, die Textüberschriften aus diesem RSS-Feed zu erhalten, und dann verwenden wir SpaCy, um die wichtigsten Entitäten aus den Überschriften zu extrahieren.

Die Schlagzeilen sind in der Tag der XML hier.

Zuerst müssen wir das gesamte XML-Dokument erfassen und können die requests Bibliothek dazu. Stellen Sie sicher, dass diese Pakete in Ihrer Laufzeitumgebung in colab installiert sind.

Sie können den folgenden Befehl ausführen, um fast jedes Paket direkt aus der Codezelle einer Colab zu installieren:

!pip install <package_name>

Sende ein GET unter dem angegebenen Link anfordern, um das XML-Dokument zu erfassen.

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

Führen Sie die Zelle aus, um zu überprüfen, was Sie im Antwortobjekt erhalten.

Es sollte Ihnen eine erfolgreiche Antwort mit dem HTTP-Code 200 wie folgt geben:



Da Sie nun über dieses Antwortobjekt verfügen, können wir seinen Inhalt an die BeautifulSoup-Klasse übergeben, um das XML-Dokument wie folgt zu parsen:

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

Dies sollte Ihnen alle Schlagzeilen in einer Python-Liste anzeigen:



Bild vom Autor

 

Großartig, wir haben die Textdaten, aus denen wir die wichtigsten Unternehmen (in diesem Fall börsennotierte Unternehmen) mithilfe von NLP extrahieren.

Es ist Zeit, NLP in die Tat umzusetzen.

Schritt 2: Entitäten aus den Schlagzeilen extrahieren

 
 
Dies ist der spannende Teil. Wir verwenden a vortrainiertes Kernsprachmodell von dem spaCy Bibliothek, um die wichtigsten Entitäten in einer Überschrift zu extrahieren.

Ein wenig über spaCy und die Kernmodelle.

geräumig ist eine Open-Source-NLP-Bibliothek, die Textdaten mit superschneller Geschwindigkeit verarbeitet. Es ist die führende Bibliothek in der NLP-Forschung, die in großem Umfang in Unternehmensanwendungen eingesetzt wird. spaCy ist dafür bekannt, mit dem Problem zu skalieren. Und es unterstützt mehr als 64 Sprachen und funktioniert sowohl mit TensorFlow als auch mit PyTorch gut.

Apropos Kernmodelle: spaCy verfügt über zwei Hauptklassen vortrainierter Sprachmodelle, die auf Textdaten unterschiedlicher Größe trainiert werden, um uns hochmoderne Schlussfolgerungen zu liefern.

  1. Kernmodelle — für allgemeine NLP-Grundaufgaben.
  2. Starter-Modelle – für Nischenanwendungen, die Transfer-Lernen erfordern. Wir können die gelernten Gewichtungen des Modells nutzen, um unsere benutzerdefinierten Modelle zu verfeinern, ohne das Modell von Grund auf neu trainieren zu müssen.

Da unser Anwendungsfall in diesem Tutorial grundlegend ist, bleiben wir bei den en_core_web_sm Kernmodell-Pipeline.

Laden wir dies also in unser Notizbuch:

nlp = spacy.load("en_core_web_sm")

Hinweis: Colab hat dieses bereits für uns heruntergeladen, aber wenn Sie versuchen, es auf Ihrem lokalen System auszuführen, müssen Sie das Modell zuerst mit dem folgenden Befehl herunterladen:

python -m spacy download en_core_web_sm

en_core_web_sm ist im Grunde eine für CPU optimierte englische Pipeline mit folgenden Komponenten:

  • tok2vec — Token zu Vektoren (führt die Tokenisierung der Textdaten durch),
  • tagger – fügt jedem Token relevante Metadaten hinzu. spaCy verwendet einige statistische Modelle, um die Wortart (POS) jedes Tokens vorherzusagen. Mehr im  Dokumentation.
  • parser — Der Abhängigkeitsparser stellt Beziehungen zwischen den Token her.
  • Andere Komponenten umfassen sender, ner, attribute_ruler, lemmatizer.

Um zu testen, was dieses Modell für uns tun kann, gehe ich eine einzelne Überschrift durch das instanziierte Modell und überprüfe dann die verschiedenen Teile eines Satzes.

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

Die Pipeline führt alle Aufgaben von der Tokenisierung bis zum NER aus. Hier haben wir zuerst die Token:



Bild vom Autor

 

Sie können die markierte Wortart mit dem pos_ Attribut.



Bild vom Autor

 

Jedes Token ist mit einigen Metadaten versehen. Handel ist zum Beispiel ein Eigennamen, Setup ist ein Substantiv, : ist Satzzeichen usw. Die gesamte Liste der Tags ist angegeben hier.

Und dann können Sie sich ansehen, wie sie zusammenhängen, indem Sie sich das Abhängigkeitsdiagramm mit ansehen dep_ Attribut:



Bild vom Autor

 

Hier ist Trade ein Compound, Setup ist Root, Nifty ist appos (Appositional-Modifikator). Auch hier sind alle syntaktischen Tags zu finden hier.

Sie können die Beziehungsabhängigkeiten zwischen den Token auch mit der folgenden Anzeige visualisieren render() Verfahren:

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

was dieses Diagramm ergibt:



Bild vom Autor

 

Entitätsextraktion

 
 
Und um sich die wichtigen Entitäten des Satzes anzusehen, können Sie bestehen 'ent’ als Stil im gleichen Code:



Bild vom Autor — Ich habe eine andere Überschrift verwendet, weil die oben verwendete keine Entitäten hatte.

 

Wir haben verschiedene Tags für verschiedene Entitäten wie der Tag hat DATE, Glasscoat hat GPE, die Länder/Städte/Staaten sein können. Wir suchen hauptsächlich nach Unternehmen, die über ein ORG-Tag verfügen, das uns Unternehmen, Agenturen, Institutionen usw.

Wir sind jetzt in der Lage, Entitäten aus dem Text zu extrahieren. Kommen wir zum Extrahieren der Organisationen aus allen Schlagzeilen mithilfe von ORG-Entitäten.

Dadurch wird eine Liste aller Unternehmen wie folgt zurückgegeben:



Bild vom Autor

 

So einfach, richtig?

Das ist die Magie von spaCy jetzt!

Der nächste Schritt besteht darin, alle diese Unternehmen in einer Wissensdatenbank nachzuschlagen, um das richtige Aktiensymbol für dieses Unternehmen zu extrahieren, und dann Bibliotheken wie Yahoo-Finance zu verwenden, um ihre Marktdetails wie Preis, Rendite usw.

Schritt 3 – Benannte Entitätsverknüpfung

 
 
Das Ziel dieses Projekts ist es, zu erfahren, welche Aktien auf dem Markt summen und deren Details auf Ihrem Dashboard anzuzeigen.

Wir haben die Firmennamen, aber um ihre Handelsdetails zu erhalten, benötigen wir das Handelsaktiensymbol des Unternehmens.

Da ich die Details und Nachrichten von indischen Unternehmen extrahiere, werde ich eine externe Datenbank von . verwenden Nifty 500 Unternehmen (eine CSV-Datei).

Für jedes Unternehmen suchen wir es in der Liste der Unternehmen, die Pandas verwenden, und erfassen dann die Börsenstatistik mit dem Yahoo-Finanzen Bibliothek.

Bild vom Autor

 

Eine Sache, die Sie hier beachten sollten, ist, dass ich nach jedem Aktiensymbol ein „.NS“ hinzugefügt habe, bevor ich es an die übergeben habe Ticker Klasse der yfinance Bücherei. Dies liegt daran, dass indische NSE-Aktiensymbole mit a . gespeichert werden .NS Suffix in yfinance.

Und die summenden Aktien würden in einem Datenrahmen wie unten auftauchen:



Bild vom Autor

 

Voila! ist das nicht toll? So eine einfache, aber tiefgreifende App, die Sie mit den richtigen Aktien in die richtige Richtung weisen könnte.

Um es jetzt zugänglicher zu machen, können wir aus dem Code, den wir gerade mit Streamlit geschrieben haben, eine Webanwendung erstellen.

Schritt 4 – Erstellen einer Web-App mit Streamlit

 
 
Es ist Zeit, zu einem Editor zu wechseln und ein neues Projekt und eine virtuelle Umgebung für die NLP-Anwendung zu erstellen.

Der Einstieg in Streamlit ist für solche Demo-Datenanwendungen super einfach. Stellen Sie sicher, dass Streamlit installiert ist.

pip install Streamlit

Lassen Sie uns nun eine neue Datei namens app.py erstellen und mit dem Schreiben von Funktionscode beginnen, um die App vorzubereiten.

Importieren Sie oben alle erforderlichen Bibliotheken.

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

Fügen Sie Ihrer Bewerbung einen Titel hinzu:

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

Testen Sie Ihre App durch Ausführen streamlit run app.py in Ihrem Terminal. Es sollte eine App in Ihrem Webbrowser öffnen.

Ich habe einige zusätzliche Funktionen hinzugefügt, um Daten aus mehreren Quellen zu erfassen. Jetzt können Sie der Anwendung eine RSS-Feed-URL Ihrer Wahl hinzufügen und die Daten werden verarbeitet und die Trendaktien werden in einem Datenrahmen angezeigt.

Um Zugriff auf die gesamte Codebasis zu erhalten, können Sie sich hier mein Repository ansehen:

 
GitHub – dswh/NER_News_Feed
 

Sie können mehrere Stilelemente, verschiedene Datenquellen und andere Verarbeitungsarten hinzufügen, um sie effizienter und nützlicher zu machen.

Meine App sieht im aktuellen Zustand wie das Bild im Banner aus.

Wenn Sie mir Schritt für Schritt folgen möchten, sehen Sie sich an, wie ich diese Anwendung hier codiere:

Nächste Schritte!

 
 
Anstatt einen finanziellen Anwendungsfall auszuwählen, können Sie auch jede andere Anwendung Ihrer Wahl auswählen. Gesundheitswesen, E-Commerce, Forschung und viele andere. In allen Branchen müssen Dokumente verarbeitet und wichtige Entitäten extrahiert und verknüpft werden. Probieren Sie eine andere Idee aus.

Eine einfache Idee besteht darin, alle wichtigen Elemente einer Forschungsarbeit zu extrahieren und dann mithilfe der Google-Such-API einen Wissensgraphen daraus zu erstellen.

Wenn Sie die Aktien-News-Feed-App auf eine andere Ebene bringen möchten, können Sie auch einige Handelsalgorithmen hinzufügen, um auch Kauf- und Verkaufssignale zu generieren.

Ich ermutige Sie, Ihrer Fantasie freien Lauf zu lassen.

So können Sie sich mit mir verbinden!

 
 
Wenn Ihnen dieser Beitrag gefallen hat und Sie mehr solcher Inhalte sehen möchten, können Sie ihn abonnieren mein Newsletter or Mein YouTube-Kanal wo ich weiterhin so nützliche und schnelle Projekte teilen werde, die man bauen kann.

Wenn Sie gerade erst mit dem Programmieren anfangen oder in Data Science oder ML einsteigen möchten, können Sie meinen Kurs besuchen unter WIP-Lane-Akademie.

Danke an Elliot Gunn.

 
Bio: Harter Tyagi ist ein Ingenieur mit kombinierter Erfahrung in Webtechnologien und Data Science (auch bekannt als Full-Stack Data Science). Er hat über 1000 KI-/Web-/Data-Science-Anwärter betreut und gestaltet Data Science- und ML-Engineering-Lernstrecken. Zuvor entwickelte Harshit gemeinsam mit Forschern von Yale, MIT und UCLA Datenverarbeitungsalgorithmen.

Original. Mit Genehmigung erneut veröffentlicht.

Related:

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

Zeitstempel:

Mehr von KDnuggets