Spaces:
Running
Running
First commit
Browse files- .gitignore +160 -0
- app.py +96 -0
- bottom.html +11 -0
- style.css +69 -0
- top.html +19 -0
.gitignore
ADDED
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Byte-compiled / optimized / DLL files
|
2 |
+
__pycache__/
|
3 |
+
*.py[cod]
|
4 |
+
*$py.class
|
5 |
+
|
6 |
+
# C extensions
|
7 |
+
*.so
|
8 |
+
|
9 |
+
# Distribution / packaging
|
10 |
+
.Python
|
11 |
+
build/
|
12 |
+
develop-eggs/
|
13 |
+
dist/
|
14 |
+
downloads/
|
15 |
+
eggs/
|
16 |
+
.eggs/
|
17 |
+
lib/
|
18 |
+
lib64/
|
19 |
+
parts/
|
20 |
+
sdist/
|
21 |
+
var/
|
22 |
+
wheels/
|
23 |
+
share/python-wheels/
|
24 |
+
*.egg-info/
|
25 |
+
.installed.cfg
|
26 |
+
*.egg
|
27 |
+
MANIFEST
|
28 |
+
|
29 |
+
# PyInstaller
|
30 |
+
# Usually these files are written by a python script from a template
|
31 |
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
32 |
+
*.manifest
|
33 |
+
*.spec
|
34 |
+
|
35 |
+
# Installer logs
|
36 |
+
pip-log.txt
|
37 |
+
pip-delete-this-directory.txt
|
38 |
+
|
39 |
+
# Unit test / coverage reports
|
40 |
+
htmlcov/
|
41 |
+
.tox/
|
42 |
+
.nox/
|
43 |
+
.coverage
|
44 |
+
.coverage.*
|
45 |
+
.cache
|
46 |
+
nosetests.xml
|
47 |
+
coverage.xml
|
48 |
+
*.cover
|
49 |
+
*.py,cover
|
50 |
+
.hypothesis/
|
51 |
+
.pytest_cache/
|
52 |
+
cover/
|
53 |
+
|
54 |
+
# Translations
|
55 |
+
*.mo
|
56 |
+
*.pot
|
57 |
+
|
58 |
+
# Django stuff:
|
59 |
+
*.log
|
60 |
+
local_settings.py
|
61 |
+
db.sqlite3
|
62 |
+
db.sqlite3-journal
|
63 |
+
|
64 |
+
# Flask stuff:
|
65 |
+
instance/
|
66 |
+
.webassets-cache
|
67 |
+
|
68 |
+
# Scrapy stuff:
|
69 |
+
.scrapy
|
70 |
+
|
71 |
+
# Sphinx documentation
|
72 |
+
docs/_build/
|
73 |
+
|
74 |
+
# PyBuilder
|
75 |
+
.pybuilder/
|
76 |
+
target/
|
77 |
+
|
78 |
+
# Jupyter Notebook
|
79 |
+
.ipynb_checkpoints
|
80 |
+
|
81 |
+
# IPython
|
82 |
+
profile_default/
|
83 |
+
ipython_config.py
|
84 |
+
|
85 |
+
# pyenv
|
86 |
+
# For a library or package, you might want to ignore these files since the code is
|
87 |
+
# intended to run in multiple environments; otherwise, check them in:
|
88 |
+
# .python-version
|
89 |
+
|
90 |
+
# pipenv
|
91 |
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
92 |
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
93 |
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
94 |
+
# install all needed dependencies.
|
95 |
+
#Pipfile.lock
|
96 |
+
|
97 |
+
# poetry
|
98 |
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
99 |
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
100 |
+
# commonly ignored for libraries.
|
101 |
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
102 |
+
#poetry.lock
|
103 |
+
|
104 |
+
# pdm
|
105 |
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
106 |
+
#pdm.lock
|
107 |
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
108 |
+
# in version control.
|
109 |
+
# https://pdm.fming.dev/#use-with-ide
|
110 |
+
.pdm.toml
|
111 |
+
|
112 |
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
113 |
+
__pypackages__/
|
114 |
+
|
115 |
+
# Celery stuff
|
116 |
+
celerybeat-schedule
|
117 |
+
celerybeat.pid
|
118 |
+
|
119 |
+
# SageMath parsed files
|
120 |
+
*.sage.py
|
121 |
+
|
122 |
+
# Environments
|
123 |
+
.env
|
124 |
+
.venv
|
125 |
+
env/
|
126 |
+
venv/
|
127 |
+
ENV/
|
128 |
+
env.bak/
|
129 |
+
venv.bak/
|
130 |
+
|
131 |
+
# Spyder project settings
|
132 |
+
.spyderproject
|
133 |
+
.spyproject
|
134 |
+
|
135 |
+
# Rope project settings
|
136 |
+
.ropeproject
|
137 |
+
|
138 |
+
# mkdocs documentation
|
139 |
+
/site
|
140 |
+
|
141 |
+
# mypy
|
142 |
+
.mypy_cache/
|
143 |
+
.dmypy.json
|
144 |
+
dmypy.json
|
145 |
+
|
146 |
+
# Pyre type checker
|
147 |
+
.pyre/
|
148 |
+
|
149 |
+
# pytype static type analyzer
|
150 |
+
.pytype/
|
151 |
+
|
152 |
+
# Cython debug symbols
|
153 |
+
cython_debug/
|
154 |
+
|
155 |
+
# PyCharm
|
156 |
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
157 |
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
158 |
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
159 |
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
160 |
+
#.idea/
|
app.py
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import logging
|
2 |
+
import os
|
3 |
+
from typing import List, Tuple
|
4 |
+
|
5 |
+
import gradio as gr
|
6 |
+
import pandas as pd
|
7 |
+
import spacy
|
8 |
+
from transformers import AutoModelForTokenClassification, AutoTokenizer
|
9 |
+
|
10 |
+
try:
|
11 |
+
nlp = spacy.load("pt_core_news_sm")
|
12 |
+
except Exception:
|
13 |
+
os.system("python -m spacy download pt_core_news_sm")
|
14 |
+
nlp = spacy.load("pt_core_news_sm")
|
15 |
+
|
16 |
+
model = AutoModelForTokenClassification.from_pretrained("Emanuel/bertimbau-base-pos")
|
17 |
+
tokenizer = AutoTokenizer.from_pretrained("Emanuel/bertimbau-base-pos")
|
18 |
+
logger = logging.getLogger()
|
19 |
+
logger.setLevel(logging.DEBUG)
|
20 |
+
|
21 |
+
|
22 |
+
def predict(text, nlp, logger=None) -> Tuple[List[str], List[str]]:
|
23 |
+
doc = nlp(text)
|
24 |
+
tokens = [token.text for token in doc]
|
25 |
+
|
26 |
+
logger.info("Starting predictions for sentence: {}".format(text))
|
27 |
+
|
28 |
+
input_tokens = tokenizer(
|
29 |
+
tokens,
|
30 |
+
return_tensors="pt",
|
31 |
+
is_split_into_words=True,
|
32 |
+
return_offsets_mapping=True,
|
33 |
+
return_special_tokens_mask=True,
|
34 |
+
)
|
35 |
+
output = model(input_tokens["input_ids"])
|
36 |
+
|
37 |
+
i_token = 0
|
38 |
+
labels = []
|
39 |
+
for off, is_special_token, pred in zip(
|
40 |
+
input_tokens["offset_mapping"][0],
|
41 |
+
input_tokens["special_tokens_mask"][0],
|
42 |
+
output.logits[0],
|
43 |
+
):
|
44 |
+
if is_special_token or off[0] > 0:
|
45 |
+
continue
|
46 |
+
label = model.config.__dict__["id2label"][int(pred.argmax(axis=-1))]
|
47 |
+
if logger is not None:
|
48 |
+
logger.info("{}, {}, {}".format(off, tokens[i_token], label))
|
49 |
+
labels.append(label)
|
50 |
+
i_token += 1
|
51 |
+
|
52 |
+
return tokens, labels
|
53 |
+
|
54 |
+
|
55 |
+
def text_analysis(text):
|
56 |
+
tokens, labels = predict(text, nlp, logger)
|
57 |
+
pos_count = pd.DataFrame(
|
58 |
+
{
|
59 |
+
"token": tokens,
|
60 |
+
"etiqueta": labels,
|
61 |
+
}
|
62 |
+
)
|
63 |
+
pos_tokens = []
|
64 |
+
for token, label in zip(tokens, labels):
|
65 |
+
pos_tokens.extend([(token, label), (" ", None)])
|
66 |
+
|
67 |
+
return pos_tokens, pos_count
|
68 |
+
|
69 |
+
|
70 |
+
css = open("style.css").read()
|
71 |
+
top_html = open("top.html").read()
|
72 |
+
bottom_html = open("bottom.html").read()
|
73 |
+
|
74 |
+
with gr.Blocks(css=css) as demo:
|
75 |
+
gr.HTML(top_html)
|
76 |
+
text = gr.Textbox(placeholder="Insira um texto...", label="Texto de entrada")
|
77 |
+
output_highlighted = gr.HighlightedText()
|
78 |
+
output_df = gr.Dataframe()
|
79 |
+
submit_btn = gr.Button("Enviar")
|
80 |
+
submit_btn.click(
|
81 |
+
fn=text_analysis, inputs=text, outputs=[output_highlighted, output_df]
|
82 |
+
)
|
83 |
+
examples = gr.Examples(
|
84 |
+
examples=[
|
85 |
+
[
|
86 |
+
"A população não poderia ter acesso a relatórios que explicassem, por exemplo, os motivos exatos de atrasos em obras de linhas e estações."
|
87 |
+
],
|
88 |
+
["Filme 'Star Wars : Os Últimos Jedi' ganha trailer definitivo; assista."],
|
89 |
+
],
|
90 |
+
inputs=[text],
|
91 |
+
label="Exemplos",
|
92 |
+
)
|
93 |
+
gr.HTML(bottom_html)
|
94 |
+
|
95 |
+
|
96 |
+
demo.launch()
|
bottom.html
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div>
|
2 |
+
<hr style="border-top: 1px solid gray">
|
3 |
+
<div class="row">
|
4 |
+
<img class="column" alt="C4AI USP logo"
|
5 |
+
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALUAAABICAYAAACwX7RuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMC1jMDAwIDc5LmRhYmFjYmIsIDIwMjEvMDQvMTQtMDA6Mzk6NDQgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMi41IChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3NzQ2MUEzQzBDQjYxMUVDOUE0RTk3QTYwODQ3N0MxOCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo3NzQ2MUEzRDBDQjYxMUVDOUE0RTk3QTYwODQ3N0MxOCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc3NDYxQTNBMENCNjExRUM5QTRFOTdBNjA4NDc3QzE4IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjc3NDYxQTNCMENCNjExRUM5QTRFOTdBNjA4NDc3QzE4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+bXvwqwAAFhBJREFUeNrsXQmU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" />
|
6 |
+
<img class="column" alt="NILC (Núcleo Interinstitucional de Linguística Computacional) logo"
|
7 |
+
src="data:image/png;base64,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" />
|
8 |
+
<img class="column" alt="ICMC-USP logo"
|
9 |
+
src="https://upload.wikimedia.org/wikipedia/commons/thumb/c/c9/Webysther_20170627_-_Logo_ICMC-USP.svg/2560px-Webysther_20170627_-_Logo_ICMC-USP.svg.png" />
|
10 |
+
</div>
|
11 |
+
</div>
|
style.css
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
a {
|
2 |
+
color: inherit;
|
3 |
+
text-decoration: underline;
|
4 |
+
}
|
5 |
+
|
6 |
+
.gradio-container {
|
7 |
+
font-family: 'IBM Plex Sans', sans-serif;
|
8 |
+
}
|
9 |
+
|
10 |
+
.gr-button {
|
11 |
+
color: white;
|
12 |
+
border-color: #9d66e5;
|
13 |
+
background: #9d66e5;
|
14 |
+
}
|
15 |
+
|
16 |
+
.container {
|
17 |
+
max-width: 730px;
|
18 |
+
margin: auto;
|
19 |
+
padding-top: 1.5rem;
|
20 |
+
}
|
21 |
+
|
22 |
+
.gr-button {
|
23 |
+
white-space: nowrap;
|
24 |
+
}
|
25 |
+
|
26 |
+
.gr-button:focus {
|
27 |
+
border-color: rgb(147 197 253 / var(--tw-border-opacity));
|
28 |
+
outline: none;
|
29 |
+
box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
|
30 |
+
--tw-border-opacity: 1;
|
31 |
+
--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
|
32 |
+
--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px var(--tw-ring-offset-width)) var(--tw-ring-color);
|
33 |
+
--tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity));
|
34 |
+
--tw-ring-opacity: .5;
|
35 |
+
}
|
36 |
+
|
37 |
+
#advanced-options {
|
38 |
+
margin-bottom: 20px;
|
39 |
+
}
|
40 |
+
|
41 |
+
.footer {
|
42 |
+
margin-bottom: 45px;
|
43 |
+
margin-top: 35px;
|
44 |
+
text-align: center;
|
45 |
+
border-bottom: 1px solid #e5e5e5;
|
46 |
+
}
|
47 |
+
|
48 |
+
.footer>p {
|
49 |
+
font-size: .8rem;
|
50 |
+
display: inline-block;
|
51 |
+
padding: 0 10px;
|
52 |
+
transform: translateY(10px);
|
53 |
+
background: white;
|
54 |
+
}
|
55 |
+
|
56 |
+
.slogan {
|
57 |
+
font-size: 15px;
|
58 |
+
color: #495057;
|
59 |
+
}
|
60 |
+
|
61 |
+
.row {
|
62 |
+
display: flex;
|
63 |
+
margin-top: 20px;
|
64 |
+
}
|
65 |
+
|
66 |
+
.column {
|
67 |
+
flex: 33.33%;
|
68 |
+
padding: 5px;
|
69 |
+
}
|
top.html
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div style="text-align: center; max-width: 650px; margin: 0 auto;">
|
2 |
+
<div>
|
3 |
+
<h1 style="font-weight: 900; font-size: 3rem; margin: 20px;">
|
4 |
+
PorPos tagger
|
5 |
+
</h1>
|
6 |
+
<p class="slogan">A Brazilian Portuguese part-of-speech tagger according to Universal
|
7 |
+
Dependencies</p>
|
8 |
+
</div>
|
9 |
+
<p style="margin-top: 30px; margin-bottom: 10px; font-size: 94%; text-align: left;">
|
10 |
+
PorPos (Porttinari Part-Of-Speech) tagger was trained on the <a
|
11 |
+
href="https://sites.google.com/icmc.usp.br/poetisa/resources-and-tools">Porttinari-base</a> corpus which is
|
12 |
+
a collection of news extracted from the Folha de São Paulo newspaper site. The trained model is a fine-tuned
|
13 |
+
version
|
14 |
+
of <a src="https://huggingface.co/neuralmind/bert-base-portuguese-cased">Bertimbau</a> that receives tokens and
|
15 |
+
outputs part-of-speech tags. Since the model expects a sequence of
|
16 |
+
tokens
|
17 |
+
for its inputs, <a src="https://spacy.io/models/pt">Spacy's</a> tokenization is used to tokenize the input text.
|
18 |
+
</p>
|
19 |
+
</div>
|