abdullahmubeen10 commited on
Commit
68747de
·
verified ·
1 Parent(s): 78843a7

Upload 5 files

Browse files
.streamlit/config.toml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ [theme]
2
+ base="light"
3
+ primaryColor="#29B4E8"
Demo.py ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import sparknlp
3
+ import os
4
+ import pandas as pd
5
+
6
+ from sparknlp.base import *
7
+ from sparknlp.annotator import *
8
+ from pyspark.ml import Pipeline
9
+ from sparknlp.pretrained import PretrainedPipeline
10
+ from annotated_text import annotated_text
11
+
12
+ # Page configuration
13
+ st.set_page_config(
14
+ layout="wide",
15
+ initial_sidebar_state="auto"
16
+ )
17
+
18
+ # CSS for styling
19
+ st.markdown("""
20
+ <style>
21
+ .main-title {
22
+ font-size: 36px;
23
+ color: #4A90E2;
24
+ font-weight: bold;
25
+ text-align: center;
26
+ }
27
+ .section {
28
+ background-color: #f9f9f9;
29
+ padding: 10px;
30
+ border-radius: 10px;
31
+ margin-top: 10px;
32
+ }
33
+ .section p, .section ul {
34
+ color: #666666;
35
+ }
36
+ </style>
37
+ """, unsafe_allow_html=True)
38
+
39
+ @st.cache_resource
40
+ def init_spark():
41
+ return sparknlp.start()
42
+
43
+ @st.cache_resource
44
+ def create_pipeline(model):
45
+ documentAssembler = DocumentAssembler() \
46
+ .setInputCol("text") \
47
+ .setOutputCol("document")
48
+
49
+ sentenceDetector = SentenceDetectorDLModel.pretrained("sentence_detector_dl", "xx") \
50
+ .setInputCols(["document"]) \
51
+ .setOutputCol("sentence")
52
+
53
+ tokenizer = Tokenizer() \
54
+ .setInputCols(["sentence"]) \
55
+ .setOutputCol("token")
56
+
57
+ word_embeddings = WordEmbeddingsModel.pretrained("persian_w2v_cc_300d", "fa") \
58
+ .setInputCols(["document", "token"]) \
59
+ .setOutputCol("embeddings")
60
+
61
+ ner = NerDLModel.pretrained("personer_cc_300d", "fa") \
62
+ .setInputCols(["sentence", "token", "embeddings"]) \
63
+ .setOutputCol("ner")
64
+
65
+ ner_converter = NerConverter().setInputCols(["sentence", "token", "ner"]).setOutputCol("ner_chunk")
66
+
67
+ pipeline = Pipeline(stages=[documentAssembler, sentenceDetector, tokenizer, word_embeddings, ner, ner_converter])
68
+ return pipeline
69
+
70
+ def fit_data(pipeline, data):
71
+ empty_df = spark.createDataFrame([['']]).toDF('text')
72
+ pipeline_model = pipeline.fit(empty_df)
73
+ model = LightPipeline(pipeline_model)
74
+ result = model.fullAnnotate(data)
75
+ return result
76
+
77
+ def annotate(data):
78
+ document, chunks, labels = data["Document"], data["NER Chunk"], data["NER Label"]
79
+ annotated_words = []
80
+ for chunk, label in zip(chunks, labels):
81
+ parts = document.split(chunk, 1)
82
+ if parts[0]:
83
+ annotated_words.append(parts[0])
84
+ annotated_words.append((chunk, label))
85
+ document = parts[1]
86
+ if document:
87
+ annotated_words.append(document)
88
+ annotated_text(*annotated_words)
89
+
90
+ # Set up the page layout
91
+ st.markdown('<div class="main-title">Recognize entities in Persian text</div>', unsafe_allow_html=True)
92
+ st.markdown('<div class="section"><p>The <code>personer_cc_300d</code> model uses Persian word embeddings to find 6 different types of entities in Persian text. It is trained using <code>persian_w2v_cc_300d</code> word embeddings</p></div>', unsafe_allow_html=True)
93
+
94
+ # Sidebar content
95
+ model = st.sidebar.selectbox(
96
+ "Choose the pretrained model",
97
+ ["personer_cc_300d"],
98
+ help="For more info about the models visit: https://sparknlp.org/models"
99
+ )
100
+
101
+ # Reference notebook link in sidebar
102
+ link = """
103
+ <a href="https://colab.research.google.com/github/JohnSnowLabs/spark-nlp-workshop/blob/master/tutorials/streamlit_notebooks/public/NER.ipynb">
104
+ <img src="https://colab.research.google.com/assets/colab-badge.svg" style="zoom: 1.3" alt="Open In Colab"/>
105
+ </a>
106
+ """
107
+ st.sidebar.markdown('Reference notebook:')
108
+ st.sidebar.markdown(link, unsafe_allow_html=True)
109
+
110
+ # Load examples
111
+ examples = [
112
+ "ویلیام هنری گیتس سوم (متولد 28 اکتبر 1955) یک تاجر آمریکایی، توسعه دهنده نرم افزار، سرمایه گذار و نیکوکار است. او بیشتر به عنوان یکی از بنیانگذاران شرکت مایکروسافت شناخته می‌شود. در طول دوران حرفه‌ای خود در مایکروسافت، گیتس در سمت‌های رئیس هیئت مدیره، مدیرعامل (CEO)، رئیس و معمار ارشد نرم‌افزار فعالیت داشته و تا ماه مه 2014 بزرگترین سهامدار فردی بوده است. او یکی از کارآفرینان و پیشگامان مشهور انقلاب میکروکامپیوترهای دهه 1970 و 1980 است. گیتس که در سیاتل، واشنگتن به دنیا آمده و بزرگ شده است، در سال 1975 به همراه دوست دوران کودکی خود، پل آلن، مایکروسافت را در آلبوکرکی، نیومکزیکو تأسیس کرد. این شرکت به بزرگترین شرکت نرم‌افزاری کامپیوتر شخصی جهان تبدیل شد. گیتس تا ژانویه 2000 به عنوان رئیس هیئت مدیره و مدیرعامل شرکت را رهبری کرد، اما به عنوان رئیس هیئت مدیره باقی ماند و معمار ارشد نرم‌افزار شد. در اواخر دهه 1990، گیتس به دلیل تاکتیک‌های تجاری خود که ضد رقابتی تلقی می‌شدند، مورد انتقاد قرار گرفت. این نظر توسط دادگاه‌های متعدد تأیید شده است. در ژوئن 2006، گیتس اعلام کرد که به یک نقش نیمه وقت در مایکروسافت و کار تمام وقت در بنیاد خیریه خصوصی بیل و ملیندا گیتس که او و همسرش ملیندا گیتس در سال 2000 تأسیس کرده بودند، منتقل خواهد شد. او به تدریج وظایف خود را به ری اوزی و کریگ موندی منتقل کرد. او در فوریه 2014 از سمت رئیس هیئت مدیره مایکروسافت استعفا داد و به عنوان مشاور فناوری برای حمایت از مدیرعامل تازه منصوب شده ساتیا نادلا پست جدیدی را بر عهده گرفت.",
113
+ "مونالیزا یک نقاشی روغنی قرن شانزدهم است که توسط لئوناردو داوینچی خلق شده است. این اثر در موزه لوور در پاریس نگهداری می‌شود.",
114
+ "وقتی سباستین تورون در سال 2007 شروع به کار بر روی خودروهای خودران در گوگل کرد، افراد کمی خارج از شرکت او را جدی گرفتند. تورون، که اکنون یکی از بنیانگذاران و مدیرعامل استارتاپ آموزش عالی آنلاین Udacity است، در مصاحبه‌ای با Recode در اوایل این هفته گفت: «می‌توانم بگویم مدیران ارشد بسیار بالای شرکت‌های بزرگ خودروسازی آمریکایی دست من را می‌فشردند و برمی‌گشتند زیرا صحبت با من ارزش نداشت.»",
115
+ "فیسبوک یک سرویس شبکه اجتماعی است که در 4 فوریه 2004 با نام TheFacebook راه اندازی شد. این سرویس توسط مارک زاکربرگ و هم اتاقی‌های کالج و هم دانشگاهیانش در دانشگاه هاروارد، ادواردو ساورین، اندرو مک کولوم، داستین موسکویتز و کریس هیوز تأسیس شد. عضویت وب سایت در ابتدا توسط بنیانگذاران محدود به دانشجویان هاروارد بود، اما به دیگر کالج‌ها در منطقه بوستون، آیوی لیگ و به تدریج بیشتر دانشگاه‌های ایالات متحده و کانادا گسترش یافت.",
116
+ "تاریخچه پردازش زبان طبیعی به طور کلی از دهه 1950 آغاز شد، اگرچه آثاری از دوره‌های قبل نیز وجود دارد. در سال 1950، آلن تورینگ مقاله‌ای با عنوان «ماشین محاسبات و هوش» منتشر کرد که آزمونی را پیشنهاد کرد که اکنون به عنوان آزمون تورینگ به عنوان معیار هوش شناخته می‌شود.",
117
+ "جفری اورست هینتون یک روانشناس شناختی و دانشمند رایانه کانادایی انگلیسی است که بیشتر به خاطر کارش بر روی شبکه‌های عصبی مصنوعی شناخته می‌شود. از سال 2013 او زمان خود را بین کار برای گوگل و دانشگاه تورنتو تقسیم کرده است. در سال 2017، او هم بنیانگذار و مشاور ارشد علمی موسسه وکتور در تورنتو شد.",
118
+ "وقتی به جان گفتم که می‌خواهم به آلاسکا نقل مکان کنم، او به من هشدار داد که در آنجا برای پیدا کردن یک استارباکس دچار مشکل خواهم شد.",
119
+ "استیون پاول جابز یک تاجر آمریکایی، طراح صنعتی، سرمایه‌گذار و مالک رسانه بود. او رئیس هیئت مدیره، مدیرعامل (CEO) و یکی از بنیانگذاران شرکت اپل، رئیس هیئت مدیره و سهامدار عمده پیکسار، عضو هیئت مدیره شرکت والت دیزنی پس از خرید پیکسار و بنیانگذار، رئیس هیئت مدیره و مدیرعامل نکست بود. جابز به همراه بنیانگذار اپل، استیو وزنیاک، به عنوان یکی از پیشگامان انقلاب کامپیوترهای شخصی دهه 1970 و 1980 شناخته می‌شود. جابز در سانفرانسیسکو، کالیفرنیا به دنیا آمد و به فرزندخواندگی پذیرفته شد. او در منطقه خلیج سانفرانسیسکو بزرگ شد. در سال 1972 به کالج رید رفت، اما همان سال ترک تحصیل کرد و در سال 1974 به هند ��فر کرد تا به دنبال روشن‌بینی بگردد و به مطالعه ذن بودیسم بپردازد.",
120
+ "تایتانیک یک فیلم حماسی عاشقانه و فاجعه‌آمیز آمریکایی محصول سال 1997 است که توسط جیمز کامرون کارگردانی، نویسندگی، تهیه‌کنندگی و تدوین شده است. این فیلم که جنبه‌های تاریخی و داستانی را در بر می‌گیرد، بر اساس روایت‌های غرق شدن کشتی RMS تایتانیک ساخته شده و لئوناردو دی کاپریو و کیت وینسلت به عنوان اعضای طبقات اجتماعی مختلف که در طول سفر ناموفق کشتی عاشق می‌شوند، بازی می‌کنند.",
121
+ "علاوه بر اینکه پادشاه شمال است، جان اسنو یک پزشک انگلیسی و یکی از پیشگامان در توسعه بیهوشی و بهداشت پزشکی است. او به عنوان اولین کسی که از داده‌ها برای درمان شیوع وبا در سال 1834 استفاده کرد، شناخته می‌شود."
122
+ ]
123
+
124
+ selected_text = st.selectbox("Select an example", examples)
125
+ custom_input = st.text_input("Try it with your own Sentence!")
126
+
127
+ text_to_analyze = custom_input if custom_input else selected_text
128
+
129
+ st.subheader('Full example text')
130
+ 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>"""
131
+ st.markdown(HTML_WRAPPER.format(text_to_analyze), unsafe_allow_html=True)
132
+
133
+ # Initialize Spark and create pipeline
134
+ spark = init_spark()
135
+ pipeline = create_pipeline(model)
136
+ output = fit_data(pipeline, text_to_analyze)
137
+
138
+ # Display matched sentence
139
+ st.subheader("Processed output:")
140
+
141
+ results = {
142
+ 'Document': output[0]['document'][0].result,
143
+ 'NER Chunk': [n.result for n in output[0]['ner_chunk']],
144
+ "NER Label": [n.metadata['entity'] for n in output[0]['ner_chunk']]
145
+ }
146
+
147
+ annotate(results)
148
+
149
+ with st.expander("View DataFrame"):
150
+ df = pd.DataFrame({'NER Chunk': results['NER Chunk'], 'NER Label': results['NER Label']})
151
+ df.index += 1
152
+ st.dataframe(df)
153
+
154
+
155
+
156
+
Dockerfile ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Download base image ubuntu 18.04
2
+ FROM ubuntu:18.04
3
+
4
+ # Set environment variables
5
+ ENV NB_USER jovyan
6
+ ENV NB_UID 1000
7
+ ENV HOME /home/${NB_USER}
8
+
9
+ # Install required packages
10
+ RUN apt-get update && apt-get install -y \
11
+ tar \
12
+ wget \
13
+ bash \
14
+ rsync \
15
+ gcc \
16
+ libfreetype6-dev \
17
+ libhdf5-serial-dev \
18
+ libpng-dev \
19
+ libzmq3-dev \
20
+ python3 \
21
+ python3-dev \
22
+ python3-pip \
23
+ unzip \
24
+ pkg-config \
25
+ software-properties-common \
26
+ graphviz \
27
+ openjdk-8-jdk \
28
+ ant \
29
+ ca-certificates-java \
30
+ && apt-get clean \
31
+ && update-ca-certificates -f;
32
+
33
+ # Install Python 3.8 and pip
34
+ RUN add-apt-repository ppa:deadsnakes/ppa \
35
+ && apt-get update \
36
+ && apt-get install -y python3.8 python3-pip \
37
+ && apt-get clean;
38
+
39
+ # Set up JAVA_HOME
40
+ ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
41
+ RUN mkdir -p ${HOME} \
42
+ && echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/" >> ${HOME}/.bashrc \
43
+ && chown -R ${NB_UID}:${NB_UID} ${HOME}
44
+
45
+ # Create a new user named "jovyan" with user ID 1000
46
+ RUN useradd -m -u ${NB_UID} ${NB_USER}
47
+
48
+ # Switch to the "jovyan" user
49
+ USER ${NB_USER}
50
+
51
+ # Set home and path variables for the user
52
+ ENV HOME=/home/${NB_USER} \
53
+ PATH=/home/${NB_USER}/.local/bin:$PATH
54
+
55
+ # Set the working directory to the user's home directory
56
+ WORKDIR ${HOME}
57
+
58
+ # Upgrade pip and install Python dependencies
59
+ RUN python3.8 -m pip install --upgrade pip
60
+ COPY requirements.txt /tmp/requirements.txt
61
+ RUN python3.8 -m pip install -r /tmp/requirements.txt
62
+
63
+ # Copy the application code into the container at /home/jovyan
64
+ COPY --chown=${NB_USER}:${NB_USER} . ${HOME}
65
+
66
+ # Expose port for Streamlit
67
+ EXPOSE 7860
68
+
69
+ # Define the entry point for the container
70
+ ENTRYPOINT ["streamlit", "run", "Demo.py", "--server.port=7860", "--server.address=0.0.0.0"]
pages/Workflow & Model Overview.py ADDED
@@ -0,0 +1,215 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+
4
+ # Custom CSS for better styling
5
+ st.markdown("""
6
+ <style>
7
+ .main-title {
8
+ font-size: 36px;
9
+ color: #4A90E2;
10
+ font-weight: bold;
11
+ text-align: center;
12
+ }
13
+ .sub-title {
14
+ font-size: 24px;
15
+ color: #4A90E2;
16
+ margin-top: 20px;
17
+ }
18
+ .section {
19
+ background-color: #f9f9f9;
20
+ padding: 15px;
21
+ border-radius: 10px;
22
+ margin-top: 20px;
23
+ }
24
+ .section h2 {
25
+ font-size: 22px;
26
+ color: #4A90E2;
27
+ }
28
+ .section p, .section ul {
29
+ color: #666666;
30
+ }
31
+ .link {
32
+ color: #4A90E2;
33
+ text-decoration: none;
34
+ }
35
+ </style>
36
+ """, unsafe_allow_html=True)
37
+
38
+ # Main Title
39
+ st.markdown('<div class="main-title">Persian Named Entity Recognition - Word Embeddings-based Model</div>', unsafe_allow_html=True)
40
+
41
+ # Introduction
42
+ st.markdown("""
43
+ <div class="section">
44
+ <p>Named Entity Recognition (NER) models identify and categorize important entities in a text. This page details a word embeddings-based NER model for Persian texts, using the <code>persian_w2v_cc_300d</code> word embeddings. The model is pretrained and available for use with Spark NLP.</p>
45
+ </div>
46
+ """, unsafe_allow_html=True)
47
+
48
+ # Model Description
49
+ st.markdown('<div class="sub-title">Description</div>', unsafe_allow_html=True)
50
+ st.markdown("""
51
+ <div class="section">
52
+ <p>The <code>personer_cc_300d</code> model uses Persian word embeddings to find 6 different types of entities in Persian text. It is trained using <code>persian_w2v_cc_300d</code> word embeddings, so please use the same embeddings in the pipeline. It can identify the following types of entities:</p>
53
+ <ul>
54
+ <li>PER (Persons)</li>
55
+ <li>FAC (Facilities)</li>
56
+ <li>PRO (Products)</li>
57
+ <li>LOC (Locations)</li>
58
+ <li>ORG (Organizations)</li>
59
+ <li>EVENT (Events)</li>
60
+ </ul>
61
+ </div>
62
+ """, unsafe_allow_html=True)
63
+
64
+ # Setup Instructions
65
+ st.markdown('<div class="sub-title">Setup</div>', unsafe_allow_html=True)
66
+ st.markdown('<p>To use the model, you need Spark NLP installed. You can install it using pip:</p>', unsafe_allow_html=True)
67
+ st.code("""
68
+ pip install spark-nlp
69
+ pip install pyspark
70
+ """, language="bash")
71
+
72
+ st.markdown("<p>Then, import Spark NLP and start a Spark session:</p>", unsafe_allow_html=True)
73
+ st.code("""
74
+ import sparknlp
75
+
76
+ # Start Spark Session
77
+ spark = sparknlp.start()
78
+ """, language='python')
79
+
80
+ # Example Usage
81
+ st.markdown('<div class="sub-title">Example Usage with Persian NER Model</div>', unsafe_allow_html=True)
82
+ st.markdown("""
83
+ <div class="section">
84
+ <p>Below is an example of how to set up and use the <code>personer_cc_300d</code> model for named entity recognition in Persian:</p>
85
+ </div>
86
+ """, unsafe_allow_html=True)
87
+ st.code('''
88
+ from sparknlp.base import *
89
+ from sparknlp.annotator import *
90
+ from pyspark.ml import Pipeline
91
+ from pyspark.sql.functions import col, expr, round, concat, lit, explode
92
+
93
+ # Define the components of the pipeline
94
+ documentAssembler = DocumentAssembler() \\
95
+ .setInputCol("text") \\
96
+ .setOutputCol("document")
97
+
98
+ sentenceDetector = SentenceDetectorDLModel.pretrained("sentence_detector_dl", "xx") \\
99
+ .setInputCols(["document"]) \\
100
+ .setOutputCol("sentence")
101
+
102
+ tokenizer = Tokenizer() \\
103
+ .setInputCols(["sentence"]) \\
104
+ .setOutputCol("token")
105
+
106
+ word_embeddings = WordEmbeddingsModel.pretrained("persian_w2v_cc_300d", "fa") \\
107
+ .setInputCols(["document", "token"]) \\
108
+ .setOutputCol("embeddings")
109
+
110
+ ner = NerDLModel.pretrained("personer_cc_300d", "fa") \\
111
+ .setInputCols(["sentence", "token", "embeddings"]) \\
112
+ .setOutputCol("ner")
113
+
114
+ ner_converter = NerConverter().setInputCols(["sentence", "token", "ner"]).setOutputCol("ner_chunk")
115
+
116
+ # Create the pipeline
117
+ pipeline = Pipeline(stages=[documentAssembler, sentenceDetector, tokenizer, word_embeddings, ner, ner_converter])
118
+
119
+ # Create sample data
120
+ example = """
121
+ به گزارش خبرنگار ایرنا ، بر اساس تصمیم این مجمع ، محمد قمی نماینده مردم پاکدشت به عنوان رئیس و علی‌اکبر موسوی خوئینی و شمس‌الدین وهابی نمایندگان مردم تهران به عنوان نواب رئیس انتخاب شدند
122
+ """
123
+ data = spark.createDataFrame([[example]]).toDF("text")
124
+
125
+ # Fit and transform data with the pipeline
126
+ result = pipeline.fit(data).transform(data)
127
+
128
+ # Select the result, entity
129
+ result.select(
130
+ expr("explode(ner_chunk) as ner_chunk")
131
+ ).select(
132
+ col("ner_chunk.result").alias("chunk"),
133
+ col("ner_chunk.metadata").getItem("entity").alias("ner_label")
134
+ ).show(truncate=False)
135
+ ''', language="python")
136
+
137
+ import pandas as pd
138
+
139
+ # Create the data for the DataFrame
140
+ data = {
141
+ "chunk": [
142
+ "خبرنگار ایرنا",
143
+ "محمد قمی",
144
+ "پاکدشت",
145
+ "علی‌اکبر موسوی خوئینی",
146
+ "شمس‌الدین وهابی",
147
+ "تهران"
148
+ ],
149
+ "ner_label": [
150
+ "ORG",
151
+ "PER",
152
+ "LOC",
153
+ "PER",
154
+ "PER",
155
+ "LOC"
156
+ ]
157
+ }
158
+
159
+ # Creating the DataFrame
160
+ df = pd.DataFrame(data)
161
+ df.index += 1
162
+ st.dataframe(df)
163
+
164
+ # Model Information
165
+ st.markdown('<div class="sub-title">Model Information</div>', unsafe_allow_html=True)
166
+ st.markdown("""
167
+ <div class="section">
168
+ <p>The <code>personer_cc_300d</code> model details are as follows:</p>
169
+ <ul>
170
+ <li><strong>Model Name:</strong> personer_cc_300d</li>
171
+ <li><strong>Type:</strong> ner</li>
172
+ <li><strong>Compatibility:</strong> Spark NLP 2.7.0+</li>
173
+ <li><strong>License:</strong> Open Source</li>
174
+ <li><strong>Edition:</strong> Official</li>
175
+ <li><strong>Input Labels:</strong> [document, token, word_embeddings]</li>
176
+ <li><strong>Output Labels:</strong> [ner]</li>
177
+ <li><strong>Language:</strong> fa</li>
178
+ <li><strong>Dependencies:</strong> persian_w2v_cc_300d</li>
179
+ </ul>
180
+ </div>
181
+ """, unsafe_allow_html=True)
182
+
183
+ # Summary
184
+ st.markdown('<div class="sub-title">Summary</div>', unsafe_allow_html=True)
185
+ st.markdown("""
186
+ <div class="section">
187
+ <p>This page provided an overview of the <code>personer_cc_300d</code> model for Persian NER. We discussed how to set up and use the model with Spark NLP, including example code and results. We also provided details on the model's specifications and links to relevant resources for further exploration.</p>
188
+ </div>
189
+ """, unsafe_allow_html=True)
190
+
191
+ # References
192
+ st.markdown('<div class="sub-title">References</div>', unsafe_allow_html=True)
193
+ st.markdown("""
194
+ <div class="section">
195
+ <ul>
196
+ <li><a class="link" href="https://sparknlp.org/api/python/reference/autosummary/sparknlp/annotator/ner/ner_dl/index.html" target="_blank" rel="noopener">NerDLModel</a> annotator documentation</li>
197
+ <li>Model Used: <a class="link" href="https://sparknlp.org/2020/12/07/personer_cc_300d_fa.html" rel="noopener">personer_cc_300d_fa</a></li>
198
+ <li><a class="link" href="https://www.aclweb.org/anthology/C16-1319/" target="_blank" rel="noopener">Data Source</a></li>
199
+ <li><a class="link" href="https://nlp.johnsnowlabs.com/recognize_entitie" target="_blank" rel="noopener">Visualization demos for NER in Spark NLP</a></li>
200
+ <li><a class="link" href="https://www.johnsnowlabs.com/named-entity-recognition-ner-with-bert-in-spark-nlp/">Named Entity Recognition (NER) with BERT in Spark NLP</a></li>
201
+ </ul>
202
+ </div>
203
+ """, unsafe_allow_html=True)
204
+
205
+ # Community & Support
206
+ st.markdown('<div class="sub-title">Community & Support</div>', unsafe_allow_html=True)
207
+ st.markdown("""
208
+ <div class="section">
209
+ <ul>
210
+ <li><a class="link" href="https://sparknlp.org/" target="_blank">Official Website</a>: Documentation and examples</li>
211
+ <li><a class="link" href="https://github.com/JohnSnowLabs/spark-nlp" target="_blank">GitHub Repository</a>: Report issues or contribute</li>
212
+ <li><a class="link" href="https://forum.johnsnowlabs.com/" target="_blank">Community Forum</a>: Ask questions, share ideas, and get support</li>
213
+ </ul>
214
+ </div>
215
+ """, unsafe_allow_html=True)
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ streamlit
2
+ st-annotated-text
3
+ pandas
4
+ numpy
5
+ spark-nlp
6
+ pyspark