Spaces:
Running
Running
Commit
·
615deca
1
Parent(s):
fbe3d2c
Update dashboard
Browse files- app.py +13 -77
- pages/1_parsing_demo.py +91 -0
- pages/2_custom_label_demo.py +62 -0
- requirements.txt +2 -1
app.py
CHANGED
@@ -1,90 +1,26 @@
|
|
1 |
import streamlit as st
|
2 |
-
import spacy
|
3 |
-
import pandas as pd
|
4 |
-
import datetime
|
5 |
-
|
6 |
-
st.set_page_config(layout="wide")
|
7 |
-
|
8 |
-
default_text = """Ita fac, mi Lucili; vindica te tibi, et tempus, quod adhuc aut auferebatur aut subripiebatur aut excidebat, collige et serva."""
|
9 |
-
|
10 |
-
|
11 |
-
def format_morph(morph):
|
12 |
-
morph = morph.to_dict()
|
13 |
-
if morph:
|
14 |
-
return ", ".join([f"{k}={v}" for k, v in morph.items()])
|
15 |
-
else:
|
16 |
-
return ""
|
17 |
|
|
|
|
|
|
|
|
|
18 |
|
19 |
-
|
20 |
-
doc = nlp(text)
|
21 |
-
rows = []
|
22 |
-
for token in doc[:100]:
|
23 |
-
rows.append(
|
24 |
-
(
|
25 |
-
token.text,
|
26 |
-
token.norm_,
|
27 |
-
token.lower_,
|
28 |
-
token.lemma_,
|
29 |
-
token.pos_,
|
30 |
-
token.tag_,
|
31 |
-
token.dep_,
|
32 |
-
format_morph(token.morph),
|
33 |
-
token.ent_type_,
|
34 |
-
)
|
35 |
-
)
|
36 |
-
df = pd.DataFrame(
|
37 |
-
rows,
|
38 |
-
columns=[
|
39 |
-
"text",
|
40 |
-
"norm",
|
41 |
-
"lower",
|
42 |
-
"lemma",
|
43 |
-
"pos",
|
44 |
-
"tag",
|
45 |
-
"dep",
|
46 |
-
"morph",
|
47 |
-
"ent_type",
|
48 |
-
],
|
49 |
-
)
|
50 |
-
return df
|
51 |
|
|
|
52 |
|
53 |
-
st.
|
|
|
|
|
54 |
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
)
|
60 |
|
61 |
-
nlp = spacy.load(model_selectbox)
|
62 |
-
|
63 |
-
df = None
|
64 |
|
65 |
-
text = st.text_area(
|
66 |
-
"Enter some text to analyze (max 100 tokens)", value=default_text, height=200
|
67 |
-
)
|
68 |
-
if st.button("Analyze"):
|
69 |
-
df = analyze_text(text)
|
70 |
-
st.text(f"Analyzed {len(df)} tokens with {model_selectbox} model.")
|
71 |
-
st.dataframe(df, width=1000)
|
72 |
|
73 |
-
@st.cache_data
|
74 |
-
def convert_df(df):
|
75 |
-
return df.to_csv(index=False, sep="\t").encode("utf-8")
|
76 |
|
77 |
-
csv = convert_df(df)
|
78 |
|
79 |
-
def create_timestamp():
|
80 |
-
return datetime.datetime.now().strftime("%Y%m%d%H%M%S")
|
81 |
|
82 |
-
# nb: clicking this button resets app! Open streamlit issue, as of 4.15.2023; cf. https://github.com/streamlit/streamlit/issues/4382
|
83 |
-
st.markdown("*NB: Clicking the download button will reset the app after download!*")
|
84 |
-
st.download_button(
|
85 |
-
"Press to Download",
|
86 |
-
csv,
|
87 |
-
f"latincy-analysis-{create_timestamp()}.tsv",
|
88 |
-
"text/csv",
|
89 |
-
key="download-csv",
|
90 |
-
)
|
|
|
1 |
import streamlit as st
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
+
st.set_page_config(
|
4 |
+
page_title="Hello",
|
5 |
+
page_icon="👋",
|
6 |
+
)
|
7 |
|
8 |
+
st.write("# LatinCy Dashboard")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
|
10 |
+
st.sidebar.success("Select a demo above.")
|
11 |
|
12 |
+
st.markdown(
|
13 |
+
"""
|
14 |
+
LatinCy is a collection of Latin language models for spaCy.
|
15 |
|
16 |
+
### See the demos
|
17 |
+
- [Get basic spaCy data from a short text](parsing_demo)
|
18 |
+
- [Visualize a custom span label](custom_label_demo), here tokens covered by the [DCC Core Latin Vocabulary](https://dcc.dickinson.edu/latin-core-list1
|
19 |
+
"""
|
20 |
)
|
21 |
|
|
|
|
|
|
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
|
|
|
|
|
|
|
24 |
|
|
|
25 |
|
|
|
|
|
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pages/1_parsing_demo.py
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import spacy
|
3 |
+
import pandas as pd
|
4 |
+
import datetime
|
5 |
+
|
6 |
+
st.set_page_config(page_title="Parsing Demo", layout="wide")
|
7 |
+
st.sidebar.header("Parsing Demo")
|
8 |
+
|
9 |
+
default_text = """Ita fac, mi Lucili; vindica te tibi, et tempus, quod adhuc aut auferebatur aut subripiebatur aut excidebat, collige et serva."""
|
10 |
+
|
11 |
+
|
12 |
+
def format_morph(morph):
|
13 |
+
morph = morph.to_dict()
|
14 |
+
if morph:
|
15 |
+
return ", ".join([f"{k}={v}" for k, v in morph.items()])
|
16 |
+
else:
|
17 |
+
return ""
|
18 |
+
|
19 |
+
|
20 |
+
def analyze_text(text):
|
21 |
+
doc = nlp(text)
|
22 |
+
rows = []
|
23 |
+
for token in doc[:100]:
|
24 |
+
rows.append(
|
25 |
+
(
|
26 |
+
token.text,
|
27 |
+
token.norm_,
|
28 |
+
token.lower_,
|
29 |
+
token.lemma_,
|
30 |
+
token.pos_,
|
31 |
+
token.tag_,
|
32 |
+
token.dep_,
|
33 |
+
format_morph(token.morph),
|
34 |
+
token.ent_type_,
|
35 |
+
)
|
36 |
+
)
|
37 |
+
df = pd.DataFrame(
|
38 |
+
rows,
|
39 |
+
columns=[
|
40 |
+
"text",
|
41 |
+
"norm",
|
42 |
+
"lower",
|
43 |
+
"lemma",
|
44 |
+
"pos",
|
45 |
+
"tag",
|
46 |
+
"dep",
|
47 |
+
"morph",
|
48 |
+
"ent_type",
|
49 |
+
],
|
50 |
+
)
|
51 |
+
return df
|
52 |
+
|
53 |
+
|
54 |
+
st.title("LatinCy Text Analyzer")
|
55 |
+
|
56 |
+
# Using object notation
|
57 |
+
model_selectbox = st.sidebar.selectbox(
|
58 |
+
"Choose model:",
|
59 |
+
("la_core_web_lg", "la_core_web_md", "la_core_web_sm")
|
60 |
+
)
|
61 |
+
|
62 |
+
nlp = spacy.load(model_selectbox)
|
63 |
+
|
64 |
+
df = None
|
65 |
+
|
66 |
+
text = st.text_area(
|
67 |
+
"Enter some text to analyze (max 100 tokens)", value=default_text, height=200
|
68 |
+
)
|
69 |
+
if st.button("Analyze"):
|
70 |
+
df = analyze_text(text)
|
71 |
+
st.text(f"Analyzed {len(df)} tokens with {model_selectbox} model.")
|
72 |
+
st.dataframe(df, width=1000)
|
73 |
+
|
74 |
+
@st.cache_data
|
75 |
+
def convert_df(df):
|
76 |
+
return df.to_csv(index=False, sep="\t").encode("utf-8")
|
77 |
+
|
78 |
+
csv = convert_df(df)
|
79 |
+
|
80 |
+
def create_timestamp():
|
81 |
+
return datetime.datetime.now().strftime("%Y%m%d%H%M%S")
|
82 |
+
|
83 |
+
# nb: clicking this button resets app! Open streamlit issue, as of 4.15.2023; cf. https://github.com/streamlit/streamlit/issues/4382
|
84 |
+
st.markdown("*NB: Clicking the download button will reset the app after download!*")
|
85 |
+
st.download_button(
|
86 |
+
"Press to Download",
|
87 |
+
csv,
|
88 |
+
f"latincy-analysis-{create_timestamp()}.tsv",
|
89 |
+
"text/csv",
|
90 |
+
key="download-csv",
|
91 |
+
)
|
pages/2_custom_label_demo.py
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import spacy
|
2 |
+
from spacy.language import Language
|
3 |
+
from spacy.matcher import Matcher
|
4 |
+
from spacy.tokens import Token, Span
|
5 |
+
import streamlit as st
|
6 |
+
from spacy_streamlit import visualize_spans
|
7 |
+
|
8 |
+
st.set_page_config(page_title='Custom Label Demo', layout="wide")
|
9 |
+
st.sidebar.header("Custom Label Demo")
|
10 |
+
|
11 |
+
default_text = """Ita fac, mi Lucili; vindica te tibi, et tempus, quod adhuc aut auferebatur aut subripiebatur aut excidebat, collige et serva."""
|
12 |
+
|
13 |
+
@Language.factory("dcc_core")
|
14 |
+
def create_dcc_core_merger(nlp, name):
|
15 |
+
return DCCCoreMerger(nlp.vocab)
|
16 |
+
|
17 |
+
class DCCCoreMerger:
|
18 |
+
def __init__(self, vocab):
|
19 |
+
patterns = [
|
20 |
+
[
|
21 |
+
{"LEMMA": {"IN": ["ab", "abeo", "absum", "ac", "accedo", "accido", "accipio", "acer", "acies", "ad", "addo", "adduco", "adeo", "adeo", "adhibeo", "adhuc", "adsum", "aduenio", "aduersus", "aduerto", "aedes", "aeger", "aequor", "aequus", "aer", "aes", "aetas", "aeternus", "aether", "aeuum", "affero", "afficio", "ager", "agito", "agmen", "ago", "aio", "albus", "alienus", "aliquando", "aliquis", "aliter", "alius", "alo", "alter", "altus", "amicitia", "amicus", "amitto", "amnis", "amo", "amor", "amplus", "an", "anima", "animal", "animus", "annus", "ante", "antequam", "antiquus", "aperio", "appareo", "appello", "aptus", "apud", "aqua", "ara", "arbitror", "arbor", "ardeo", "argentum", "arma", "ars", "aruum", "arx", "ascendo", "aspicio", "astrum", "at", "atque", "auctor", "auctoritas", "audax", "audeo", "audio", "aufero", "augeo", "aura", "aureus", "auris", "aurum", "aut", "autem", "auxilium", "auis", "barbarus", "beatus", "bellum", "bene", "beneficium", "bonus", "bos", "breuis", "cado", "caecus", "caedes", "caedo", "caelestis", "caelum", "campus", "candidus", "canis", "cano", "capio", "caput", "careo", "carmen", "carus", "castrum", "castus", "casus", "causa", "caueo", "cedo", "celebro", "celer", "censeo", "centum", "cerno", "certo", "certus", "ceterus", "cibus", "cingo", "cinis", "circa", "citus", "ciuis", "ciuitas", "clamor", "clarus", "classis", "claudo", "coepi", "cogito", "cognosco", "cogo", "cohors", "colligo", "colo", "color", "coma", "comes", "committo", "communis", "comparo", "compono", "concedo", "condicio", "condo", "confero", "conficio", "confiteor", "coniunx", "conor", "consequor", "consilium", "consisto", "constituo", "consto", "consuetudo", "consul", "consulo", "consumo", "contemno", "contineo", "contingo", "contra", "conuenio", "conuerto", "conuiuium", "copia", "cor", "cornu", "corpus", "corrumpo", "credo", "creo", "cresco", "crimen", "culpa", "cum", "cunctus", "cupido", "cupio", "cur", "cura", "curo", "curro", "currus", "cursus", "custos", "damno", "damnum", "de", "debeo", "decem", "decerno", "decet", "decus", "deduco", "defendo", "defero", "deficio", "deinde", "dein", "denique", "descendo", "desero", "desidero", "desino", "desum", "deus", "dexter", "dico", "dies", "differo", "difficilis", "dignitas", "dignus", "diligo", "dimitto", "discedo", "disciplina", "disco", "diu", "diuersus", "diues", "diuido", "diuitiae", "diuus", "do", "doceo", "doleo", "dolor", "dolus", "dominus", "domus", "donec", "dono", "donum", "dormio", "dubito", "dubius", "duco", "dulcis", "dum", "duo", "durus", "dux", "ecce", "edico", "edo", "educo", "efficio", "effundo", "ego", "egredior", "egregius", "eligo", "enim", "eo", "eo", "epistula", "eques", "equus", "ergo", "eripio", "erro", "error", "et", "etiam", "ex", "excipio", "exemplum", "exeo", "exerceo", "exercitus", "exigo", "existimo", "experior", "exsilium", "exspecto", "extremus", "fabula", "facies", "facilis", "facinus", "facio", "factum", "fallo", "falsus", "fama", "fames", "familia", "fateor", "fatum", "fax", "felix", "femina", "fere", "fero", "ferrum", "ferus", "fessus", "fidelis", "fides", "filia", "filius", "fingo", "finis", "fio", "flamma", "fleo", "flos", "fluctus", "flumen", "fluo", "foedus", "fons", "for", "fore", "forma", "fors", "forsitan", "fortis", "fortuna", "forum", "frango", "frater", "frequens", "frons", "fructus", "frumentum", "fruor", "frustra", "fuga", "fugio", "fugo", "fundo", "funus", "furor", "gaudeo", "gaudium", "gens", "genus", "gero", "gigno", "gladius", "gloria", "gradus", "gratia", "gratus", "grauis", "habeo", "haud", "hic", "hic", "hiems", "hodie", "homo", "honestus", "honor", "hora", "hortor", "hospes", "hostis", "huc", "humanus", "humus", "iaceo", "iacio", "iam", "ibi", "ictus", "idem", "ideo", "igitur", "ignis", "ille", "illic", "illuc", "imago", "imperator", "imperium", "impero", "impetus", "impleo", "impono", "in", "incido", "incipio", "inde", "indico", "infero", "inferus", "ingenium", "ingens", "ingratus", "ingredior", "inimicus", "initium", "iniuria", "inquam", "instituo", "insula", "integer", "intellego", "intendo", "inter", "interficio", "interim", "interrogo", "intersum", "intra", "intro", "inuenio", "inuidia", "ipse", "ira", "irascor", "is", "iste", "ita", "itaque", "item", "iter", "iterum", "iubeo", "iudex", "iudicium", "iudico", "iugum", "iungo", "iuro", "ius", "iustus", "iuuenis", "iuuo", "labor", "laboro", "lacrima", "laedo", "laetus", "lapis", "lateo", "latus", "latus", "laudo", "laus", "legatus", "legio", "lego", "leuis", "lex", "liber", "liber", "libertas", "libet", "libido", "licet", "limen", "lingua", "littera", "litus", "locus", "longus", "loquor", "lumen", "luna", "lux", "maestus", "magis", "magister", "magnitudo", "magnus", "maior", "malo", "malus", "maneo", "manus", "mare", "maritus", "mater", "materia", "maximus", "medius", "melior", "membrum", "memini", "memoria", "mens", "mensa", "mereo", "metuo", "metus", "meus", "miles", "mille", "minus", "miror", "misceo", "miser", "mitto", "modo", "modus", "moenia", "mollis", "moneo", "mons", "mora", "morbus", "morior", "moror", "mors", "mortalis", "mos", "moueo", "mox", "mulier", "multitudo", "multus", "mundus", "mundus", "munus", "murus", "muto", "nam", "narro", "nascor", "natura", "natus", "nauis", "ne", "ne", "nec", "necesse", "necessitas", "nefas", "nego", "negotium", "nemo", "nemus", "neque", "nescio", "niger", "nihil", "nimius", "nisi", "ni", "nobilis", "noceo", "nolo", "nomen", "non", "nondum", "nos", "nosco", "noster", "notus", "nouus", "nox", "nudus", "nullus", "num", "numen", "numerus", "numquam", "nunc", "nuntius", "ob", "occido", "occupo", "occurro", "oculus", "odi", "odium", "offero", "officium", "olim", "omnis", "onus", "opera", "oportet", "oppidum", "ops", "optimus", "opto", "opus", "oratio", "orbis", "ordo", "orior", "oro", "os", "os", "ostendo", "otium", "paene", "par", "parco", "parens", "pareo", "pario", "paro", "pars", "parum", "paruus", "pateo", "pater", "patior", "patria", "pauci", "paulo", "pauper", "pax", "pecco", "pectus", "pecunia", "pecus", "pello", "pendo", "per", "perdo", "pereo", "pergo", "periculum", "permitto", "perpetuus", "pertineo", "peruenio", "pes", "peto", "pietas", "pius", "placeo", "plebs", "plenus", "plerusque", "plurimus", "plus", "poena", "poeta", "pondus", "pono", "pontus", "populus", "porta", "porto", "posco", "possum", "post", "postea", "posterus", "postquam", "potens", "potestas", "potis", "praebeo", "praeceptum", "praecipio", "praeda", "praemium", "praesens", "praesidium", "praesto", "praeter", "praeterea", "praetor", "precor", "premo", "pretium", "prex", "primus", "princeps", "principium", "prior", "priuatus", "pro", "probo", "procedo", "procul", "prodo", "proelium", "proficiscor", "prohibeo", "promitto", "prope", "propior", "propero", "propono", "proprius", "propter", "prosum", "protinus", "prouincia", "publicus", "pudor", "puella", "puer", "pugna", "pugno", "pulcher", "puto", "qua", "quaero", "qualis", "quam", "quamquam", "quamuis", "quando", "quantum", "quantus", "quare", "quasi", "quattuor", "que", "quemadmodum", "queror", "qui", "quia", "quicumque", "quid", "quidam", "quidem", "quiesco", "quin", "quippe", "quis", "quisquam", "quisque", "quisquis", "quo", "quomodo", "quondam", "quoniam", "quoque", "quotiens", "rapio", "rarus", "ratio", "recedo", "recens", "recipio", "rectus", "reddo", "redeo", "refero", "regio", "regius", "regnum", "rego", "relinquo", "reliquus", "reor", "reperio", "repeto", "res", "respicio", "respondeo", "retineo", "reus", "reuerto", "reuoco", "rex", "rideo", "ripa", "rogo", "rumpo", "rursus", "rus", "sacer", "sacerdos", "saeculum", "saepe", "saeuus", "salus", "sanctus", "sanguis", "sanus", "sapiens", "sapientia", "satis", "sat", "saxum", "scelus", "scientia", "scilicet", "scio", "scribo", "secundus", "securus", "sed", "sedeo", "sedes", "semel", "semper", "senatus", "senex", "sensus", "sententia", "sentio", "sepulcrum", "sequor", "sermo", "seruio", "seruo", "seruus", "seu", "si", "sic", "sicut", "sidus", "signum", "silua", "similis", "simul", "sine", "singuli", "sino", "sinus", "siue", "socius", "sol", "soleo", "solus", "soluo", "somnus", "sono", "soror", "sors", "spargo", "spatium", "species", "specto", "spero", "spes", "spiritus", "statim", "statuo", "stella", "sto", "studeo", "studium", "sub", "subeo", "subito", "sui", "sum", "summus", "sumo", "super", "superbus", "supero", "supersum", "superus", "supplicium", "supra", "surgo", "suscipio", "sustineo", "suus", "taceo", "talis", "tam", "tamen", "tamquam", "tandem", "tango", "tantus", "tardus", "tectum", "tego", "tellus", "telum", "tempestas", "templum", "tempus", "tendo", "tenebrae", "teneo", "tener", "tento", "tergum", "terra", "terreo", "tertius", "testis", "timeo", "timor", "tollo", "tot", "totus", "trado", "traho", "transeo", "tres", "tribunus", "tristis", "tu", "tum", "turba", "turbo", "turpis", "tutus", "tuus", "ubi", "ullus", "ultimus", "ultra", "umbra", "umquam", "unda", "unde", "undique", "unus", "urbs", "usque", "usus", "ut", "uterque", "utilis", "utor", "utrum", "uxor", "uaco", "uacuus", "uagus", "ualeo", "ualidus", "uanus", "uarius", "uates", "ue", "ueho", "uel", "uelut", "uenio", "uentus", "uerbum", "uereor", "uero", "uerto", "uerus", "uester", "uestigium", "uestis", "ueto", "uetus", "uia", "uicinus", "uictor", "uictoria", "uideo", "uinco", "uinculum", "uinum", "uir", "uirgo", "uirtus", "uis", "uita", "uitium", "uito", "uiuo", "uix", "uoco", "uolo", "uolucer", "uoluntas", "uoluptas", "uos", "uotum", "uox", "uulgus", "uulnus", "uultus"]}}
|
22 |
+
]]
|
23 |
+
# Register a new token extension to flag core vocabulary
|
24 |
+
Token.set_extension("is_dcc_core", force=True, default=False)
|
25 |
+
self.matcher = Matcher(vocab)
|
26 |
+
self.matcher.add("DCC_CORE", patterns)
|
27 |
+
|
28 |
+
def __call__(self, doc):
|
29 |
+
# This method is invoked when the component is called on a Doc
|
30 |
+
doc.spans["dcc_core"] = []
|
31 |
+
matches = self.matcher(doc)
|
32 |
+
spans = [] # Collect the matched spans here
|
33 |
+
for match_id, start, end in matches:
|
34 |
+
spans.append(doc[start:end])
|
35 |
+
doc.spans["dcc_core"].append(Span(doc, start, end, "CORE"))
|
36 |
+
for span in spans:
|
37 |
+
for token in span:
|
38 |
+
token._.is_dcc_core = True # Mark token as bad HTML
|
39 |
+
return doc
|
40 |
+
|
41 |
+
st.title("LatinCy DCC Core Visualizer")
|
42 |
+
|
43 |
+
# Using object notation
|
44 |
+
model_selectbox = st.sidebar.selectbox(
|
45 |
+
"Choose model:",
|
46 |
+
("la_core_web_lg", "la_core_web_md", "la_core_web_sm")
|
47 |
+
)
|
48 |
+
|
49 |
+
nlp = spacy.load(model_selectbox)
|
50 |
+
|
51 |
+
# Add component to pipeline
|
52 |
+
nlp.add_pipe("dcc_core", last=True)
|
53 |
+
|
54 |
+
text = st.text_area(
|
55 |
+
"Enter some text to analyze (max 100 tokens)", value=default_text, height=200
|
56 |
+
)
|
57 |
+
if st.button("Analyze"):
|
58 |
+
doc = nlp(text.replace("v", "u").replace("V", "U"))
|
59 |
+
len_doc = len([token for token in doc if not token.is_punct])
|
60 |
+
len_dcc = len(doc.spans["dcc_core"])
|
61 |
+
st.text(f"Analyzed {len_doc} tokens with {len_dcc} core vocabulary items ({round((len_dcc/len_doc)*100, 2)}%) ")
|
62 |
+
visualize_spans(doc, spans_key="dcc_core", show_table=False, displacy_options={"colors": {"CORE": "#09a3d5"}})
|
requirements.txt
CHANGED
@@ -3,4 +3,5 @@ la-core-web-md @ https://huggingface.co/latincy/la_core_web_md/resolve/main/la_c
|
|
3 |
la-core-web-sm @ https://huggingface.co/latincy/la_core_web_sm/resolve/main/la_core_web_sm-any-py3-none-any.whl#sha256=0aecb1b9c9974b48b180092ab4e25b3bdba7c4b7b6cd47942e667cb054f07e04
|
4 |
pandas==1.5.3
|
5 |
spacy==3.5.2
|
6 |
-
streamlit==1.21.0
|
|
|
|
3 |
la-core-web-sm @ https://huggingface.co/latincy/la_core_web_sm/resolve/main/la_core_web_sm-any-py3-none-any.whl#sha256=0aecb1b9c9974b48b180092ab4e25b3bdba7c4b7b6cd47942e667cb054f07e04
|
4 |
pandas==1.5.3
|
5 |
spacy==3.5.2
|
6 |
+
streamlit==1.21.0
|
7 |
+
spacy-streamlit==1.0.5
|