|
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
|
|
|
|
|
|
st.set_page_config(
|
|
layout="wide",
|
|
initial_sidebar_state="auto"
|
|
)
|
|
|
|
|
|
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)
|
|
|
|
@st.cache_resource
|
|
def init_spark():
|
|
return sparknlp.start()
|
|
|
|
@st.cache_resource
|
|
def create_pipeline(model):
|
|
document = DocumentAssembler()\
|
|
.setInputCol("text")\
|
|
.setOutputCol("document")
|
|
|
|
embeddings = BertSentenceEmbeddings\
|
|
.pretrained('labse', 'xx') \
|
|
.setInputCols(["document"])\
|
|
.setOutputCol("sentence_embeddings")
|
|
|
|
sentimentClassifier = ClassifierDLModel.pretrained("classifierdl_bert_sentiment", "de") \
|
|
.setInputCols(["sentence_embeddings"]) \
|
|
.setOutputCol("class_")
|
|
|
|
nlpPipeline = Pipeline(
|
|
stages=[
|
|
document,
|
|
embeddings,
|
|
sentimentClassifier
|
|
])
|
|
|
|
return nlpPipeline
|
|
|
|
def fit_data(pipeline, data):
|
|
empty_df = spark.createDataFrame([['']]).toDF('text')
|
|
pipeline_model = pipeline.fit(empty_df)
|
|
model = LightPipeline(pipeline_model)
|
|
results = model.fullAnnotate(data)[0]
|
|
|
|
return results['class_'][0].result
|
|
|
|
|
|
st.markdown('<div class="main-title">State-of-the-Art German Sentiment Detection with Spark NLP</div>', unsafe_allow_html=True)
|
|
|
|
|
|
model = st.sidebar.selectbox(
|
|
"Choose the pretrained model",
|
|
["classifierdl_bert_sentiment"],
|
|
help="For more info about the models visit: https://sparknlp.org/models"
|
|
)
|
|
|
|
|
|
link = """
|
|
<a href="https://colab.research.google.com/github/JohnSnowLabs/spark-nlp-workshop/blob/master/tutorials/streamlit_notebooks/CLASSIFICATION_De_SENTIMENT.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)
|
|
|
|
|
|
examples = [
|
|
"Spiel und Meisterschaft nicht spannend genug? Muss man jetzt den Videoschiedsrichter kontrollieren? Ich bin entsetzt,dachte der darf nur bei krassen Fehlentscheidungen ran. So macht der Fussball keinen Spass mehr.",
|
|
"Habe gestern am Mittwoch den werder Podcast vermisst. Wie schnell man sich an etwas gewöhnt und darauf freut. Danke an Plainsman für die guten Interviews und den Einblick hinter die Kulissen von werderbremen. Angenehme Winterpause weiterhin!",
|
|
"Die Szenen folgen ruckartig aufeinander, die Dialoge sind theatralisch, die schauspielerischen Leistungen kommen nicht wirklich über den Film hinaus. Nur die Musik von Vivaldi rettet den Tag. Eine große Enttäuschung.",
|
|
"ich mag den Schiri nicht, denn der ist vergiftet!",
|
|
"ManCity Guardiola und seine Gang, ihr seid Arschlöcher. Ich habe gerade ein Vermögen durch deine Schuld deine Bayern dort verloren"
|
|
]
|
|
|
|
selected_text = st.selectbox("Select a sample", examples)
|
|
custom_input = st.text_input("Try it for yourself!")
|
|
|
|
if custom_input:
|
|
selected_text = custom_input
|
|
elif selected_text:
|
|
selected_text = selected_text
|
|
|
|
st.subheader('Selected Text')
|
|
st.write(selected_text)
|
|
|
|
|
|
spark = init_spark()
|
|
pipeline = create_pipeline(model)
|
|
output = fit_data(pipeline, selected_text)
|
|
|
|
|
|
if output.lower() in ['pos', 'positive']:
|
|
st.markdown("""<h3>This seems like a <span style="color: green">{}</span> text. <span style="font-size:35px;">😃</span></h3>""".format('positive'), unsafe_allow_html=True)
|
|
elif output.lower() in ['neg', 'negative']:
|
|
st.markdown("""<h3>This seems like a <span style="color: red">{}</span> text. <span style="font-size:35px;">😠</span?</h3>""".format('negative'), unsafe_allow_html=True)
|
|
|