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 | |
# 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">Reconnaître les personnes, lieux, organisations et entités diverses</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 (né le 28 octobre 1955) est un magnat des affaires, développeur de logiciels, investisseur et philanthrope américain. Il est surtout connu comme le co-fondateur de Microsoft Corporation. Au cours de sa carrière chez Microsoft, Gates a occupé les postes de président, chef de la direction (PDG), président et architecte logiciel en chef, tout en étant le plus grand actionnaire individuel jusqu'en mai 2014. Il est l'un des entrepreneurs et pionniers les plus connus du révolution des micro-ordinateurs des années 1970 et 1980. Né et élevé à Seattle, Washington, Gates a cofondé Microsoft avec son ami d'enfance Paul Allen en 1975, à Albuquerque, au Nouveau-Mexique; il est devenu la plus grande société de logiciels informatiques au monde. Gates a dirigé l'entreprise en tant que président-directeur général jusqu'à sa démission en tant que PDG en janvier 2000, mais il est resté président et est devenu architecte logiciel en chef. À la fin des années 1990, Gates avait été critiqué pour ses tactiques commerciales, considérées comme anticoncurrentielles. Cette opinion a été confirmée par de nombreuses décisions de justice. En juin 2006, Gates a annoncé qu'il passerait à un poste à temps partiel chez Microsoft et à un emploi à temps plein à la Bill & Melinda Gates Foundation, la fondation caritative privée que lui et sa femme, Melinda Gates, ont créée en 2000. [ 9] Il a progressivement transféré ses fonctions à Ray Ozzie et Craig Mundie. Il a démissionné de son poste de président de Microsoft en février 2014 et a assumé un nouveau poste de conseiller technologique pour soutenir le nouveau PDG Satya Nadella.""", | |
"""La Joconde est une peinture à l'huile du XVIe siècle créée par Léonard. Il se tient au Louvre à Paris.""", | |
"""Lorsque Sebastian Thrun a commencé à travailler sur les voitures autonomes chez Google en 2007, peu de personnes en dehors de l'entreprise l'ont pris au sérieux. "Je peux vous dire que des PDG très importants de grands constructeurs automobiles américains me serreraient la main et se détourneraient parce que je n'en valais pas la peine", a déclaré Thrun, désormais co-fondateur et PDG de la startup en ligne d'enseignement supérieur Udacity, dans une interview. avec Recode plus tôt cette semaine.""", | |
"""Facebook est un service de réseautage social lancé sous le nom de TheFacebook le 4 février 2004. Il a été fondé par Mark Zuckerberg avec ses colocataires et ses collègues étudiants de l'Université Harvard Eduardo Saverin, Andrew McCollum, Dustin Moskovitz et Chris Hughes. L'adhésion au site Web a été initialement limitée par les fondateurs aux étudiants de Harvard, mais a été étendue à d'autres collèges de la région de Boston, à l'Ivy League et, progressivement, à la plupart des universités des États-Unis et du Canada.""", | |
"""L'histoire du traitement du langage naturel a généralement commencé dans les années 1950, bien que l'on puisse trouver du travail de périodes antérieures. En 1950, Alan Turing a publié un article intitulé «Computing Machinery and Intelligence» qui proposait ce qu'on appelle maintenant le test de Turing comme critère d'intelligence""", | |
"""Geoffrey Everest Hinton est un psychologue cognitif et un informaticien canadien-anglais, surtout connu pour ses travaux sur les réseaux de neurones artificiels. Depuis 2013, il partage son temps à travailler pour Google et l'Université de Toronto. En 2017, il a cofondé et est devenu le conseiller scientifique en chef du Vector Institute de Toronto.""", | |
"""Quand j'ai dit à John que je voulais déménager en Alaska, il m'a prévenu que j'aurais du mal à trouver un Starbucks là-bas.""", | |
"""Steven Paul Jobs était un magnat des affaires américain, designer industriel, investisseur et propriétaire de médias. Il était président du conseil, chef de la direction (PDG) et cofondateur d'Apple Inc., président et actionnaire majoritaire de Pixar, membre du conseil d'administration de The Walt Disney Company à la suite de son acquisition de Pixar, et fondateur, président et PDG de NeXT. Jobs est largement reconnu comme un pionnier de la révolution informatique personnelle des années 1970 et 1980, avec le cofondateur d'Apple, Steve Wozniak. Jobs est né à San Francisco, en Californie, et mis en adoption. Il a été élevé dans la région de la baie de San Francisco. Il a fréquenté le Reed College en 1972 avant d'abandonner la même année et a voyagé à travers l'Inde en 1974 à la recherche de l'illumination et de l'étude du bouddhisme zen.""", | |
"""Titanic est un film épique et romantique américain de 1997 réalisé, écrit, coproduit et co-édité par James Cameron. Intégrant à la fois des aspects historiques et fictifs, il est basé sur des récits du naufrage du RMS Titanic et met en vedette Leonardo DiCaprio et Kate Winslet en tant que membres de différentes classes sociales qui tombent amoureux à bord du navire pendant son voyage inaugural malheureux.""", | |
"""En plus d'être le roi du nord, John Snow est un médecin anglais et un leader dans le développement de l'anesthésie et de l'hygiène médicale. Il est considéré comme le premier à utiliser des données pour guérir l'épidémie de choléra en 1834.""" | |
] | |
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) | |