# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: 'Python 3.6.10 64-bit (''tensorflow2_p36'': conda)'
#     name: python3
# ---

# + [markdown] id="TA21Jo5d9SVq"
#
#
# ![JohnSnowLabs](https://nlp.johnsnowlabs.com/assets/images/logo.png)
#
# [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://githubtocolab.com/JohnSnowLabs/spark-nlp-workshop/blob/master/tutorials/streamlit_notebooks/NER_FR.ipynb)
#
#
#

# + [markdown] id="CzIdjHkAW8TB"
# # **Detect entities in French text**

# + [markdown] id="wIeCOiJNW-88"
# ## 1. Colab Setup

# + colab={"base_uri": "https://localhost:8080/", "height": 1000} id="CGJktFHdHL1n" outputId="478d8289-41bc-447f-c7fa-50c485937f8e"
# Install PySpark and Spark NLP
# ! pip install -q pyspark==3.1.2 spark-nlp

# Install Spark NLP Display lib
# ! pip install --upgrade -q spark-nlp-display

# + [markdown] id="eCIT5VLxS3I1"
# ## 2. Start the Spark session

# + id="sw-t1zxlHTB7"

import json
import pandas as pd
import numpy as np

from pyspark.ml import Pipeline
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
from sparknlp.annotator import *
from sparknlp.base import *
import sparknlp
from sparknlp.pretrained import PretrainedPipeline

spark = sparknlp.start()

# + [markdown] id="9RgiqfX5XDqb"
# ## 3. Select the DL model

# + id="LLuDz_t40be4"
# If you change the model, re-run all the cells below.
# Applicable models: wikiner_840B_300
MODEL_NAME = "wikiner_840B_300"

# + [markdown] id="2Y9GpdJhXIpD"
# ## 4. Some sample examples

# + id="vBOKkB2THdGI"
# Enter examples to be transformed as strings in this list
text_list = [
    """<NAME> 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 <NAME> 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, <NAME>, ont créée en 2000. [ 9] Il a progressivement transféré ses fonctions à <NAME> et <NAME>. 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 <NAME>.""",
    """La Joconde est une peinture à l'huile du XVIe siècle créée par Léonard. Il se tient au Louvre à Paris."""
]

# + [markdown] id="XftYgju4XOw_"
# ## 5. Define Spark NLP pipeline

# + colab={"base_uri": "https://localhost:8080/"} id="lBggF5P8J1gc" outputId="0c62ad2c-b4b5-4e25-8285-32c3185f9551"
document_assembler = DocumentAssembler() \
    .setInputCol('text') \
    .setOutputCol('document')

tokenizer = Tokenizer() \
    .setInputCols(['document']) \
    .setOutputCol('token')

# The wikiner_840B_300 is trained with glove_840B_300, so the embeddings in the
# pipeline should match. Same applies for the other available models.
if MODEL_NAME == "wikiner_840B_300":
    embeddings = WordEmbeddingsModel.pretrained('glove_840B_300', lang='xx') \
        .setInputCols(['document', 'token']) \
        .setOutputCol('embeddings')
elif MODEL_NAME == "wikiner_6B_300":
    embeddings = WordEmbeddingsModel.pretrained('glove_6B_300', lang='xx') \
        .setInputCols(['document', 'token']) \
        .setOutputCol('embeddings')
elif MODEL_NAME == "wikiner_6B_100":
    embeddings = WordEmbeddingsModel.pretrained('glove_100d') \
        .setInputCols(['document', 'token']) \
        .setOutputCol('embeddings')

ner_model = NerDLModel.pretrained(MODEL_NAME, 'fr') \
    .setInputCols(['document', 'token', 'embeddings']) \
    .setOutputCol('ner')

ner_converter = NerConverter() \
    .setInputCols(['document', 'token', 'ner']) \
    .setOutputCol('ner_chunk')

nlp_pipeline = Pipeline(stages=[
    document_assembler, 
    tokenizer,
    embeddings,
    ner_model,
    ner_converter
])

# + [markdown] id="mv0abcwhXWC-"
# ## 6. Run the pipeline

# + id="EYf_9sXDXR4t"
empty_df = spark.createDataFrame([['']]).toDF('text')
pipeline_model = nlp_pipeline.fit(empty_df)
df = spark.createDataFrame(pd.DataFrame({'text': text_list}))
result = pipeline_model.transform(df)

# + [markdown] id="UQY8tAP6XZJL"
# ## 7. Visualize results

# + colab={"base_uri": "https://localhost:8080/", "height": 656} id="Ar32BZu7J79X" outputId="43fdadc7-fe1d-4d92-b908-af0aa6ddea96"
from sparknlp_display import NerVisualizer

NerVisualizer().display(
    result = result.collect()[0],
    label_col = 'ner_chunk',
    document_col = 'document'
)

StarcoderdataJupyterScriptsDedupFiltered