abdullahmubeen10 commited on
Commit
e0b1416
·
verified ·
1 Parent(s): 263259c

Update Demo.py

Browse files
Files changed (1) hide show
  1. Demo.py +161 -161
Demo.py CHANGED
@@ -1,161 +1,161 @@
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
- document_assembler = DocumentAssembler() \
46
- .setInputCol("text") \
47
- .setOutputCol("document")
48
-
49
- sentence_detector = SentenceDetector() \
50
- .setInputCols(["document"]) \
51
- .setOutputCol("sentence")
52
-
53
- word_segmenter = WordSegmenterModel.pretrained("wordseg_large", "zh") \
54
- .setInputCols(["sentence"]) \
55
- .setOutputCol("token")
56
-
57
- embeddings = BertEmbeddings.pretrained(name='bert_base_chinese', lang='zh') \
58
- .setInputCols(["document", "token"]) \
59
- .setOutputCol("embeddings")
60
-
61
- ner = NerDLModel.pretrained(model, "zh") \
62
- .setInputCols(["document", "token", "embeddings"]) \
63
- .setOutputCol("ner")
64
-
65
- ner_converter = NerConverter() \
66
- .setInputCols(["sentence", "token", "ner"]) \
67
- .setOutputCol("entities")
68
-
69
- pipeline = Pipeline(stages=[document_assembler, sentence_detector, word_segmenter, embeddings, ner, ner_converter])
70
- return pipeline
71
-
72
- def fit_data(pipeline, data):
73
- empty_df = spark.createDataFrame([['']]).toDF('text')
74
- pipeline_model = pipeline.fit(empty_df)
75
- model = LightPipeline(pipeline_model)
76
- result = model.fullAnnotate(data)
77
- return result
78
-
79
- def annotate(data):
80
- document, chunks, labels = data["Document"], data["NER Chunk"], data["NER Label"]
81
- annotated_words = []
82
- for chunk, label in zip(chunks, labels):
83
- parts = document.split(chunk, 1)
84
- if parts[0]:
85
- annotated_words.append(parts[0])
86
- annotated_words.append((chunk, label))
87
- document = parts[1]
88
- if document:
89
- annotated_words.append(document)
90
- annotated_text(*annotated_words)
91
-
92
- # Set up the page layout
93
- st.markdown('<div class="main-title">Recognize entities in Urdu text</div>', unsafe_allow_html=True)
94
- st.markdown("""
95
- <div class="section">
96
- <p>This demo utilizes embeddings-based NER model for Urdu texts, using the urduvec_140M_300d word embeddings</p>
97
- </div>
98
- """, unsafe_allow_html=True)
99
-
100
- # Sidebar content
101
- model = st.sidebar.selectbox(
102
- "Choose the pretrained model",
103
- ["ner_msra_bert_768d", "ner_weibo_bert_768d"],
104
- help="For more info about the models visit: https://sparknlp.org/models"
105
- )
106
-
107
- # Reference notebook link in sidebar
108
- link = """
109
- <a href="https://colab.research.google.com/github/JohnSnowLabs/spark-nlp-workshop/blob/master/tutorials/streamlit_notebooks/NER.ipynb">
110
- <img src="https://colab.research.google.com/assets/colab-badge.svg" style="zoom: 1.3" alt="Open In Colab"/>
111
- </a>
112
- """
113
- st.sidebar.markdown('Reference notebook:')
114
- st.sidebar.markdown(link, unsafe_allow_html=True)
115
-
116
- # Load examples
117
- examples = [
118
- "当 前 , 在 中共十五大 精 神 的 指 引 下 , 在 以 江泽民 同 志 为 核 心 的 中共中央 领 导 下 , 全 党 和 全 国 各 族 人 民 正 高 举 邓小平 理 论 伟 大 旗 帜 , 同 心 同 德 , 团 结 奋 斗 , 沿 着 建 设 有 中国 特 色 的 社 会 主 义 道 路 阔 步 前 进 。",
119
- "中共中央 致 中国致公党十一大 的 贺 词 各 位 代 表 、 各 位 同 志 : 在 中国致公党第十一次全国代表大会 隆 重 召 开 之 际 , 中国共产党中央委员会 谨 向 大 会 表 示 热 烈 的 祝 贺 , 向 致公党 的 同 志 们 致 以 亲 切 的 问 候 !",
120
- "数 百 名 华 人 、 华 侨 、 留 学 人 员 、 我 国 驻 纽约 总 领 事 馆 代 表 在 机 场 挥 舞 中 美 两 国 国 旗 , 热 烈 欢 迎 江 主 席 访 问 波士顿 。",
121
- "到 机 场 迎 接 江 主 席 的 美 方 人 员 有 马萨诸塞州 州 长 和 波士顿 市 长 等 。",
122
- "又 讯 中国 国 家 主 席 江泽民 1 日 上 午 应 邀 在 美国 著 名 学 府 哈佛大学 发 表 重 要 演 讲 。",
123
- "江 主 席 来 到 哈佛大学 时 , 受 到 哈佛大学 校 长 陆登庭 及 哈佛 各 学 院 院 长 的 热 烈 欢 迎 。",
124
- "本 报 纽约 1 0 月 3 1 日 电 记 者 陈特安 、 周德武 报 道 : 今 天 晚 上 , 美中贸易全国委员会 和 美国中国商会 在 纽约 举 行 盛 大 宴 会 欢 迎 江泽民 主 席 。",
125
- "哈佛大学 校 长 陆登庭 对 江 主 席 访 问 哈佛 并 发 表 演 讲 表 示 欢 迎 。",
126
- "美中贸易全国委员会 主 席 费希尔 和 美国中国商会 会 长 沈被章 先 后 致 词 。"
127
- ]
128
-
129
- selected_text = st.selectbox("Select an example", examples)
130
- custom_input = st.text_input("Try it with your own Sentence!")
131
-
132
- text_to_analyze = custom_input if custom_input else selected_text
133
-
134
- st.subheader('Full example text')
135
- 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>"""
136
- st.markdown(HTML_WRAPPER.format(text_to_analyze), unsafe_allow_html=True)
137
-
138
- # Initialize Spark and create pipeline
139
- spark = init_spark()
140
- pipeline = create_pipeline(model)
141
- output = fit_data(pipeline, text_to_analyze)
142
-
143
- # Display matched sentence
144
- st.subheader("Processed output:")
145
-
146
- results = {
147
- 'Document': output[0]['document'][0].result,
148
- 'NER Chunk': [n.result for n in output[0]['ner_chunk']],
149
- "NER Label": [n.metadata['entity'] for n in output[0]['ner_chunk']]
150
- }
151
-
152
- annotate(results)
153
-
154
- with st.expander("View DataFrame"):
155
- df = pd.DataFrame({'NER Chunk': results['NER Chunk'], 'NER Label': results['NER Label']})
156
- df.index += 1
157
- st.dataframe(df)
158
-
159
-
160
-
161
-
 
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
+ document_assembler = DocumentAssembler() \
46
+ .setInputCol("text") \
47
+ .setOutputCol("document")
48
+
49
+ sentence_detector = SentenceDetector() \
50
+ .setInputCols(["document"]) \
51
+ .setOutputCol("sentence")
52
+
53
+ word_segmenter = WordSegmenterModel.pretrained("wordseg_large", "zh") \
54
+ .setInputCols(["sentence"]) \
55
+ .setOutputCol("token")
56
+
57
+ embeddings = BertEmbeddings.pretrained(name='bert_base_chinese', lang='zh') \
58
+ .setInputCols(["document", "token"]) \
59
+ .setOutputCol("embeddings")
60
+
61
+ ner = NerDLModel.pretrained(model, "zh") \
62
+ .setInputCols(["document", "token", "embeddings"]) \
63
+ .setOutputCol("ner")
64
+
65
+ ner_converter = NerConverter() \
66
+ .setInputCols(["sentence", "token", "ner"]) \
67
+ .setOutputCol("entities")
68
+
69
+ pipeline = Pipeline(stages=[document_assembler, sentence_detector, word_segmenter, embeddings, ner, ner_converter])
70
+ return pipeline
71
+
72
+ def fit_data(pipeline, data):
73
+ empty_df = spark.createDataFrame([['']]).toDF('text')
74
+ pipeline_model = pipeline.fit(empty_df)
75
+ model = LightPipeline(pipeline_model)
76
+ result = model.fullAnnotate(data)
77
+ return result
78
+
79
+ def annotate(data):
80
+ document, chunks, labels = data["Document"], data["NER Chunk"], data["NER Label"]
81
+ annotated_words = []
82
+ for chunk, label in zip(chunks, labels):
83
+ parts = document.split(chunk, 1)
84
+ if parts[0]:
85
+ annotated_words.append(parts[0])
86
+ annotated_words.append((chunk, label))
87
+ document = parts[1]
88
+ if document:
89
+ annotated_words.append(document)
90
+ annotated_text(*annotated_words)
91
+
92
+ # Set up the page layout
93
+ st.markdown('<div class="main-title">Recognize entities in Chinese text</div>', unsafe_allow_html=True)
94
+ st.markdown("""
95
+ <div class="section">
96
+ <p>This demo utilizes embeddings-based NER model for Urdu texts, using the urduvec_140M_300d word embeddings</p>
97
+ </div>
98
+ """, unsafe_allow_html=True)
99
+
100
+ # Sidebar content
101
+ model = st.sidebar.selectbox(
102
+ "Choose the pretrained model",
103
+ ["ner_msra_bert_768d", "ner_weibo_bert_768d"],
104
+ help="For more info about the models visit: https://sparknlp.org/models"
105
+ )
106
+
107
+ # Reference notebook link in sidebar
108
+ link = """
109
+ <a href="https://colab.research.google.com/github/JohnSnowLabs/spark-nlp-workshop/blob/master/tutorials/streamlit_notebooks/NER.ipynb">
110
+ <img src="https://colab.research.google.com/assets/colab-badge.svg" style="zoom: 1.3" alt="Open In Colab"/>
111
+ </a>
112
+ """
113
+ st.sidebar.markdown('Reference notebook:')
114
+ st.sidebar.markdown(link, unsafe_allow_html=True)
115
+
116
+ # Load examples
117
+ examples = [
118
+ "当 前 , 在 中共十五大 精 神 的 指 引 下 , 在 以 江泽民 同 志 为 核 心 的 中共中央 领 导 下 , 全 党 和 全 国 各 族 人 民 正 高 举 邓小平 理 论 伟 大 旗 帜 , 同 心 同 德 , 团 结 奋 斗 , 沿 着 建 设 有 中国 特 色 的 社 会 主 义 道 路 阔 步 前 进 。",
119
+ "中共中央 致 中国致公党十一大 的 贺 词 各 位 代 表 、 各 位 同 志 : 在 中国致公党第十一次全国代表大会 隆 重 召 开 之 际 , 中国共产党中央委员会 谨 向 大 会 表 示 热 烈 的 祝 贺 , 向 致公党 的 同 志 们 致 以 亲 切 的 问 候 !",
120
+ "数 百 名 华 人 、 华 侨 、 留 学 人 员 、 我 国 驻 纽约 总 领 事 馆 代 表 在 机 场 挥 舞 中 美 两 国 国 旗 , 热 烈 欢 迎 江 主 席 访 问 波士顿 。",
121
+ "到 机 场 迎 接 江 主 席 的 美 方 人 员 有 马萨诸塞州 州 长 和 波士顿 市 长 等 。",
122
+ "又 讯 中国 国 家 主 席 江泽民 1 日 上 午 应 邀 在 美国 著 名 学 府 哈佛大学 发 表 重 要 演 讲 。",
123
+ "江 主 席 来 到 哈佛大学 时 , 受 到 哈佛大学 校 长 陆登庭 及 哈佛 各 学 院 院 长 的 热 烈 欢 迎 。",
124
+ "本 报 纽约 1 0 月 3 1 日 电 记 者 陈特安 、 周德武 报 道 : 今 天 晚 上 , 美中贸易全国委员会 和 美国中国商会 在 纽约 举 行 盛 大 宴 会 欢 迎 江泽民 主 席 。",
125
+ "哈佛大学 校 长 陆登庭 对 江 主 席 访 问 哈佛 并 发 表 演 讲 表 示 欢 迎 。",
126
+ "美中贸易全国委员会 主 席 费希尔 和 美国中国商会 会 长 沈被章 先 后 致 词 。"
127
+ ]
128
+
129
+ selected_text = st.selectbox("Select an example", examples)
130
+ custom_input = st.text_input("Try it with your own Sentence!")
131
+
132
+ text_to_analyze = custom_input if custom_input else selected_text
133
+
134
+ st.subheader('Full example text')
135
+ 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>"""
136
+ st.markdown(HTML_WRAPPER.format(text_to_analyze), unsafe_allow_html=True)
137
+
138
+ # Initialize Spark and create pipeline
139
+ spark = init_spark()
140
+ pipeline = create_pipeline(model)
141
+ output = fit_data(pipeline, text_to_analyze)
142
+
143
+ # Display matched sentence
144
+ st.subheader("Processed output:")
145
+
146
+ results = {
147
+ 'Document': output[0]['document'][0].result,
148
+ 'NER Chunk': [n.result for n in output[0]['ner_chunk']],
149
+ "NER Label": [n.metadata['entity'] for n in output[0]['ner_chunk']]
150
+ }
151
+
152
+ annotate(results)
153
+
154
+ with st.expander("View DataFrame"):
155
+ df = pd.DataFrame({'NER Chunk': results['NER Chunk'], 'NER Label': results['NER Label']})
156
+ df.index += 1
157
+ st.dataframe(df)
158
+
159
+
160
+
161
+