Spaces:
Sleeping
Sleeping
import streamlit as st | |
import sparknlp | |
import os | |
import pandas as pd | |
from sparknlp.base import * | |
from sparknlp.annotator import * | |
from pyspark.ml import Pipeline | |
from sparknlp.pretrained import PretrainedPipeline | |
from annotated_text import annotated_text | |
from pyspark.sql import SparkSession | |
from pyspark.sql.functions import col, concat, lit, round | |
# Page configuration | |
st.set_page_config( | |
layout="wide", | |
page_title="Spark NLP Demos App", | |
initial_sidebar_state="auto" | |
) | |
# CSS for styling | |
st.markdown(""" | |
<style> | |
.main-title { | |
font-size: 36px; | |
color: #4A90E2; | |
font-weight: bold; | |
text-align: center; | |
} | |
.section p, .section ul { | |
color: #666666; | |
} | |
</style> | |
""", unsafe_allow_html=True) | |
def init_spark(): | |
return sparknlp.start() | |
def create_pipeline(model): | |
document_assembler = DocumentAssembler() \ | |
.setInputCol("text") \ | |
.setOutputCol("document") | |
tokenizer = Tokenizer() \ | |
.setInputCols(["document"]) \ | |
.setOutputCol("token") | |
embeddings = WordEmbeddingsModel.pretrained('glove_840B_300', lang='xx') \ | |
.setInputCols(["document", "token"]) \ | |
.setOutputCol("embeddings") | |
ner_model = NerDLModel.pretrained(model, 'xx') \ | |
.setInputCols(["document", "token", "embeddings"]) \ | |
.setOutputCol("ner") | |
ner_converter = NerConverter() \ | |
.setInputCols(["document", "token", "ner"]) \ | |
.setOutputCol("ner_chunk") | |
pipeline = Pipeline(stages=[ | |
document_assembler, | |
tokenizer, | |
embeddings, | |
ner_model, | |
ner_converter | |
]) | |
return pipeline | |
def fit_data(pipeline, data): | |
empty_df = spark.createDataFrame([['']]).toDF('text') | |
pipeline_model = pipeline.fit(empty_df) | |
model = LightPipeline(pipeline_model) | |
result = model.fullAnnotate(data) | |
return result | |
def annotate(data): | |
document, chunks, labels = data["Document"], data["NER Chunk"], data["NER Label"] | |
annotated_words = [] | |
for chunk, label in zip(chunks, labels): | |
parts = document.split(chunk, 1) | |
if parts[0]: | |
annotated_words.append(parts[0]) | |
annotated_words.append((chunk, label)) | |
document = parts[1] | |
if document: | |
annotated_words.append(document) | |
annotated_text(*annotated_words) | |
# Set up the page layout | |
st.markdown('<div class="main-title">Identificare entità generali nel testo italiano with Spark NLP</div>', unsafe_allow_html=True) | |
# Sidebar content | |
model = st.sidebar.selectbox( | |
"Choose the pretrained model", | |
["ner_wikiner_glove_840B_300"], | |
help="For more info about the models visit: https://sparknlp.org/models" | |
) | |
# Reference notebook link in sidebar | |
link = """ | |
<a href="https://colab.research.google.com/github/JohnSnowLabs/spark-nlp-workshop/blob/master/tutorials/streamlit_notebooks/NER_FR.ipynb"> | |
<img src="https://colab.research.google.com/assets/colab-badge.svg" style="zoom: 1.3" alt="Open In Colab"/> | |
</a> | |
""" | |
st.sidebar.markdown('Reference notebook:') | |
st.sidebar.markdown(link, unsafe_allow_html=True) | |
# Load examples | |
examples = [ | |
"""William Henry Gates III (nato il 28 ottobre 1955) è un magnate d'affari americano, sviluppatore di software, investitore e filantropo. È noto soprattutto come co-fondatore di Microsoft Corporation. Durante la sua carriera in Microsoft, Gates ha ricoperto le posizioni di presidente, amministratore delegato (CEO), presidente e capo architetto del software, pur essendo il principale azionista individuale fino a maggio 2014. È uno dei più noti imprenditori e pionieri del rivoluzione dei microcomputer degli anni '70 e '80. Nato e cresciuto a Seattle, Washington, Gates ha co-fondato Microsoft con l'amico d'infanzia Paul Allen nel 1975, ad Albuquerque, nel New Mexico; divenne la più grande azienda di software per personal computer al mondo. Gates ha guidato l'azienda come presidente e CEO fino a quando non si è dimesso da CEO nel gennaio 2000, ma è rimasto presidente e divenne capo architetto del software. Alla fine degli anni '90, Gates era stato criticato per le sue tattiche commerciali, che erano state considerate anticoncorrenziali. Questa opinione è stata confermata da numerose sentenze giudiziarie. Nel giugno 2006, Gates ha annunciato che sarebbe passato a un ruolo part-time presso Microsoft e un lavoro a tempo pieno presso la Bill & Melinda Gates Foundation, la fondazione di beneficenza privata che lui e sua moglie, Melinda Gates, hanno fondato nel 2000. [ 9] A poco a poco trasferì i suoi doveri a Ray Ozzie e Craig Mundie. Si è dimesso da presidente di Microsoft nel febbraio 2014 e ha assunto un nuovo incarico come consulente tecnologico per supportare il neo nominato CEO Satya Nadella.""", | |
"""La Gioconda è un dipinto ad olio del XVI secolo creato da Leonardo. Si tiene al Louvre di Parigi.""", | |
"""Quando Sebastian Thrun ha iniziato a lavorare su auto a guida autonoma presso Google nel 2007, poche persone al di fuori dell'azienda lo hanno preso sul serio. "Posso dirti che amministratori delegati molto importanti delle principali case automobilistiche americane mi stringerebbero la mano e si allontanerebbero perché non valeva la pena parlarne", ha dichiarato Thrun, ora co-fondatore e CEO della startup di istruzione superiore online Udacity, in un'intervista con Recode all'inizio di questa settimana.""", | |
"""Facebook è un servizio di social network lanciato come TheFacebook il 4 febbraio 2004. È stato fondato da Mark Zuckerberg con i suoi compagni di stanza del college e gli altri studenti dell'Università di Harvard Eduardo Saverin, Andrew McCollum, Dustin Moskovitz e Chris Hughes. L'adesione al sito web è stata inizialmente limitata dai fondatori agli studenti di Harvard, ma è stata estesa ad altri college nell'area di Boston, la Ivy League e gradualmente la maggior parte delle università negli Stati Uniti e in Canada.""", | |
"""La storia dell'elaborazione del linguaggio naturale iniziò generalmente negli anni '50, sebbene si possano trovare lavori di epoche precedenti. Nel 1950, Alan Turing pubblicò un articolo intitolato "Computing Machinery and Intelligence" che proponeva quello che ora viene chiamato il test di Turing come criterio di intelligenza""", | |
"""Geoffrey Everest Hinton è uno psicologo cognitivo e uno scienziato informatico canadese inglese, noto soprattutto per il suo lavoro sulle reti neurali artificiali. Dal 2013 divide il suo tempo lavorando per Google e l'Università di Toronto. Nel 2017 è stato cofondatore ed è diventato Chief Scientific Advisor del Vector Institute di Toronto.""", | |
"""Quando ho detto a John che volevo trasferirmi in Alaska, mi ha avvertito che avrei avuto difficoltà a trovare uno Starbucks lì.""", | |
"""Steven Paul Jobs era un magnate degli affari americano, designer industriale, investitore e proprietario dei media. È stato presidente, amministratore delegato (CEO) e co-fondatore di Apple Inc., presidente e azionista di maggioranza di Pixar, membro del consiglio di amministrazione di The Walt Disney Company a seguito dell'acquisizione di Pixar, e fondatore, presidente e CEO di NeXT. Jobs è ampiamente riconosciuto come un pioniere della rivoluzione del personal computer degli anni '70 e '80, insieme al co-fondatore di Apple Steve Wozniak. Jobs è nato a San Francisco, in California, e è stato adottato. È cresciuto nella Bay Area di San Francisco. Ha frequentato il Reed College nel 1972 prima di abbandonare quello stesso anno, e ha viaggiato attraverso l'India nel 1974 in cerca di illuminazione e studiando il buddismo Zen.""", | |
"""Titanic è un romanzo epico americano del 1997 e film catastrofico diretto, scritto, coprodotto e coprodotto da James Cameron. Incorporando aspetti sia storici che di fantasia, si basa sui racconti dell'affondamento del Titanic RMS e vede protagonisti Leonardo DiCaprio e Kate Winslet come membri di diverse classi sociali che si innamorano a bordo della nave durante il suo viaggio inaugurale sfortunato.""", | |
"""Oltre ad essere il re del nord, John Snow è un medico inglese e un leader nello sviluppo dell'anestesia e dell'igiene medica. È considerato il primo a utilizzare i dati per curare l'epidemia di colera nel 1834.""" | |
] | |
# st.subheader("Riconoscere persone, luoghi, organizzazioni e varie entità utilizzando un modello di apprendimento profondo preconfigurato predefinito e incorporamenti di parole GloVe (glove_300d).") | |
selected_text = st.selectbox("Select an example", examples) | |
custom_input = st.text_input("Try it with your own Sentence!") | |
text_to_analyze = custom_input if custom_input else selected_text | |
st.subheader('Full example text') | |
HTML_WRAPPER = """<div class="scroll entities" style="overflow-x: auto; border: 1px solid #e6e9ef; border-radius: 0.25rem; padding: 1rem; margin-bottom: 2.5rem; white-space:pre-wrap">{}</div>""" | |
st.markdown(HTML_WRAPPER.format(text_to_analyze), unsafe_allow_html=True) | |
# Initialize Spark and create pipeline | |
spark = init_spark() | |
pipeline = create_pipeline(model) | |
output = fit_data(pipeline, text_to_analyze) | |
# Display matched sentence | |
st.subheader("Processed output:") | |
results = { | |
'Document': output[0]['document'][0].result, | |
'NER Chunk': [n.result for n in output[0]['ner_chunk']], | |
"NER Label": [n.metadata['entity'] for n in output[0]['ner_chunk']] | |
} | |
annotate(results) | |
with st.expander("View DataFrame"): | |
df = pd.DataFrame({'NER Chunk': results['NER Chunk'], 'NER Label': results['NER Label']}) | |
df.index += 1 | |
st.dataframe(df) | |