anasampa2 commited on
Commit
5596d03
1 Parent(s): e81e0c8

Upload 21 files

Browse files

Added portTokenizer running in vm.

.gitattributes CHANGED
@@ -34,3 +34,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  udpipe2/Portparser_model/weights.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
 
 
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  udpipe2/Portparser_model/weights.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
37
+ portTokenizer/VERB.tsv filter=lfs diff=lfs merge=lfs -text
38
+ portTokenizer/WORDmaster.txt filter=lfs diff=lfs merge=lfs -text
portTokenizer/ADJ.tsv ADDED
The diff for this file is too large to render. See raw diff
 
portTokenizer/ADP.tsv ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ a a _
2
+ afora afora _
3
+ ante ante _
4
+ após após _
5
+ até até _
6
+ com com _
7
+ como como _
8
+ conforme conforme _
9
+ consoante consoante _
10
+ contra contra _
11
+ dado dado _
12
+ de de _
13
+ desde desde _
14
+ devido devido _
15
+ durante durante _
16
+ em em _
17
+ entre entre _
18
+ exceto exceto _
19
+ fora fora _
20
+ malgrado malgrado _
21
+ mediante mediante _
22
+ menos menos _
23
+ para para _
24
+ perante perante _
25
+ por por _
26
+ pra para Abbr=Yes
27
+ pró pró _
28
+ que que _
29
+ salvo salvo _
30
+ segundo segundo _
31
+ sem sem _
32
+ senão senão _
33
+ sob sob _
34
+ sobre sobre _
35
+ versus versus _
36
+ via via _
37
+ visto visto _
38
+ vs versus Abbr=Yes
portTokenizer/ADV.tsv ADDED
The diff for this file is too large to render. See raw diff
 
portTokenizer/AUXI.tsv ADDED
@@ -0,0 +1,435 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ era ser Mood=Ind|Number=Sing|Person=1|Tense=Imp|VerbForm=Fin
2
+ era ser Mood=Ind|Number=Sing|Person=3|Tense=Imp|VerbForm=Fin
3
+ eram ser Mood=Ind|Number=Plur|Person=3|Tense=Imp|VerbForm=Fin
4
+ eras ser Mood=Ind|Number=Sing|Person=2|Tense=Imp|VerbForm=Fin
5
+ estada estar Gender=Fem|Number=Sing|VerbForm=Part
6
+ estadas estar Gender=Fem|Number=Plur|VerbForm=Part
7
+ estado estar Gender=Masc|Number=Sing|VerbForm=Part
8
+ estados estar Gender=Masc|Number=Plur|VerbForm=Part
9
+ estai estar Mood=Imp|Number=Plur|Person=2|VerbForm=Fin
10
+ estais estar Mood=Ind|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
11
+ estamos estar Mood=Ind|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
12
+ estando estar VerbForm=Ger
13
+ estar estar Number=Sing|Person=1|VerbForm=Inf
14
+ estar estar Number=Sing|Person=3|VerbForm=Inf
15
+ estar estar VerbForm=Inf
16
+ estardes estar Number=Plur|Person=2|VerbForm=Inf
17
+ estarei estar Mood=Ind|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
18
+ estareis estar Mood=Ind|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
19
+ estarem estar Number=Plur|Person=3|VerbForm=Inf
20
+ estaremos estar Mood=Ind|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
21
+ estares estar Number=Sing|Person=2|VerbForm=Inf
22
+ estaria estar Mood=Cnd|Number=Sing|Person=1|VerbForm=Fin
23
+ estaria estar Mood=Cnd|Number=Sing|Person=3|VerbForm=Fin
24
+ estariam estar Mood=Cnd|Number=Plur|Person=3|VerbForm=Fin
25
+ estarias estar Mood=Cnd|Number=Sing|Person=2|VerbForm=Fin
26
+ estarmos estar Number=Plur|Person=1|VerbForm=Inf
27
+ estará estar Mood=Ind|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
28
+ estarás estar Mood=Ind|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
29
+ estarão estar Mood=Ind|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
30
+ estaríamos estar Mood=Cnd|Number=Plur|Person=1|VerbForm=Fin
31
+ estaríeis estar Mood=Cnd|Number=Plur|Person=2|VerbForm=Fin
32
+ estava estar Mood=Ind|Number=Sing|Person=1|Tense=Imp|VerbForm=Fin
33
+ estava estar Mood=Ind|Number=Sing|Person=3|Tense=Imp|VerbForm=Fin
34
+ estavam estar Mood=Ind|Number=Plur|Person=3|Tense=Imp|VerbForm=Fin
35
+ estavas estar Mood=Ind|Number=Sing|Person=2|Tense=Imp|VerbForm=Fin
36
+ esteja estar Mood=Imp|Number=Sing|Person=3|VerbForm=Fin
37
+ esteja estar Mood=Sub|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
38
+ esteja estar Mood=Sub|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
39
+ estejais estar Mood=Sub|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
40
+ estejam estar Mood=Imp|Number=Plur|Person=3|VerbForm=Fin
41
+ estejam estar Mood=Sub|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
42
+ estejamos estar Mood=Imp|Number=Plur|Person=1|VerbForm=Fin
43
+ estejamos estar Mood=Sub|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
44
+ estejas estar Mood=Sub|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
45
+ esteve estar Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
46
+ estive estar Mood=Ind|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
47
+ estivemos estar Mood=Ind|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
48
+ estiver estar Mood=Sub|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
49
+ estiver estar Mood=Sub|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
50
+ estivera estar Mood=Ind|Number=Sing|Person=1|Tense=Pqp|VerbForm=Fin
51
+ estivera estar Mood=Ind|Number=Sing|Person=3|Tense=Pqp|VerbForm=Fin
52
+ estiveram estar Mood=Ind|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
53
+ estiveram estar Mood=Ind|Number=Plur|Person=3|Tense=Pqp|VerbForm=Fin
54
+ estiveras estar Mood=Ind|Number=Sing|Person=2|Tense=Pqp|VerbForm=Fin
55
+ estiverdes estar Mood=Sub|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
56
+ estiverem estar Mood=Sub|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
57
+ estiveres estar Mood=Sub|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
58
+ estivermos estar Mood=Sub|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
59
+ estivesse estar Mood=Sub|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
60
+ estivesse estar Mood=Sub|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
61
+ estivessem estar Mood=Sub|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
62
+ estivesses estar Mood=Sub|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
63
+ estiveste estar Mood=Ind|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
64
+ estivestes estar Mood=Ind|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
65
+ estivéramos estar Mood=Ind|Number=Plur|Person=1|Tense=Pqp|VerbForm=Fin
66
+ estivéreis estar Mood=Ind|Number=Plur|Person=2|Tense=Pqp|VerbForm=Fin
67
+ estivésseis estar Mood=Sub|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
68
+ estivéssemos estar Mood=Sub|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
69
+ estou estar Mood=Ind|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
70
+ está estar Mood=Imp|Number=Sing|Person=2|VerbForm=Fin
71
+ está estar Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
72
+ estás estar Mood=Ind|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
73
+ estávamos estar Mood=Ind|Number=Plur|Person=1|Tense=Imp|VerbForm=Fin
74
+ estáveis estar Mood=Ind|Number=Plur|Person=2|Tense=Imp|VerbForm=Fin
75
+ estão estar Mood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
76
+ foi ir Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
77
+ foi ser Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
78
+ fomos ir Mood=Ind|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
79
+ fomos ser Mood=Ind|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
80
+ for ir Mood=Sub|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
81
+ for ir Mood=Sub|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
82
+ for ser Mood=Sub|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
83
+ for ser Mood=Sub|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
84
+ fora ir Mood=Ind|Number=Sing|Person=1|Tense=Pqp|VerbForm=Fin
85
+ fora ir Mood=Ind|Number=Sing|Person=3|Tense=Pqp|VerbForm=Fin
86
+ fora ser Mood=Ind|Number=Sing|Person=1|Tense=Pqp|VerbForm=Fin
87
+ fora ser Mood=Ind|Number=Sing|Person=3|Tense=Pqp|VerbForm=Fin
88
+ foram ir Mood=Ind|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
89
+ foram ir Mood=Ind|Number=Plur|Person=3|Tense=Pqp|VerbForm=Fin
90
+ foram ser Mood=Ind|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
91
+ foram ser Mood=Ind|Number=Plur|Person=3|Tense=Pqp|VerbForm=Fin
92
+ foras ir Mood=Ind|Number=Sing|Person=2|Tense=Pqp|VerbForm=Fin
93
+ foras ser Mood=Ind|Number=Sing|Person=2|Tense=Pqp|VerbForm=Fin
94
+ fordes ir Mood=Sub|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
95
+ fordes ser Mood=Sub|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
96
+ forem ir Mood=Sub|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
97
+ forem ser Mood=Sub|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
98
+ fores ir Mood=Sub|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
99
+ fores ser Mood=Sub|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
100
+ formos ir Mood=Sub|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
101
+ formos ser Mood=Sub|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
102
+ fosse ir Mood=Sub|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
103
+ fosse ir Mood=Sub|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
104
+ fosse ser Mood=Sub|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
105
+ fosse ser Mood=Sub|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
106
+ fossem ir Mood=Sub|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
107
+ fossem ser Mood=Sub|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
108
+ fosses ir Mood=Sub|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
109
+ fosses ser Mood=Sub|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
110
+ foste ir Mood=Ind|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
111
+ foste ser Mood=Ind|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
112
+ fostes ir Mood=Ind|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
113
+ fostes ser Mood=Ind|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
114
+ fui ir Mood=Ind|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
115
+ fui ser Mood=Ind|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
116
+ fôramos ir Mood=Ind|Number=Plur|Person=1|Tense=Pqp|VerbForm=Fin
117
+ fôramos ser Mood=Ind|Number=Plur|Person=1|Tense=Pqp|VerbForm=Fin
118
+ fôreis ir Mood=Ind|Number=Plur|Person=2|Tense=Pqp|VerbForm=Fin
119
+ fôreis ser Mood=Ind|Number=Plur|Person=2|Tense=Pqp|VerbForm=Fin
120
+ fôsseis ir Mood=Sub|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
121
+ fôsseis ser Mood=Sub|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
122
+ fôssemos ir Mood=Sub|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
123
+ fôssemos ser Mood=Sub|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
124
+ haja haver Mood=Imp|Number=Sing|Person=3|VerbForm=Fin
125
+ haja haver Mood=Sub|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
126
+ haja haver Mood=Sub|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
127
+ hajais haver Mood=Sub|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
128
+ hajam haver Mood=Imp|Number=Plur|Person=3|VerbForm=Fin
129
+ hajam haver Mood=Sub|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
130
+ hajamos haver Mood=Imp|Number=Plur|Person=1|VerbForm=Fin
131
+ hajamos haver Mood=Sub|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
132
+ hajas haver Mood=Sub|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
133
+ havei haver Mood=Imp|Number=Plur|Person=2|VerbForm=Fin
134
+ haveis haver Mood=Ind|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
135
+ havemos haver Mood=Ind|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
136
+ havendo haver VerbForm=Ger
137
+ haver haver Number=Sing|Person=1|VerbForm=Inf
138
+ haver haver Number=Sing|Person=3|VerbForm=Inf
139
+ haver haver VerbForm=Inf
140
+ haverdes haver Number=Plur|Person=2|VerbForm=Inf
141
+ haverei haver Mood=Ind|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
142
+ havereis haver Mood=Ind|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
143
+ haverem haver Number=Plur|Person=3|VerbForm=Inf
144
+ haveremos haver Mood=Ind|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
145
+ haveres haver Number=Sing|Person=2|VerbForm=Inf
146
+ haveria haver Mood=Cnd|Number=Sing|Person=1|VerbForm=Fin
147
+ haveria haver Mood=Cnd|Number=Sing|Person=3|VerbForm=Fin
148
+ haveriam haver Mood=Cnd|Number=Plur|Person=3|VerbForm=Fin
149
+ haverias haver Mood=Cnd|Number=Sing|Person=2|VerbForm=Fin
150
+ havermos haver Number=Plur|Person=1|VerbForm=Inf
151
+ haverá haver Mood=Ind|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
152
+ haverás haver Mood=Ind|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
153
+ haverão haver Mood=Ind|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
154
+ haveríamos haver Mood=Cnd|Number=Plur|Person=1|VerbForm=Fin
155
+ haveríeis haver Mood=Cnd|Number=Plur|Person=2|VerbForm=Fin
156
+ havia haver Mood=Ind|Number=Sing|Person=1|Tense=Imp|VerbForm=Fin
157
+ havia haver Mood=Ind|Number=Sing|Person=3|Tense=Imp|VerbForm=Fin
158
+ haviam haver Mood=Ind|Number=Plur|Person=3|Tense=Imp|VerbForm=Fin
159
+ havias haver Mood=Ind|Number=Sing|Person=2|Tense=Imp|VerbForm=Fin
160
+ havida haver Gender=Fem|Number=Sing|VerbForm=Part
161
+ havidas haver Gender=Fem|Number=Plur|VerbForm=Part
162
+ havido haver Gender=Masc|Number=Sing|VerbForm=Part
163
+ havidos haver Gender=Masc|Number=Plur|VerbForm=Part
164
+ havíamos haver Mood=Ind|Number=Plur|Person=1|Tense=Imp|VerbForm=Fin
165
+ havíeis haver Mood=Ind|Number=Plur|Person=2|Tense=Imp|VerbForm=Fin
166
+ hei haver Mood=Ind|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
167
+ houve haver Mood=Ind|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
168
+ houve haver Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
169
+ houvemos haver Mood=Ind|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
170
+ houver haver Mood=Sub|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
171
+ houver haver Mood=Sub|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
172
+ houvera haver Mood=Ind|Number=Sing|Person=1|Tense=Pqp|VerbForm=Fin
173
+ houvera haver Mood=Ind|Number=Sing|Person=3|Tense=Pqp|VerbForm=Fin
174
+ houveram haver Mood=Ind|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
175
+ houveram haver Mood=Ind|Number=Plur|Person=3|Tense=Pqp|VerbForm=Fin
176
+ houveras haver Mood=Ind|Number=Sing|Person=2|Tense=Pqp|VerbForm=Fin
177
+ houverdes haver Mood=Sub|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
178
+ houverem haver Mood=Sub|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
179
+ houveres haver Mood=Sub|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
180
+ houvermos haver Mood=Sub|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
181
+ houvesse haver Mood=Sub|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
182
+ houvesse haver Mood=Sub|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
183
+ houvessem haver Mood=Sub|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
184
+ houvesses haver Mood=Sub|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
185
+ houveste haver Mood=Ind|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
186
+ houvestes haver Mood=Ind|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
187
+ houvéramos haver Mood=Ind|Number=Plur|Person=1|Tense=Pqp|VerbForm=Fin
188
+ houvéreis haver Mood=Ind|Number=Plur|Person=2|Tense=Pqp|VerbForm=Fin
189
+ houvésseis haver Mood=Sub|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
190
+ houvéssemos haver Mood=Sub|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
191
+ há haver Mood=Imp|Number=Sing|Person=2|VerbForm=Fin
192
+ há haver Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
193
+ hás haver Mood=Ind|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
194
+ hão haver Mood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
195
+ ia ir Mood=Ind|Number=Sing|Person=1|Tense=Imp|VerbForm=Fin
196
+ ia ir Mood=Ind|Number=Sing|Person=3|Tense=Imp|VerbForm=Fin
197
+ iam ir Mood=Ind|Number=Plur|Person=3|Tense=Imp|VerbForm=Fin
198
+ ias ir Mood=Ind|Number=Sing|Person=2|Tense=Imp|VerbForm=Fin
199
+ ida ir Gender=Fem|Number=Sing|VerbForm=Part
200
+ idas ir Gender=Fem|Number=Plur|VerbForm=Part
201
+ ide ir Mood=Imp|Number=Plur|Person=2|VerbForm=Fin
202
+ ides ir Mood=Ind|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
203
+ ido ir Gender=Masc|Number=Sing|VerbForm=Part
204
+ idos ir Gender=Masc|Number=Plur|VerbForm=Part
205
+ indo ir VerbForm=Ger
206
+ ir ir Number=Sing|Person=1|VerbForm=Inf
207
+ ir ir Number=Sing|Person=3|VerbForm=Inf
208
+ ir ir VerbForm=Inf
209
+ irdes ir Number=Plur|Person=2|VerbForm=Inf
210
+ irei ir Mood=Ind|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
211
+ ireis ir Mood=Ind|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
212
+ irem ir Number=Plur|Person=3|VerbForm=Inf
213
+ iremos ir Mood=Ind|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
214
+ ires ir Number=Sing|Person=2|VerbForm=Inf
215
+ iria ir Mood=Cnd|Number=Sing|Person=1|VerbForm=Fin
216
+ iria ir Mood=Cnd|Number=Sing|Person=3|VerbForm=Fin
217
+ iriam ir Mood=Cnd|Number=Plur|Person=3|VerbForm=Fin
218
+ irias ir Mood=Cnd|Number=Sing|Person=2|VerbForm=Fin
219
+ irmos ir Number=Plur|Person=1|VerbForm=Inf
220
+ irá ir Mood=Ind|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
221
+ irás ir Mood=Ind|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
222
+ irão ir Mood=Ind|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
223
+ iríamos ir Mood=Cnd|Number=Plur|Person=1|VerbForm=Fin
224
+ iríeis ir Mood=Cnd|Number=Plur|Person=2|VerbForm=Fin
225
+ sede ser Mood=Imp|Number=Plur|Person=2|VerbForm=Fin
226
+ seja ser Mood=Imp|Number=Sing|Person=3|VerbForm=Fin
227
+ seja ser Mood=Sub|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
228
+ seja ser Mood=Sub|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
229
+ sejais ser Mood=Sub|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
230
+ sejam ser Mood=Imp|Number=Plur|Person=3|VerbForm=Fin
231
+ sejam ser Mood=Sub|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
232
+ sejamos ser Mood=Imp|Number=Plur|Person=1|VerbForm=Fin
233
+ sejamos ser Mood=Sub|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
234
+ sejas ser Mood=Sub|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
235
+ sendo ser VerbForm=Ger
236
+ ser ser Number=Sing|Person=1|VerbForm=Inf
237
+ ser ser Number=Sing|Person=3|VerbForm=Inf
238
+ ser ser VerbForm=Inf
239
+ serdes ser Number=Plur|Person=2|VerbForm=Inf
240
+ serei ser Mood=Ind|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
241
+ sereis ser Mood=Ind|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
242
+ serem ser Number=Plur|Person=3|VerbForm=Inf
243
+ seremos ser Mood=Ind|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
244
+ seres ser Number=Sing|Person=2|VerbForm=Inf
245
+ seria ser Mood=Cnd|Number=Sing|Person=1|VerbForm=Fin
246
+ seria ser Mood=Cnd|Number=Sing|Person=3|VerbForm=Fin
247
+ seriam ser Mood=Cnd|Number=Plur|Person=3|VerbForm=Fin
248
+ serias ser Mood=Cnd|Number=Sing|Person=2|VerbForm=Fin
249
+ sermos ser Number=Plur|Person=1|VerbForm=Inf
250
+ será ser Mood=Ind|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
251
+ serás ser Mood=Ind|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
252
+ serão ser Mood=Ind|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
253
+ seríamos ser Mood=Cnd|Number=Plur|Person=1|VerbForm=Fin
254
+ seríeis ser Mood=Cnd|Number=Plur|Person=2|VerbForm=Fin
255
+ sida ser Gender=Fem|Number=Sing|VerbForm=Part
256
+ sidas ser Gender=Fem|Number=Plur|VerbForm=Part
257
+ sido ser Gender=Masc|Number=Sing|VerbForm=Part
258
+ sidos ser Gender=Masc|Number=Plur|VerbForm=Part
259
+ sois ser Mood=Ind|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
260
+ somos ser Mood=Ind|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
261
+ sou ser Mood=Ind|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
262
+ são ser Mood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
263
+ sê ser Mood=Imp|Number=Sing|Person=2|VerbForm=Fin
264
+ tamos estar Abbr=Yes|Mood=Ind|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
265
+ tava estar Abbr=Yes|Mood=Ind|Number=Sing|Person=3|Tense=Imp|VerbForm=Fin
266
+ tavam estar Abbr=Yes|Mood=Ind|Number=Plur|Person=3|Tense=Imp|VerbForm=Fin
267
+ tem ter Mood=Imp|Number=Sing|Person=2|VerbForm=Fin
268
+ tem ter Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
269
+ temos ter Mood=Ind|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
270
+ tende ter Mood=Imp|Number=Plur|Person=2|VerbForm=Fin
271
+ tendes ter Mood=Ind|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
272
+ tendo ter VerbForm=Ger
273
+ tenha ter Mood=Imp|Number=Sing|Person=3|VerbForm=Fin
274
+ tenha ter Mood=Sub|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
275
+ tenha ter Mood=Sub|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
276
+ tenhais ter Mood=Sub|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
277
+ tenham ter Mood=Imp|Number=Plur|Person=3|VerbForm=Fin
278
+ tenham ter Mood=Sub|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
279
+ tenhamos ter Mood=Imp|Number=Plur|Person=1|VerbForm=Fin
280
+ tenhamos ter Mood=Sub|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
281
+ tenhas ter Mood=Sub|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
282
+ tenho ter Mood=Ind|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
283
+ tens ter Mood=Ind|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
284
+ ter ter Number=Sing|Person=1|VerbForm=Inf
285
+ ter ter Number=Sing|Person=3|VerbForm=Inf
286
+ ter ter VerbForm=Inf
287
+ terdes ter Number=Plur|Person=2|VerbForm=Inf
288
+ terei ter Mood=Ind|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
289
+ tereis ter Mood=Ind|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
290
+ terem ter Number=Plur|Person=3|VerbForm=Inf
291
+ teremos ter Mood=Ind|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
292
+ teres ter Number=Sing|Person=2|VerbForm=Inf
293
+ teria ter Mood=Cnd|Number=Sing|Person=1|VerbForm=Fin
294
+ teria ter Mood=Cnd|Number=Sing|Person=3|VerbForm=Fin
295
+ teriam ter Mood=Cnd|Number=Plur|Person=3|VerbForm=Fin
296
+ terias ter Mood=Cnd|Number=Sing|Person=2|VerbForm=Fin
297
+ termos ter Number=Plur|Person=1|VerbForm=Inf
298
+ terá ter Mood=Ind|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
299
+ terás ter Mood=Ind|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
300
+ terão ter Mood=Ind|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
301
+ teríamos ter Mood=Cnd|Number=Plur|Person=1|VerbForm=Fin
302
+ teríeis ter Mood=Cnd|Number=Plur|Person=2|VerbForm=Fin
303
+ teve ter Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
304
+ tida ter Gender=Fem|Number=Sing|VerbForm=Part
305
+ tidas ter Gender=Fem|Number=Plur|VerbForm=Part
306
+ tido ter Gender=Masc|Number=Sing|VerbForm=Part
307
+ tidos ter Gender=Masc|Number=Plur|VerbForm=Part
308
+ tinha ter Mood=Ind|Number=Sing|Person=1|Tense=Imp|VerbForm=Fin
309
+ tinha ter Mood=Ind|Number=Sing|Person=3|Tense=Imp|VerbForm=Fin
310
+ tinham ter Mood=Ind|Number=Plur|Person=3|Tense=Imp|VerbForm=Fin
311
+ tinhas: ter Mood=Ind|Number=Sing|Person=2|Tense=Imp|VerbForm=Fin
312
+ tive ter Mood=Ind|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
313
+ tivemos ter Mood=Ind|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
314
+ tiver ter Mood=Sub|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
315
+ tiver ter Mood=Sub|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
316
+ tivera ter Mood=Ind|Number=Sing|Person=1|Tense=Pqp|VerbForm=Fin
317
+ tivera ter Mood=Ind|Number=Sing|Person=3|Tense=Pqp|VerbForm=Fin
318
+ tiveram ter Mood=Ind|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
319
+ tiveram ter Mood=Ind|Number=Plur|Person=3|Tense=Pqp|VerbForm=Fin
320
+ tiveras ter Mood=Ind|Number=Sing|Person=2|Tense=Pqp|VerbForm=Fin
321
+ tiverdes ter Mood=Sub|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
322
+ tiverem ter Mood=Sub|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
323
+ tiveres ter Mood=Sub|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
324
+ tivermos ter Mood=Sub|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
325
+ tivesse ter Mood=Sub|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
326
+ tivesse ter Mood=Sub|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
327
+ tivessem ter Mood=Sub|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
328
+ tivesses ter Mood=Sub|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
329
+ tiveste ter Mood=Ind|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
330
+ tivestes ter Mood=Ind|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
331
+ tivéramos ter Mood=Ind|Number=Plur|Person=1|Tense=Pqp|VerbForm=Fin
332
+ tivéreis ter Mood=Ind|Number=Plur|Person=2|Tense=Pqp|VerbForm=Fin
333
+ tivésseis ter Mood=Sub|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
334
+ tivéssemos ter Mood=Sub|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
335
+ tá estar Abbr=Yes|Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
336
+ tão estar Abbr=Yes|Abbr=Yes|Mood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
337
+ têm ter Mood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
338
+ tínhamos ter Mood=Ind|Number=Plur|Person=1|Tense=Imp|VerbForm=Fin
339
+ tínheis ter Mood=Ind|Number=Plur|Person=2|Tense=Imp|VerbForm=Fin
340
+ tô estar Abbr=Yes|Mood=Ind|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
341
+ vades ir Mood=Sub|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
342
+ vai ir Mood=Imp|Number=Sing|Person=2|VerbForm=Fin
343
+ vai ir Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
344
+ vais ir Mood=Ind|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
345
+ vamo ir Abbr=Yes|Mood=Imp|Number=Plur|Person=1|VerbForm=Fin
346
+ vamo ir Abbr=Yes|Mood=Ind|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
347
+ vamo ir Abbr=Yes|Mood=Sub|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
348
+ vamos ir Mood=Imp|Number=Plur|Person=1|VerbForm=Fin
349
+ vamos ir Mood=Ind|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
350
+ vamos ir Mood=Sub|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
351
+ veio vir Mood=Ind|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
352
+ vem vir Mood=Imp|Number=Sing|Person=2|VerbForm=Fin
353
+ vem vir Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
354
+ venha vir Mood=Imp|Number=Sing|Person=3|VerbForm=Fin
355
+ venha vir Mood=Sub|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
356
+ venha vir Mood=Sub|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
357
+ venhais vir Mood=Sub|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
358
+ venham vir Mood=Imp|Number=Plur|Person=3|VerbForm=Fin
359
+ venham vir Mood=Sub|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
360
+ venhamos vir Mood=Imp|Number=Plur|Person=1|VerbForm=Fin
361
+ venhamos vir Mood=Sub|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
362
+ venhas vir Mood=Sub|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
363
+ venho vir Mood=Ind|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
364
+ vens: vir Mood=Ind|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
365
+ viemos vir Mood=Ind|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
366
+ vier vir Mood=Sub|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
367
+ vier vir Mood=Sub|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
368
+ viera vir Mood=Ind|Number=Sing|Person=1|Tense=Pqp|VerbForm=Fin
369
+ viera vir Mood=Ind|Number=Sing|Person=3|Tense=Pqp|VerbForm=Fin
370
+ vieram vir Mood=Ind|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
371
+ vieram vir Mood=Ind|Number=Plur|Person=3|Tense=Pqp|VerbForm=Fin
372
+ vieras vir Mood=Ind|Number=Sing|Person=2|Tense=Pqp|VerbForm=Fin
373
+ vierdes vir Mood=Sub|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
374
+ vierem vir Mood=Sub|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
375
+ vieres vir Mood=Sub|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
376
+ viermos vir Mood=Sub|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
377
+ viesse vir Mood=Sub|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
378
+ viesse vir Mood=Sub|Number=Sing|Person=3|Tense=Past|VerbForm=Fin
379
+ viessem vir Mood=Sub|Number=Plur|Person=3|Tense=Past|VerbForm=Fin
380
+ viesses vir Mood=Sub|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
381
+ vieste vir Mood=Ind|Number=Sing|Person=2|Tense=Past|VerbForm=Fin
382
+ viestes vir Mood=Ind|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
383
+ vim vir Mood=Ind|Number=Sing|Person=1|Tense=Past|VerbForm=Fin
384
+ vimos vir Mood=Ind|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin
385
+ vinda vir Gender=Fem|Number=Sing|VerbForm=Part
386
+ vindas vir Gender=Fem|Number=Plur|VerbForm=Part
387
+ vinde vir Mood=Imp|Number=Plur|Person=2|VerbForm=Fin
388
+ vindes vir Mood=Ind|Number=Plur|Person=2|Tense=Pres|VerbForm=Fin
389
+ vindo vir Gender=Masc|Number=Sing|VerbForm=Part
390
+ vindo vir VerbForm=Ger
391
+ vindos vir Gender=Masc|Number=Plur|VerbForm=Part
392
+ vinha vir Mood=Ind|Number=Sing|Person=1|Tense=Imp|VerbForm=Fin
393
+ vinha vir Mood=Ind|Number=Sing|Person=3|Tense=Imp|VerbForm=Fin
394
+ vinham vir Mood=Ind|Number=Plur|Person=3|Tense=Imp|VerbForm=Fin
395
+ vinhas: vir Mood=Ind|Number=Sing|Person=2|Tense=Imp|VerbForm=Fin
396
+ vir vir Number=Sing|Person=1|VerbForm=Inf
397
+ vir vir Number=Sing|Person=3|VerbForm=Inf
398
+ vir vir VerbForm=Inf
399
+ virdes vir Number=Plur|Person=2|VerbForm=Inf
400
+ virei vir Mood=Ind|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin
401
+ vireis vir Mood=Ind|Number=Plur|Person=2|Tense=Fut|VerbForm=Fin
402
+ virem vir Number=Plur|Person=3|VerbForm=Inf
403
+ viremos vir Mood=Ind|Number=Plur|Person=1|Tense=Fut|VerbForm=Fin
404
+ vires vir Number=Sing|Person=2|VerbForm=Inf
405
+ viria vir Mood=Cnd|Number=Sing|Person=1|VerbForm=Fin
406
+ viria vir Mood=Cnd|Number=Sing|Person=3|VerbForm=Fin
407
+ viriam vir Mood=Cnd|Number=Plur|Person=3|VerbForm=Fin
408
+ virias vir Mood=Cnd|Number=Sing|Person=2|VerbForm=Fin
409
+ virmos vir Number=Plur|Person=1|VerbForm=Inf
410
+ virá vir Mood=Ind|Number=Sing|Person=3|Tense=Fut|VerbForm=Fin
411
+ virás vir Mood=Ind|Number=Sing|Person=2|Tense=Fut|VerbForm=Fin
412
+ virão vir Mood=Ind|Number=Plur|Person=3|Tense=Fut|VerbForm=Fin
413
+ viríamos vir Mood=Cnd|Number=Plur|Person=1|VerbForm=Fin
414
+ viríeis vir Mood=Cnd|Number=Plur|Person=2|VerbForm=Fin
415
+ viéramos vir Mood=Ind|Number=Plur|Person=1|Tense=Pqp|VerbForm=Fin
416
+ viéreis vir Mood=Ind|Number=Plur|Person=2|Tense=Pqp|VerbForm=Fin
417
+ viésseis vir Mood=Sub|Number=Plur|Person=2|Tense=Past|VerbForm=Fin
418
+ viéssemos vir Mood=Sub|Number=Plur|Person=1|Tense=Past|VerbForm=Fin
419
+ vou ir Mood=Ind|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
420
+ vá ir Mood=Imp|Number=Sing|Person=3|VerbForm=Fin
421
+ vá ir Mood=Sub|Number=Sing|Person=1|Tense=Pres|VerbForm=Fin
422
+ vá ir Mood=Sub|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
423
+ vás ir Mood=Sub|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
424
+ vão ir Mood=Imp|Number=Plur|Person=3|VerbForm=Fin
425
+ vão ir Mood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
426
+ vão ir Mood=Sub|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
427
+ vêm vir Mood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin
428
+ vínhamos vir Mood=Ind|Number=Plur|Person=1|Tense=Imp|VerbForm=Fin
429
+ vínheis vir Mood=Ind|Number=Plur|Person=2|Tense=Imp|VerbForm=Fin
430
+ é ser Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin
431
+ éramos ser Mood=Ind|Number=Plur|Person=1|Tense=Imp|VerbForm=Fin
432
+ éreis ser Mood=Ind|Number=Plur|Person=2|Tense=Imp|VerbForm=Fin
433
+ és ser Mood=Ind|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin
434
+ íamos ir Mood=Ind|Number=Plur|Person=1|Tense=Imp|VerbForm=Fin
435
+ íeis ir Mood=Ind|Number=Plur|Person=2|Tense=Imp|VerbForm=Fin
portTokenizer/CCONJ.tsv ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ como como _
2
+ contudo contudo _
3
+ e e _
4
+ enquanto enquanto _
5
+ entretanto entretanto _
6
+ então então _
7
+ já já _
8
+ logo logo _
9
+ mas mas _
10
+ nem nem _
11
+ ora ora _
12
+ ou ou _
13
+ pois pois _
14
+ porquanto porquanto _
15
+ porque porque _
16
+ portanto portanto _
17
+ porém porém _
18
+ quando quando _
19
+ quanto quanto _
20
+ que que _
21
+ quer quer _
22
+ seja seja _
23
+ senão senão _
24
+ tanto tanto _
25
+ todavia todavia _
portTokenizer/DET.tsv ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ a o Definite=Def|Gender=Fem|Number=Sing|PronType=Art
2
+ algum algum Gender=Masc|Number=Sing|PronType=Ind
3
+ alguma algum Gender=Fem|Number=Sing|PronType=Ind
4
+ algumas algum Gender=Fem|Number=Plur|PronType=Ind
5
+ alguns algum Gender=Masc|Number=Plur|PronType=Ind
6
+ ambas ambos Gender=Fem|Number=Plur|PronType=Ind
7
+ ambos ambos Gender=Masc|Number=Plur|PronType=Ind
8
+ aquela aquele Gender=Fem|Number=Sing|PronType=Dem
9
+ aquelas aquele Gender=Fem|Number=Plur|PronType=Dem
10
+ aquele aquele Gender=Masc|Number=Sing|PronType=Dem
11
+ aqueles aquele Gender=Masc|Number=Plur|PronType=Dem
12
+ as o Definite=Def|Gender=Fem|Number=Plur|PronType=Art
13
+ bastante bastante Number=Sing|PronType=Ind
14
+ bastantes bastante Number=Plur|PronType=Ind
15
+ cada cada Number=Sing|PronType=Ind
16
+ certa certo Gender=Fem|Number=Sing|PronType=Ind
17
+ certas certo Gender=Fem|Number=Plur|PronType=Ind
18
+ certo certo Gender=Masc|Number=Sing|PronType=Ind
19
+ certos certos Gender=Masc|Number=Plur|PronType=Ind
20
+ cuja cujo Gender=Fem|Number=Sing|PronType=Rel
21
+ cujas cujo Gender=Fem|Number=Plur|PronType=Rel
22
+ cujo cujo Gender=Masc|Number=Sing|PronType=Rel
23
+ cujos cujo Gender=Masc|Number=Plur|PronType=Rel
24
+ dada dado Gender=Fem|Number=Sing|PronType=Ind
25
+ dado dado Gender=Masc|Number=Sing|PronType=Ind
26
+ demais demais Number=Plur|PronType=Ind
27
+ diversas diversos Gender=Fem|Number=Plur|PronType=Dem
28
+ diversos diversos Gender=Masc|Number=Plur|PronType=Dem
29
+ essa esse Gender=Fem|Number=Sing|PronType=Dem
30
+ essas esse Gender=Fem|Number=Plur|PronType=Dem
31
+ esse esse Gender=Masc|Number=Sing|PronType=Dem
32
+ esses esse Gender=Masc|Number=Plur|PronType=Dem
33
+ esta este Gender=Fem|Number=Sing|PronType=Dem
34
+ estas este Gender=Fem|Number=Plur|PronType=Dem
35
+ este este Gender=Masc|Number=Sing|PronType=Dem
36
+ estes este Gender=Masc|Number=Plur|PronType=Dem
37
+ inúmeras inúmeros Gender=Fem|Number=Plur|PronType=Dem
38
+ inúmeros inúmeros Gender=Masc|Number=Plur|PronType=Dem
39
+ mais mais PronType=Ind
40
+ menos menos PronType=Ind
41
+ mesma mesmo Gender=Fem|Number=Sing|PronType=Dem
42
+ mesmas mesmo Gender=Fem|Number=Plur|PronType=Dem
43
+ mesmo mesmo Gender=Masc|Number=Sing|PronType=Dem
44
+ mesmos mesmo Gender=Masc|Number=Plur|PronType=Dem
45
+ mesmíssima mesmíssimo Gender=Fem|Number=Sing|PronType=Dem
46
+ mesmíssimas mesmíssimo Gender=Fem|Number=Plur|PronType=Dem
47
+ mesmíssimo mesmíssimo Gender=Masc|Number=Sing|PronType=Dem
48
+ mesmíssimos mesmíssimo Gender=Masc|Number=Plur|PronType=Dem
49
+ meu meu Gender=Masc|Number=Sing|Person=1|Poss=Yes|PronType=Prs
50
+ meus meu Gender=Masc|Number=Plur|Person=1|Poss=Yes|PronType=Prs
51
+ minha meu Gender=Fem|Number=Sing|Person=1|Poss=Yes|PronType=Prs
52
+ minhas meu Gender=Fem|Number=Plur|Person=1|Poss=Yes|PronType=Prs
53
+ nenhum nenhum Gender=Masc|Number=Sing|PronType=Ind
54
+ nenhuma nenhum Gender=Fem|Number=Sing|PronType=Ind
55
+ nossa nosso Gender=Fem|Number=Sing|Person=1|Poss=Yes|PronType=Prs
56
+ nossas nosso Gender=Fem|Number=Plur|Person=1|Poss=Yes|PronType=Prs
57
+ nosso nosso Gender=Masc|Number=Sing|Person=1|Poss=Yes|PronType=Prs
58
+ nossos nosso Gender=Masc|Number=Plur|Person=1|Poss=Yes|PronType=Prs
59
+ o o Definite=Def|Gender=Masc|Number=Sing|PronType=Art
60
+ os o Definite=Def|Gender=Masc|Number=Plur|PronType=Art
61
+ outra outro Gender=Fem|Number=Sing|PronType=Ind
62
+ outras outro Gender=Fem|Number=Plur|PronType=Ind
63
+ outro outro Gender=Masc|Number=Sing|PronType=Ind
64
+ outros outro Gender=Masc|Number=Plur|PronType=Ind
65
+ própria próprio Gender=Fem|Number=Sing|PronType=Dem
66
+ próprias próprio Gender=Fem|Number=Plur|PronType=Dem
67
+ próprio próprio Gender=Masc|Number=Sing|PronType=Dem
68
+ próprios próprio Gender=Masc|Number=Plur|PronType=Dem
69
+ quais qual Number=Plur|PronType=Int
70
+ quaisquer qualquer Number=Plur|PronType=Ind
71
+ qual qual Number=Sing|PronType=Int
72
+ qualquer qualquer Number=Sing|PronType=Ind
73
+ quanta quanto Gender=Fem|Number=Sing|PronType=Ind
74
+ quanta quanto Gender=Fem|Number=Sing|PronType=Int
75
+ quantas quanto Gender=Fem|Number=Plur|PronType=Ind
76
+ quantas quanto Gender=Fem|Number=Plur|PronType=Int
77
+ quantas quanto Gender=Fem|Number=Plur|PronType=Rel
78
+ quanto quanto Gender=Masc|Number=Sing|PronType=Ind
79
+ quanto quanto Gender=Masc|Number=Sing|PronType=Int
80
+ quantos quanto Gender=Masc|Number=Plur|PronType=Ind
81
+ quantos quanto Gender=Masc|Number=Plur|PronType=Int
82
+ quantos quanto Gender=Masc|Number=Plur|PronType=Rel
83
+ que que PronType=Ind
84
+ seu seu Gender=Masc|Number=Sing|Person=3|Poss=Yes|PronType=Prs
85
+ seus seu Gender=Masc|Number=Plur|Person=3|Poss=Yes|PronType=Prs
86
+ sua seu Gender=Fem|Number=Sing|Person=3|Poss=Yes|PronType=Prs
87
+ suas seu Gender=Fem|Number=Plur|Person=3|Poss=Yes|PronType=Prs
88
+ tais tal Number=Plur|PronType=Dem
89
+ tais tal Number=Plur|PronType=Ind
90
+ tal tal Number=Sing|PronType=Dem
91
+ tal tal Number=Sing|PronType=Ind
92
+ tanta tanto Gender=Fem|Number=Sing|PronType=Ind
93
+ tantas tanto Gender=Fem|Number=Plur|PronType=Ind
94
+ tanto tanto Gender=Masc|Number=Sing|PronType=Ind
95
+ tantos tanto Gender=Masc|Number=Plur|PronType=Ind
96
+ teu teu Gender=Masc|Number=Sing|Person=2|Poss=Yes|PronType=Prs
97
+ teus teu Gender=Masc|Number=Plur|Person=2|Poss=Yes|PronType=Prs
98
+ toda todo Gender=Fem|Number=Sing|PronType=Ind
99
+ todas todo Gender=Fem|Number=Plur|PronType=Ind
100
+ todinha todinho Gender=Fem|Number=Sing|PronType=Ind
101
+ todinhas todinho Gender=Fem|Number=Plur|PronType=Ind
102
+ todinho todinho Gender=Masc|Number=Sing|PronType=Ind
103
+ todinhos todinho Gender=Masc|Number=Plur|PronType=Ind
104
+ todo todo Gender=Masc|Number=Sing|PronType=Ind
105
+ todos todo Gender=Masc|Number=Plur|PronType=Ind
106
+ tua teu Gender=Fem|Number=Sing|Person=2|Poss=Yes|PronType=Prs
107
+ tuas teu Gender=Fem|Number=Plur|Person=2|Poss=Yes|PronType=Prs
108
+ um um Definite=Ind|Gender=Masc|Number=Sing|PronType=Art
109
+ uma um Definite=Ind|Gender=Fem|Number=Sing|PronType=Art
110
+ umas um Definite=Ind|Gender=Fem|Number=Plur|PronType=Art
111
+ uns um Definite=Ind|Gender=Masc|Number=Plur|PronType=Art
112
+ vossa vosso Gender=Fem|Number=Sing|Person=2|Poss=Yes|PronType=Prs
113
+ vossas vosso Gender=Fem|Number=Plur|Person=2|Poss=Yes|PronType=Prs
114
+ vosso vosso Gender=Masc|Number=Sing|Person=2|Poss=Yes|PronType=Prs
115
+ vossos vosso Gender=Masc|Number=Plur|Person=2|Poss=Yes|PronType=Prs
116
+ várias vários Gender=Fem|Number=Plur|PronType=Ind
117
+ vários vários Gender=Masc|Number=Plur|PronType=Ind
portTokenizer/INTJ.tsv ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ adeus adeus _
2
+ ah ah _
3
+ ai ai _
4
+ amém amém _
5
+ arre arre _
6
+ atenção atenção _
7
+ ave ave _
8
+ caramba caramba _
9
+ coragem coragem _
10
+ eia eia _
11
+ eita eita _
12
+ eureca eureca _
13
+ hein hein _
14
+ hem hem _
15
+ heureca heureca _
16
+ hum hum _
17
+ hummm hummm _
18
+ hurra hurra _
19
+ ih ih _
20
+ nossa nossa _
21
+ né né _
22
+ oh oh _
23
+ oi oi _
24
+ ok ok _
25
+ olá olá _
26
+ ora ora _
27
+ poxa poxa _
28
+ pqp pqp _
29
+ pronto pronto _
30
+ psit psit _
31
+ psiu psiu _
32
+ pô pô _
33
+ que que _
34
+ tchau tchau _
35
+ ufa ufa _
36
+ uh uh _
37
+ ui ui _
38
+ ué ué _
39
+ xi xi _
40
+ ão ão _
41
+ ó ó _
portTokenizer/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Lucelene Lopes
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
portTokenizer/NOUN.tsv ADDED
The diff for this file is too large to render. See raw diff
 
portTokenizer/NUM.tsv ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ catorze catorze NumType=Card
2
+ cem cem NumType=Card
3
+ cento cento NumType=Card
4
+ cinco cinco NumType=Card
5
+ cinquenta cinquenta NumType=Card
6
+ dez dez NumType=Card
7
+ dezenove dezenove NumType=Card
8
+ dezesseis dezesseis NumType=Card
9
+ dezessete dezessete NumType=Card
10
+ dezoito dezoito NumType=Card
11
+ dois dois Gender=Masc|NumType=Card
12
+ doze doze NumType=Card
13
+ duas dois Gender=Fem|NumType=Card
14
+ duzentas duzentos Gender=Fem|NumType=Card
15
+ duzentos duzentos Gender=Masc|NumType=Card
16
+ meia meio Gender=Fem|NumType=Frac
17
+ meio meio Gender=Masc|NumType=Frac
18
+ mil mil NumType=Card
19
+ nove nove NumType=Card
20
+ novecentas novecentos Gender=Fem|NumType=Card
21
+ novecentos novecentos Gender=Masc|NumType=Card
22
+ noventa noventa NumType=Card
23
+ oitenta oitenta NumType=Card
24
+ oito oito NumType=Card
25
+ oitocentas oitocentos Gender=Fem|NumType=Card
26
+ oitocentos oitocentos Gender=Masc|NumType=Card
27
+ onze onze NumType=Card
28
+ quarenta quarenta NumType=Card
29
+ quatorze quatorze NumType=Card
30
+ quatro quatro NumType=Card
31
+ quatrocentas quatrocentos Gender=Fem|NumType=Card
32
+ quatrocentos quatrocentos Gender=Masc|NumType=Card
33
+ quinhentas quinhentos Gender=Fem|NumType=Card
34
+ quinhentos quinhentos Gender=Masc|NumType=Card
35
+ quinze quinze NumType=Card
36
+ seis seis NumType=Card
37
+ seiscentas seiscentos Gender=Fem|NumType=Card
38
+ seiscentos seiscentos Gender=Masc|NumType=Card
39
+ sessenta sessenta NumType=Card
40
+ sete sete NumType=Card
41
+ setecentas setecentos Gender=Fem|NumType=Card
42
+ setecentos setecentos Gender=Masc|NumType=Card
43
+ setenta setenta NumType=Card
44
+ terça terço Gender=Fem|NumType=Frac
45
+ terço terço Gender=Masc|NumType=Frac
46
+ treze treze NumType=Card
47
+ trezentas trezentos Gender=Fem|NumType=Card
48
+ trezentos trezentos Gender=Masc|NumType=Card
49
+ trinta trinta NumType=Card
50
+ três três NumType=Card
51
+ um um Gender=Masc|NumType=Card
52
+ uma um Gender=Fem|NumType=Card
53
+ vinte vinte NumType=Card
54
+ zero zero NumType=Card
portTokenizer/PRON.tsv ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ a o Case=Acc|Gender=Fem|Number=Sing|Person=3|PronType=Prs
2
+ a o Gender=Fem|Number=Sing|Person=3|PronType=Dem
3
+ algo algo Gender=Masc|Number=Sing|PronType=Ind
4
+ algum algum Gender=Masc|Number=Sing|PronType=Ind
5
+ alguma algum Gender=Fem|Number=Sing|PronType=Ind
6
+ algumas algum Gender=Fem|Number=Plur|PronType=Ind
7
+ alguns algum Gender=Masc|Number=Plur|PronType=Ind
8
+ alguém alguém Gender=Masc|Number=Sing|PronType=Ind
9
+ ambas ambos Gender=Fem|Number=Plur|PronType=Ind
10
+ ambos ambos Gender=Masc|Number=Plur|PronType=Ind
11
+ aquela aquele Gender=Fem|Number=Sing|PronType=Dem
12
+ aquelas aquele Gender=Fem|Number=Plur|PronType=Dem
13
+ aquele aquele Gender=Masc|Number=Sing|PronType=Dem
14
+ aqueles aquele Gender=Masc|Number=Plur|PronType=Dem
15
+ aquilo aquilo Gender=Masc|Number=Sing|PronType=Dem
16
+ as o Case=Acc|Gender=Fem|Number=Plur|Person=3|PronType=Prs
17
+ as o Gender=Fem|Number=Plur|Person=3|PronType=Dem
18
+ bulhufas bulhufas Gender=Masc|Number=Sing|PronType=Int
19
+ cada cada Number=Sing|PronType=Ind
20
+ demais demais Number=Plur|PronType=Ind
21
+ diversos diversos Number=Plur|PronType=Ind
22
+ ela ele Case=Nom|Gender=Fem|Number=Sing|Person=3|PronType=Prs
23
+ elas ele Case=Nom|Gender=Fem|Number=Plur|Person=3|PronType=Prs
24
+ ele ele Case=Nom|Gender=Masc|Number=Sing|Person=3|PronType=Prs
25
+ eles ele Case=Nom|Gender=Masc|Number=Plur|Person=3|PronType=Prs
26
+ essa esse Gender=Fem|Number=Sing|PronType=Dem
27
+ essas esse Gender=Fem|Number=Plur|PronType=Dem
28
+ esse esse Gender=Masc|Number=Sing|PronType=Dem
29
+ esses esse Gender=Masc|Number=Plur|PronType=Dem
30
+ esta este Gender=Fem|Number=Sing|PronType=Dem
31
+ estas este Gender=Fem|Number=Plur|PronType=Dem
32
+ este este Gender=Masc|Number=Sing|PronType=Dem
33
+ estes este Gender=Masc|Number=Plur|PronType=Dem
34
+ eu eu Case=Nom|Number=Sing|Person=1|PronType=Prs
35
+ excelência excelência Number=Sing|Person=2|PronType=Prs
36
+ excelências excelência Number=Plur|Person=2|PronType=Prs
37
+ isso isso Gender=Masc|Number=Sing|PronType=Dem
38
+ isto isto Gender=Masc|Number=Sing|PronType=Dem
39
+ la lo Case=Acc|Gender=Fem|Number=Sing|Person=3|PronType=Prs
40
+ las lo Case=Acc|Gender=Fem|Number=Plur|Person=3|PronType=Prs
41
+ lhe lhe Case=Dat|Number=Sing|Person=3|PronType=Prs
42
+ lhes lhe Case=Dat|Number=Plur|Person=3|PronType=Prs
43
+ lo lo Case=Acc|Gender=Masc|Number=Sing|Person=3|PronType=Prs
44
+ los lo Case=Acc|Gender=Masc|Number=Plur|Person=3|PronType=Prs
45
+ me me Case=Acc|Number=Sing|Person=1|PronType=Prs
46
+ me me Case=Dat|Number=Sing|Person=1|PronType=Prs
47
+ mesma mesmo Gender=Fem|Number=Sing|PronType=Dem
48
+ mesmas mesmo Gender=Fem|Number=Plur|PronType=Dem
49
+ mesmo mesmo Gender=Masc|Number=Sing|PronType=Dem
50
+ mesmos mesmo Gender=Masc|Number=Plur|PronType=Dem
51
+ meu meu Gender=Masc|Number=Sing|Person=1|Poss=Yes|PronType=Prs
52
+ meus meu Gender=Masc|Number=Plur|Person=1|Poss=Yes|PronType=Prs
53
+ mim mim Case=Dat|Number=Sing|Person=1|PronType=Prs
54
+ minha meu Gender=Fem|Number=Sing|Person=1|Poss=Yes|PronType=Prs
55
+ minhas meu Gender=Fem|Number=Plur|Person=1|Poss=Yes|PronType=Prs
56
+ muita muito Gender=Fem|Number=Sing|PronType=Ind
57
+ muitas muito Gender=Fem|Number=Plur|PronType=Ind
58
+ muito muito Gender=Masc|Number=Sing|PronType=Ind
59
+ muitos muito Gender=Masc|Number=Plur|PronType=Ind
60
+ muitíssima muitíssimo Gender=Fem|Number=Sing|PronType=Ind
61
+ muitíssimas muitíssimo Gender=Fem|Number=Plur|PronType=Ind
62
+ muitíssimo muitíssimo Gender=Masc|Number=Sing|PronType=Ind
63
+ muitíssimos muitíssimo Gender=Masc|Number=Plur|PronType=Ind
64
+ na na Case=Acc|Gender=Fem|Number=Sing|Person=3|PronType=Prs
65
+ nada nada Gender=Masc|Number=Sing|PronType=Ind
66
+ nadinha nadinha Gender=Masc|Number=Sing|PronType=Ind
67
+ nas nas Case=Acc|Gender=Fem|Number=Plur|Person=3|PronType=Prs
68
+ nenhum nenhum Gender=Masc|Number=Sing|PronType=Ind
69
+ nenhuma nenhum Gender=Fem|Number=Sing|PronType=Ind
70
+ ninguém ninguém Number=Sing|PronType=Ind
71
+ no no Case=Acc|Gender=Masc|Number=Sing|Person=3|PronType=Prs
72
+ nos nos Case=Acc|Number=Plur|Person=1|PronType=Prs
73
+ nos nos Case=Dat|Number=Plur|Person=1|PronType=Prs
74
+ nossa nosso Gender=Fem|Number=Sing|Person=1|Poss=Yes|PronType=Prs
75
+ nossas nosso Gender=Fem|Number=Plur|Person=1|Poss=Yes|PronType=Prs
76
+ nosso nosso Gender=Masc|Number=Sing|Person=1|Poss=Yes|PronType=Prs
77
+ nossos nosso Gender=Masc|Number=Plur|Person=1|Poss=Yes|PronType=Prs
78
+ nóis nós Case=Nom|Number=Plur|Person=1|PronType=Prs
79
+ nós nós Case=Nom|Number=Plur|Person=1|PronType=Prs
80
+ o o Case=Acc|Gender=Masc|Number=Sing|Person=3|PronType=Prs
81
+ o o Gender=Masc|Number=Sing|Person=3|PronType=Dem
82
+ o o PronType=Int
83
+ os o Case=Acc|Gender=Masc|Number=Plur|Person=3|PronType=Prs
84
+ os o Gender=Masc|Number=Plur|Person=3|PronType=Dem
85
+ outra outro Gender=Fem|Number=Sing|PronType=Ind
86
+ outras outro Gender=Fem|Number=Plur|PronType=Ind
87
+ outrem outrem Number=Sing|PronType=Ind
88
+ outro outro Gender=Masc|Number=Sing|PronType=Ind
89
+ outros outro Gender=Masc|Number=Plur|PronType=Ind
90
+ patavina patavina Gender=Masc|Number=Sing|PronType=Ind
91
+ patavinas patavina Gender=Masc|Number=Plur|PronType=Ind
92
+ pouca pouco Gender=Fem|Number=Sing|PronType=Ind
93
+ poucas pouco Gender=Fem|Number=Plur|PronType=Ind
94
+ pouco pouco Gender=Masc|Number=Sing|PronType=Ind
95
+ poucos pouco Gender=Masc|Number=Plur|PronType=Ind
96
+ pouquinha pouquinho Gender=Fem|Number=Sing|PronType=Ind
97
+ pouquinhas pouquinho Gender=Fem|Number=Plur|PronType=Ind
98
+ pouquinho pouquinho Gender=Masc|Number=Sing|PronType=Ind
99
+ pouquinhos pouquinho Gender=Masc|Number=Plur|PronType=Ind
100
+ pouquíssima pouquíssimo Gender=Fem|Number=Sing|PronType=Ind
101
+ pouquíssimas pouquíssimo Gender=Fem|Number=Plur|PronType=Ind
102
+ pouquíssimo pouquíssimo Gender=Masc|Number=Sing|PronType=Ind
103
+ pouquíssimos pouquíssimo Gender=Masc|Number=Plur|PronType=Ind
104
+ própria próprio Gender=Fem|Number=Sing|PronType=Dem
105
+ próprias próprio Gender=Fem|Number=Plur|PronType=Dem
106
+ próprio próprio Gender=Masc|Number=Sing|PronType=Dem
107
+ próprios próprio Gender=Masc|Number=Plur|PronType=Dem
108
+ quais qual Number=Plur|PronType=Int
109
+ quais qual Number=Plur|PronType=Rel
110
+ quaisquer qualquer Number=Plur|PronType=Ind
111
+ qual qual Number=Sing|PronType=Int
112
+ qual qual Number=Sing|PronType=Rel
113
+ qualquer qualquer Number=Sing|PronType=Ind
114
+ quanta quanto Gender=Fem|Number=Sing|PronType=Ind
115
+ quanta quanto Gender=Fem|Number=Sing|PronType=Int
116
+ quantas quanto Gender=Fem|Number=Plur|PronType=Ind
117
+ quantas quanto Gender=Fem|Number=Plur|PronType=Int
118
+ quantas quanto Gender=Fem|Number=Plur|PronType=Rel
119
+ quanto quanto PronType=Rel
120
+ quantos quanto Gender=Masc|Number=Plur|PronType=Ind
121
+ quantos quanto Gender=Masc|Number=Plur|PronType=Int
122
+ quantos quanto Gender=Masc|Number=Plur|PronType=Rel
123
+ que que PronType=Int
124
+ que que PronType=Rel
125
+ quem quem PronType=Ind
126
+ quem quem PronType=Int
127
+ quem quem PronType=Rel
128
+ quê quê PronType=Int
129
+ se se Case=Acc|Person=3|PronType=Prs
130
+ se se Case=Dat|Person=3|PronType=Prs
131
+ se se Case=Nom|Person=3|PronType=Prs
132
+ senhor senhor Case=Nom|Gender=Masc|Number=Sing|Person=2|PronType=Prs
133
+ senhora senhor Case=Nom|Gender=Fem|Number=Sing|Person=2|PronType=Prs
134
+ senhoras senhor Case=Nom|Gender=Fem|Number=Plur|Person=2|PronType=Prs
135
+ senhores senhor Case=Nom|Gender=Masc|Number=Plur|Person=2|PronType=Prs
136
+ senhorita senhorita Case=Nom|Gender=Fem|Number=Sing|Person=2|PronType=Prs
137
+ senhoritas senhorita Case=Nom|Gender=Fem|Number=Plur|Person=2|PronType=Prs
138
+ seu seu Gender=Masc|Number=Sing|Person=3|Poss=Yes|PronType=Prs
139
+ seus seu Gender=Masc|Number=Plur|Person=3|Poss=Yes|PronType=Prs
140
+ si si Case=Dat|Number=Sing|Person=3|PronType=Prs
141
+ sua seu Gender=Fem|Number=Sing|Person=3|Poss=Yes|PronType=Prs
142
+ suas seu Gender=Fem|Number=Plur|Person=3|Poss=Yes|PronType=Prs
143
+ tais tal Number=Plur|PronType=Dem
144
+ tais tal Number=Plur|PronType=Ind
145
+ tal tal Number=Sing|PronType=Dem
146
+ tal tal Number=Sing|PronType=Ind
147
+ tanta tanto Gender=Fem|Number=Sing|PronType=Ind
148
+ tantas tanto Gender=Fem|Number=Plur|PronType=Ind
149
+ tanto tanto Gender=Masc|Number=Sing|PronType=Ind
150
+ tantos tanto Gender=Masc|Number=Plur|PronType=Ind
151
+ te te Case=Acc|Number=Sing|Person=2|PronType=Prs
152
+ te te Case=Dat|Number=Sing|Person=2|PronType=Prs
153
+ teu teu Gender=Masc|Number=Sing|Person=2|Poss=Yes|PronType=Prs
154
+ teus teu Gender=Masc|Number=Plur|Person=2|Poss=Yes|PronType=Prs
155
+ ti ti Case=Dat|Number=Sing|Person=2|PronType=Prs
156
+ toda todo Gender=Fem|Number=Sing|PronType=Ind
157
+ todas todo Gender=Fem|Number=Plur|PronType=Ind
158
+ todo todo Gender=Masc|Number=Sing|PronType=Ind
159
+ todos todo Gender=Masc|Number=Plur|PronType=Ind
160
+ tu tu Case=Nom|Number=Sing|Person=2|PronType=Prs
161
+ tua teu Gender=Fem|Number=Sing|Person=2|Poss=Yes|PronType=Prs
162
+ tuas teu Gender=Fem|Number=Plur|Person=2|Poss=Yes|PronType=Prs
163
+ tudo tudo PronType=Ind
164
+ um um Gender=Masc|Number=Sing|PronType=Ind
165
+ uma um Gender=Fem|Number=Sing|PronType=Ind
166
+ umas um Gender=Fem|Number=Plur|PronType=Ind
167
+ uns um Gender=Masc|Number=Plur|PronType=Ind
168
+ você você Case=Nom|Number=Sing|Person=2|PronType=Prs
169
+ vocês você Case=Nom|Number=Plur|Person=2|PronType=Prs
170
+ vos vos Case=Acc|Number=Plur|Person=2|PronType=Prs
171
+ vos vos Case=Dat|Number=Plur|Person=2|PronType=Prs
172
+ vosmecê vosmecê Number=Sing|Person=2|PronType=Prs
173
+ vosmecês vosmecê Number=Plur|Person=2|PronType=Prs
174
+ vossa vosso Gender=Fem|Number=Sing|Person=2|Poss=Yes|PronType=Prs
175
+ vossas vosso Gender=Fem|Number=Plur|Person=2|Poss=Yes|PronType=Prs
176
+ vosso vosso Gender=Masc|Number=Sing|Person=2|Poss=Yes|PronType=Prs
177
+ vossos vosso Gender=Masc|Number=Plur|Person=2|Poss=Yes|PronType=Prs
178
+ várias vários Gender=Fem|Number=Plur|PronType=Ind
179
+ vários vários Gender=Masc|Number=Plur|PronType=Ind
180
+ vós vós Case=Nom|Number=Plur|Person=2|PronType=Prs
portTokenizer/README.md ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # portTokenizer
2
+ This repository has `portTok.py` program, a tokenizer for Portuguese text using Universal Dependencies (UD) format (CoNLL-U) to store the tokenized sentences.
3
+
4
+ This program receives as input a single textual file with the sentences, one per line, and generates a `.conllu` file with all sentences tokenized according to the CoNLL-U format.
5
+
6
+ The tokenization process performs usual tokenization tasks, as dealing with punctuations, but also performs the decomposition of contracted words (e.g. `da` is decontracted into `de`+ `a`), enclisis (e.g. `dizer-nos` is decomposed into `dizer`+`nos`), and mesoclisis (`ajudar-nos-ia` is decomposed into `ajudaria`+ `nos`), while the original form is kept in the CoNLL-U as a contracted token (see example below).
7
+
8
+ Another important feature of the tokenizer is the heuristic to disambiguate word forms that can either be a contracted word or not, as is the case of the pronoun `nos` and the contracted preposition and determiner `em`+`os`. The other dealt cases are the forms `consigo` and `com`+`si`, `pelo` and `por`+`o`, `pelos` and `por`+`os`, `pela` and `por`+`a`, `pelas` and `por`+`as`, and finally the case of `pra` that can either be an abbreviated form of `para` or `para`+`a`. To perform these disambiguations the tokenizer uses the PortiLexicon-UD, a Portuguese lexikon to examine the possible classes of neighboring words of the disambiguation candidates. An example of disambiguation is shown below in sentence examples that have one time the form `nos` employed as a pronoun and another time employed as the contracted preposition and determiner `em`+`o` (see example below).
9
+
10
+ This program also consults a list of known abbreviations in Portuguese that is read from the file `abbrev.txt`.
11
+
12
+ ## Tokenization Example
13
+
14
+ For example, if the following sentences are the input of the tokenizer:
15
+
16
+ `A rua Dr. Flores é uma rua da cidade de Porto Alegre?`
17
+
18
+ `Provavelmente, 90% dos gaúchos vai dizer-nos que sim.`
19
+
20
+ `Até os que não moram nos bairros de Porto Alegre.`
21
+
22
+ The follwing CoNLL-U will be generated:
23
+
24
+ ![conllu1](https://github.com/LuceleneL/portTokenizer/assets/81653183/45190e19-ecf1-451d-b7f2-f5dab7affeeb)
25
+ ![conllu2](https://github.com/LuceleneL/portTokenizer/assets/81653183/d067587e-fa0d-4531-bbe5-178dcaf4ba5e)
26
+ ![conllu3](https://github.com/LuceleneL/portTokenizer/assets/81653183/8a4bc06d-dcc4-4b5e-837c-d70993d7640b)
27
+
28
+ ## Program Options
29
+ This program also performs, optionally, a verification of the matching punctuations (quotation marks, parenthesis, brackets, curly braces) eventually removing missing pairs.
30
+
31
+ Another option available is the removal of uppercased preambules in sentences, usually found as headlines in jornalistic texts, as for example the sentence:
32
+
33
+ `A CRONOLOGIA Governo concede visto de permanência a Battisti em 2015.`
34
+
35
+ Where the words `A CRONOLOGIA` is not a part of the sentence, and therefore the sentence can be trimmed by the removal of the headline words.
36
+
37
+ Another option available in the program is the definition of a model for the sentence identifier (SID) to be used in the produced CoNLL-U. For example if the model `S0000` is given, the sentences will be numbered as `S0001`, `S0002`, and so on.
38
+
39
+ ## Usage example
40
+ `python3 portTok -o sents.conllu -m -t -s S0000 sents.txt`
41
+
42
+ This command fetch the input from files `sents.txt`, it performs the matching of paired punctuations (`-m`), performs the trim of sentence headlines (`-t`), and sets the SID model as `S0000` (`-s S0000`), saving the produced CoNLL-U in the file `sents.conllu` (`-o sents.conllu`).
43
+
44
+ # Contents
45
+ The main files in this repository are:
46
+ - `README.md` - this read explanatory file;
47
+ - `portTok.py` - the Python 3 program;
48
+ - `abbrev.txt` - list of known abbreviations in Portuguese;
49
+ - `sents.txt` - the input file to be used as example;
50
+ - `sents.conllu` - the output file generated reading the example input file.
51
+
52
+ As this program uses a Portuguese lexikon (PortLexicon-UD), this lexikon files are included here, namely:
53
+ - `lexikon.py` - a Python 3 package file with the `class UDlexPT`, plus the data files:
54
+ - `ADJ.tsv`
55
+ - `ADP.tsv`
56
+ - `ADV.tsv`
57
+ - `AUX.tsv`
58
+ - `CCONJ.tsv`
59
+ - `DET.tsv`
60
+ - `INTJ.tsv`
61
+ - `NOUN.tsv`
62
+ - `NUM.tsv`
63
+ - `PRON.tsv`
64
+ - `SCONJ.tsv`
65
+ - `VERB.tsv`
66
+ - `WORDmaster.txt`
67
+
68
+ # Acknowledgments
69
+ This work was carried out at the Center for Artificial Intelligence of the University of São Paulo (C4AI - [http://c4ai.inova.usp.br/](http://c4ai.inova.usp.br/)), with support by the São Paulo Research Foundation (FAPESP grant #2019/07665-4) and by the IBM Corporation. The project was also supported by the Ministry of Science, Technology and Innovation, with resources of Law N. 8.248, of October 23, 1991, within the scope of PPI-SOFTEX, coordinated by Softex and published as Residence in TIC 13, DOU 01245.010222/2022-44.
70
+
portTokenizer/SCONJ.tsv ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ caso caso _
2
+ como como _
3
+ conforme conforme _
4
+ conquanto conquanto _
5
+ contanto contanto _
6
+ embora embora _
7
+ enquanto enquanto _
8
+ pois pois _
9
+ porque porque _
10
+ quando quando _
11
+ quanto quanto _
12
+ que que _
13
+ se se _
14
+ segundo segundo _
portTokenizer/VERB.tsv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3c3ccbf94e0c6e7a1673722f6adceb36e75fde7a70fd5a1dc0edc5b7bcc69342
3
+ size 71016248
portTokenizer/WORDmaster.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0aadfccb3df079933e99f7034c76b8160942d91141e2159ce54aae53e80afb89
3
+ size 14866932
portTokenizer/__pycache__/lexikon.cpython-37.pyc ADDED
Binary file (2.94 kB). View file
 
portTokenizer/abbrev.txt ADDED
@@ -0,0 +1,397 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ dr.
2
+ dra.
3
+ sr.
4
+ sra.
5
+ prof.
6
+ profa.
7
+ Dr.
8
+ Dra.
9
+ Sr.
10
+ Sra.
11
+ Prof.
12
+ Profa.
13
+ DR.
14
+ DRA.
15
+ SR.
16
+ SRA.
17
+ PROF.
18
+ PROFA.
19
+ ilmo.
20
+ Ilmo.
21
+ ILMO.
22
+ bel.
23
+ Bel.
24
+ BEL.
25
+ eng.
26
+ Eng.
27
+ ENG.
28
+ reg.
29
+ Reg.
30
+ REG.
31
+ visc.
32
+ Visc.
33
+ VISC.
34
+ bar.
35
+ Bar.
36
+ BAR.
37
+ cond.
38
+ Cond.
39
+ COND.
40
+ séc.
41
+ Séc.
42
+ SÉC.
43
+ jr.
44
+ Jr.
45
+ JR.
46
+ ir.
47
+ Ir.
48
+ IR.
49
+ st.
50
+ St.
51
+ ST.
52
+ app.
53
+ App.
54
+ APP.
55
+ gov.
56
+ Gov.
57
+ GOV.
58
+ des.
59
+ Des.
60
+ DES.
61
+ gen.
62
+ Gen.
63
+ GEN.
64
+ gal.
65
+ Gal.
66
+ GAL.
67
+ cel.
68
+ Cel.
69
+ CEL.
70
+ col.
71
+ Col.
72
+ COL.
73
+ maj.
74
+ Maj.
75
+ MAJ.
76
+ ten.
77
+ Ten.
78
+ TEN.
79
+ cap.
80
+ Cap.
81
+ CAP.
82
+ capt.
83
+ Capt.
84
+ CAPT.
85
+ com.
86
+ Com.
87
+ COM.
88
+ brig.
89
+ Brig.
90
+ BRIG.
91
+ estac.
92
+ Estac.
93
+ ESTAC.
94
+ tel.
95
+ Tel.
96
+ TEL.
97
+ ave.
98
+ Ave.
99
+ AVE.
100
+ av.
101
+ Av.
102
+ AV.
103
+ trav.
104
+ Trav.
105
+ TRAV.
106
+ con.
107
+ Con.
108
+ CON.
109
+ jd.
110
+ Jd.
111
+ JD.
112
+ ed.
113
+ Ed.
114
+ ED.
115
+ lj.
116
+ Lj.
117
+ LJ.
118
+ cj.
119
+ Cj.
120
+ CJ.
121
+ apto.
122
+ Apto.
123
+ APTO.
124
+ apt.
125
+ Apt.
126
+ APT.
127
+ ingr.
128
+ Ingr.
129
+ INGR.
130
+ ap.
131
+ Ap.
132
+ AP.
133
+ dir.
134
+ Dir.
135
+ DIR.
136
+ min.
137
+ Min.
138
+ MIN.
139
+ sec.
140
+ Sec.
141
+ SEC.
142
+ kg.
143
+ Kg.
144
+ KG.
145
+ ml.
146
+ Ml.
147
+ ML.
148
+ km.
149
+ Km.
150
+ KM.
151
+ cm.
152
+ Cm.
153
+ CM.
154
+ vol.
155
+ Vol.
156
+ VOL.
157
+ PP.
158
+ pp.
159
+ Pp
160
+ pag.
161
+ Pag
162
+ PAG.
163
+ pág.
164
+ Pág
165
+ PÁG.
166
+ al.
167
+ Al.
168
+ AL.
169
+ etc.
170
+ i.e.
171
+ e.g.
172
+ cia.
173
+ Cia.
174
+ CIA.
175
+ co.
176
+ Co.
177
+ CO.
178
+ ltda.
179
+ Ltda.
180
+ LTDA.
181
+ ex.
182
+ Ex.
183
+ EX.
184
+ ac.
185
+ Ac.
186
+ AC.
187
+ dc.
188
+ Dc.
189
+ DC.
190
+ bros.
191
+ Bros.
192
+ BROS.
193
+ pq.
194
+ Pq.
195
+ PQ.
196
+ br.
197
+ Br.
198
+ BR.
199
+ cent.
200
+ Cent.
201
+ CENT.
202
+ ft.
203
+ Ft.
204
+ FT.
205
+ net.
206
+ Net.
207
+ NET.
208
+ no.
209
+ No.
210
+ NO.
211
+ nr.
212
+ Nr.
213
+ NR.
214
+ tr.
215
+ Tr.
216
+ TR.
217
+ mi.
218
+ Mi.
219
+ MI.
220
+ sta.
221
+ Sta.
222
+ STA.
223
+ sto.
224
+ Sto.
225
+ STO.
226
+ int.
227
+ Int.
228
+ INT.
229
+ inf.
230
+ Inf.
231
+ INF.
232
+ cult.
233
+ Cult.
234
+ CULT.
235
+ op.
236
+ Op.
237
+ OP.
238
+ aprox.
239
+ Aprox.
240
+ APROX.
241
+ it.
242
+ It.
243
+ IT.
244
+ ex.
245
+ Ex.
246
+ EX.
247
+ flex.
248
+ Flex.
249
+ FLEX.
250
+ ass.
251
+ Ass.
252
+ ASS.
253
+ pç.
254
+ Pç.
255
+ PÇ.
256
+ ind.
257
+ Ind.
258
+ IND.
259
+ vl.
260
+ Vl.
261
+ VL.
262
+ imp.
263
+ Imp.
264
+ IMP.
265
+ emp.
266
+ Emp.
267
+ EMP.
268
+ esq.
269
+ Esq.
270
+ ESQ.
271
+ dir.
272
+ Dir.
273
+ DIR.
274
+ ingr.
275
+ Ingr.
276
+ INGR.
277
+ pça.
278
+ Pça.
279
+ PÇA.
280
+ art.
281
+ Art.
282
+ ART.
283
+ sec.
284
+ Sec.
285
+ SEC.
286
+ a.
287
+ A.
288
+ b.
289
+ B.
290
+ c.
291
+ C.
292
+ d.
293
+ D.
294
+ e.
295
+ E.
296
+ f.
297
+ F.
298
+ g.
299
+ G.
300
+ h.
301
+ H.
302
+ i.
303
+ I.
304
+ j.
305
+ J.
306
+ k.
307
+ K.
308
+ l.
309
+ L.
310
+ m.
311
+ M.
312
+ n.
313
+ N.
314
+ o.
315
+ O.
316
+ p.
317
+ P.
318
+ q.
319
+ Q.
320
+ r.
321
+ R.
322
+ s.
323
+ S.
324
+ t.
325
+ T.
326
+ u.
327
+ U.
328
+ v.
329
+ V.
330
+ w.
331
+ W.
332
+ x.
333
+ X.
334
+ y.
335
+ Y.
336
+ z.
337
+ Z.
338
+ seg.
339
+ ter.
340
+ qua.
341
+ qui.
342
+ sex.
343
+ sab.
344
+ sáb.
345
+ dom.
346
+ Seg.
347
+ Ter.
348
+ Qua.
349
+ Qui.
350
+ Sex.
351
+ Sab.
352
+ Sáb.
353
+ Dom.
354
+ SEG.
355
+ TER.
356
+ QUA.
357
+ QUI.
358
+ SEX.
359
+ SAB.
360
+ SÁB.
361
+ DOM.
362
+ jan.
363
+ fev.
364
+ mar.
365
+ abr.
366
+ mai.
367
+ jun.
368
+ jul.
369
+ ago.
370
+ sep.
371
+ out.
372
+ nov.
373
+ dez.
374
+ Jan.
375
+ Fev.
376
+ Mar.
377
+ Abr.
378
+ Mai.
379
+ Jun.
380
+ Jul.
381
+ Ago.
382
+ Sep.
383
+ Out.
384
+ Nov.
385
+ Dez.
386
+ JAN.
387
+ FEV.
388
+ MAR.
389
+ ABR.
390
+ MAI.
391
+ JUN.
392
+ JUL.
393
+ AGO.
394
+ SET.
395
+ OUT.
396
+ NOV.
397
+ DEZ.
portTokenizer/lexikon.py ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # class UDlexPT - the PortiLexicon-UD it reads dic files from the current directory
3
+ # - it should contain WORDmaster.txt plus the 12 tags .tsv files
4
+ #
5
+ # member functions:
6
+ # UDlexPT - the constructor
7
+ # sget(self, word): # get the entries for a word - returns a list with 3-tuples (empty if absent)
8
+ # exists(self, word): # returns True if the word exists
9
+ # pget(self, word, tag): # get the entries of a word for a specific tag - return similar to sget
10
+ # pexists(self, word, tag): # returns True if this word has at least one entry for tag
11
+ # theTags(self, word): # returns an array of all tags of a word - empty if absent of the lexicon
12
+
13
+ from os import path
14
+
15
+ class UDlexPT:
16
+ def __init__(self): # creates the lexicon
17
+ self.tags = ["ADJ", "ADP", "ADV", "AUX", "CCONJ", "DET", "INTJ", \
18
+ "NOUN", "NUM", "PRON", "SCONJ", "VERB"]
19
+ self.master = {}
20
+ self.words = 0
21
+ self.entries = 0
22
+ nEnt = [0]*len(self.tags)
23
+ nNAE = [0]*len(self.tags)
24
+ nEnD = [0]*len(self.tags)
25
+ infile = open(path.dirname(__file__)+"/WORDmaster.txt")
26
+ for line in infile:
27
+ buf = line[:-1].split(",")
28
+ tg = buf[1].split(" ")
29
+ self.master.update({buf[0]:tg})
30
+ self.words += 1
31
+ ### compute totals
32
+ if (len(tg) == 1):
33
+ nNAE[self.tags.index(tg[0])] += 1
34
+ for t in tg:
35
+ nEnt[self.tags.index(t)] += 1
36
+ infile.close()
37
+ self.t = []
38
+ i = 0
39
+ for t in self.tags:
40
+ self.t.append({})
41
+ infile = open(path.dirname(__file__)+"/"+t+".tsv")
42
+ for line in infile:
43
+ buf = line[:-1].split("\t")
44
+ entry = self.t[i].get(buf[0],"none")
45
+ if (entry == "none"):
46
+ self.t[i].update({buf[0]:[[buf[1],buf[2]]]})
47
+ else:
48
+ entry.append([buf[1],buf[2]])
49
+ self.t[i].update({buf[0]:entry})
50
+ self.entries += 1
51
+ nEnD[self.tags.index(t)] += 1
52
+ infile.close()
53
+ i += 1
54
+ print("UDlexPT read with", self.words, "distinct words and", self.entries, "entries")
55
+ print("{:5} & {:6} & {:6} & {:6} \\\\ \\hline".format("tag","total","amb","non-amb"))
56
+ accW, accN, accE = 0, 0, 0
57
+ for t in self.tags:
58
+ print("{:5} & {:6} & {:6} & {:6} & {:6} \\\\ \\hline".format(t, \
59
+ nEnt[self.tags.index(t)], \
60
+ nEnt[self.tags.index(t)]-nNAE[self.tags.index(t)], \
61
+ nNAE[self.tags.index(t)], \
62
+ nEnD[self.tags.index(t)]))
63
+ accW += nEnt[self.tags.index(t)]
64
+ accN += nNAE[self.tags.index(t)]
65
+ accE += nEnD[self.tags.index(t)]
66
+ print("{:5} & {:6} & {:6} & {:6} & {:6} \\\\ \\hline".format("total", self.words, self.words-accN, accN, accE))
67
+ def sget(self, word): # get the entries for a word
68
+ tags = self.master.get(word,"none")
69
+ if (tags == "none"):
70
+ return []
71
+ else:
72
+ ans = []
73
+ for t in tags:
74
+ a = self.t[self.tags.index(t)].get(word)
75
+ #if (a == None):
76
+ # input("fix WORDmaster for: "+word)
77
+ for n in a:
78
+ ans.append([n[0],t,n[1]])
79
+ return ans
80
+ def exists(self, word): # returns True if the word exists
81
+ tags = self.master.get(word,"none")
82
+ if (tags == "none"):
83
+ return False
84
+ else:
85
+ return True
86
+ def pget(self, word, tag): # get the entries of a word for a specific tag
87
+ a = self.t[self.tags.index(tag)].get(word,"none")
88
+ if (a == "none"):
89
+ return []
90
+ else:
91
+ ans = []
92
+ for n in a:
93
+ ans.append([n[0],tag,n[1]])
94
+ return ans
95
+ def pexists(self, word, tag): # returns True if this word has at least one entry for tag
96
+ a = self.t[self.tags.index(tag)].get(word,"none")
97
+ if (a == "none"):
98
+ return False
99
+ else:
100
+ return True
101
+ def theTags(self, word): # returns an array of all tags of a word - empty if absent of the dictionary
102
+ ts = self.master.get(word,"none")
103
+ if (ts == "none"):
104
+ return []
105
+ else:
106
+ return ts
107
+
portTokenizer/portTok.py ADDED
@@ -0,0 +1,745 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # portTokenizer - tokenizador de sentenças em Portugues para um arquivo CoNLL-U
2
+ #
3
+ # Este programa recebe um arquivo de entrada textual com uma sentença
4
+ # por linha e gera um arquivo CoNLL-U devidamente tokenizado.
5
+ #
6
+ # Este programa utiliza um léxico de Português, PortiLexicon-UD através da
7
+ # chamada da classe UDlexPT incluída no arquivo "lexikon.py" disponível
8
+ # em conjunto com este arquivo ("portTok.py") e com os arquivos textuais
9
+ # do léxico ("ADJ.tsv", "ADP.tsv", "ADV.tsv", "AUX.tsv", "CCONJ.tsv",
10
+ # "DET.tsv", "INTJ.tsv", "NOUN.tsv", "NUM.tsv", "PRON.tsv", "SCONJ.tsv",
11
+ # "VERB.tsv", "WORDmaster.txt").
12
+ #
13
+ # Opções:
14
+ #
15
+ # -h help
16
+ # -o output file
17
+ # -m matches the paired punctuations
18
+ # -t trims headlines (heuristic)
19
+ # -s sentence id (sid) model
20
+ #
21
+ # Exemplo de utilização:
22
+ #
23
+ # portTok -o sents.conllu -m -t -s S0000 sents.txt
24
+ #
25
+ # Busca as sentenças no arquivo 'sents.txt',
26
+ # corrige pontuações casadas (aspas, parenteses, etc),
27
+ # remove possíveis MANCHETES que precedem as frases,
28
+ # usa S0000 como modelo de identificador de sentença e
29
+ # salva as sentenças devidamente tokenizadas no arquivo 'sents.conllu'
30
+ #
31
+ # last edit: 01/21/2024
32
+ # created by Lucelene Lopes - lucelene@gmail.com
33
+
34
+ import sys, os
35
+ import lexikon
36
+ lex = lexikon.UDlexPT()
37
+
38
+
39
+ #################################################
40
+ ### Captura de argumentos da linha de comando
41
+ #################################################
42
+ def parseOptions(arguments):
43
+ # default options
44
+ output_file, input_file, match, trim, model = "", [], False, False, "S0000"
45
+ i = 1
46
+ while i < len(arguments):
47
+ if (arguments[i][0] == "-"):
48
+ # ajuda (help) - mostra ajuda, nada é executado
49
+ if ((arguments[i][1] == "h") and (len(arguments[i])==2)) or \
50
+ (arguments[i] == "-help"):
51
+ print("Opções:\n-h ajuda\n-o arquivo de saída", \
52
+ "-m corrige pontuações casadas (aspas, parenteses, etc)", \
53
+ "-t remove possíveis MANCHETES que precedem as frases", \
54
+ "Exemplo de utilização:", \
55
+ "portTok -o sents.conllu -m -t -s S0000 sents.txt", \
56
+ "Busca as sentenças no arquivo 'sents.txt',", \
57
+ " corrige pontuações casadas (aspas, parenteses, etc),", \
58
+ " remove possíveis MANCHETES que precedem as frases", \
59
+ " usa S0000 como modelo de identificador de sentença e"
60
+ " salva as sentenças devidamente tokenizadas no arquivo 'sents.conllu''", \
61
+ sep="\n")
62
+ return None
63
+ # opção de correção (matching) de pontuações pareadas
64
+ elif ((arguments[i][1] == "m") and (len(arguments[i])==2)) or \
65
+ (arguments[i] == "-match"):
66
+ match = True
67
+ i += 1
68
+ # opção de remoção (trim) de manchetes no início da sentença
69
+ elif ((arguments[i][1] == "t") and (len(arguments[i])==2)) or \
70
+ (arguments[i] == "-trim"):
71
+ trim = True
72
+ i += 1
73
+ # opção de modelo de identificador de sentença (sid) - 0 para sem limite
74
+ elif ((arguments[i][1] == "s") and (len(arguments[i])==2)) or \
75
+ (arguments[i] == "-sid"):
76
+ try:
77
+ model = arguments[i+1]
78
+ i += 2
79
+ except:
80
+ print("modelo de identificador de sentença não informado - assumindo S000")
81
+ i += 1
82
+ # opção de arquivo de saída (um nome de arquivo)
83
+ elif ((arguments[i][1] == "o") and (len(arguments[i])==2)) or \
84
+ (arguments[i] == "-output"):
85
+ output_file = arguments[i+1]
86
+ i += 2
87
+ # opções inválidas - nada é executado
88
+ else:
89
+ print("Opção {} inválida, demais opções ignoradas, por favor execute novamente".format(arguments[i]))
90
+ return None
91
+ # arquivo de entrada - só é incluído se existir
92
+ else:
93
+ if (os.path.isfile(arguments[i])):
94
+ input_file = arguments[i]
95
+ i += 1
96
+ else:
97
+ print("O arquivo {} não foi encontrado, por favor execute novamente".format(arguments[i]))
98
+ return None
99
+ return [output_file, input_file, match, trim, model]
100
+
101
+ #############################################################################
102
+ # Increment a name index
103
+ #############################################################################
104
+ def nextName(name):
105
+ # increment the digits from right to left
106
+ ans = ""
107
+ while name != "":
108
+ digit, name = name[-1], name[:-1]
109
+ if digit == "9":
110
+ ans = "0" + ans
111
+ elif digit == "8":
112
+ ans = "9" + ans
113
+ return name+ans
114
+ elif digit == "7":
115
+ ans = "8" + ans
116
+ return name+ans
117
+ elif digit == "6":
118
+ ans = "7" + ans
119
+ return name+ans
120
+ elif digit == "5":
121
+ ans = "6" + ans
122
+ return name+ans
123
+ elif digit == "4":
124
+ ans = "5" + ans
125
+ return name+ans
126
+ elif digit == "3":
127
+ ans = "4" + ans
128
+ return name+ans
129
+ elif digit == "2":
130
+ ans = "3" + ans
131
+ return name+ans
132
+ elif digit == "1":
133
+ ans = "2" + ans
134
+ return name+ans
135
+ elif digit == "0":
136
+ ans = "1" + ans
137
+ return name+ans
138
+ else:
139
+ ans = "1" + ans
140
+ return name+ans
141
+ return "overflow"+ans
142
+
143
+ #############################################################################
144
+ # Trim the unwanted bits at the sentence - trimIt (step 1)
145
+ #############################################################################
146
+ def trimIt(s):
147
+ # generate the bits separated by blanks trimming blanks before, after, and multiples
148
+ bits = s.strip().replace(" ", " ").replace(" ", " ").split(" ")
149
+ start = 0
150
+ # remove itemize symbols
151
+ if (bits[0] in ["*", "★", "-", "—", "–", ">", "."]):
152
+ if (len(bits) == 1):
153
+ return ""
154
+ else:
155
+ start = 1
156
+ # remove (BELO HORIZONTE) ... kind
157
+ if (bits[start][0] == "(") and (bits[-1][-1] != ")"):
158
+ for i in range(len(bits)):
159
+ if (bits[i][-1] == ")"):
160
+ start = i+1
161
+ break
162
+ # remove CRONOLOGIA .... kind
163
+ i = start
164
+ while (i<len(bits)):
165
+ if (bits[i].isupper()):
166
+ start = i
167
+ i += 1
168
+ else:
169
+ break
170
+ if ((len(bits[start]) > 1) and (bits[start].isupper())) and \
171
+ (start+1 < len(bits)): # make sure the next after all upper
172
+ if (bits[start+1][0].isupper()): # is not a beginning of sentence
173
+ start += 1
174
+ ans = bits[start]
175
+ for i in range(start+1,len(bits)):
176
+ ans += " "+bits[i]
177
+ return ans
178
+
179
+ #############################################################################
180
+ # Clear matching punctuations - punctIt (step 2)
181
+ #############################################################################
182
+ def punctIt(s):
183
+ def notAlpha(sent):
184
+ ans = True
185
+ for c in sent:
186
+ if c.isalpha():
187
+ ans = False
188
+ break
189
+ return ans
190
+ doubleQuotes = s.count('"')
191
+ singleQuotes = s.count("'")
192
+ openParentes = s.count("(")
193
+ closParentes = s.count(")")
194
+ openBrackets = s.count("[")
195
+ closBrackets = s.count("]")
196
+ openCurBrace = s.count("{")
197
+ closCurBrace = s.count("}")
198
+ openAligator = s.count("<")
199
+ closAligator = s.count(">")
200
+ if ((doubleQuotes == 2 ) and (s[0] == '"') and (s[-1] == '"')) or \
201
+ ((singleQuotes == 2 ) and (s[0] == "'") and (s[-1] == "'")) or \
202
+ ((openParentes == 1 ) and (closParentes == 1 ) and (s[0] == "(") and (s[-1] == ")")) or \
203
+ ((openBrackets == 1 ) and (closBrackets == 1 ) and (s[0] == "[") and (s[-1] == "]")) or \
204
+ ((openCurBrace == 1 ) and (closCurBrace == 1 ) and (s[0] == "{") and (s[-1] == "}")) or \
205
+ ((openAligator == 1 ) and (closAligator == 1 ) and (s[0] == "<") and (s[-1] == ">")):
206
+ S = s[1:-1]
207
+ else:
208
+ S = s
209
+ if (doubleQuotes % 2 != 0):
210
+ S = S.replace('"', '')
211
+ if (singleQuotes % 2 != 0):
212
+ S = S.replace("'", "")
213
+ if (openParentes != closParentes):
214
+ S = S.replace("(", "").replace(")", "")
215
+ if (openBrackets != closBrackets):
216
+ S = S.replace("[", "").replace("]", "")
217
+ if (openCurBrace != closCurBrace):
218
+ S = S.replace("{", "").replace("}", "")
219
+ if (openAligator != closAligator):
220
+ S = S.replace("<", "").replace(">", "")
221
+ if (S == "") or (notAlpha(S)):
222
+ return ""
223
+ elif (S[-2:] == "..") and S[-3:] != "...":
224
+ S = S[:-2]+"."
225
+ elif (S[-2:] in [":.", ";."]):
226
+ S = S[:-2]+"."
227
+ elif (S[-1] not in [".", "!", "?", ":", ";"]):
228
+ if (S[-1] in ["'", '"', ")", "]", "}", ">"]) and (S[-2] in [".", "!", "?", ":", ";"]):
229
+ S = S[:-2]+S[-1]+S[-2]
230
+ else:
231
+ S = S+"."
232
+ return S.replace(" ", " ").replace(" ", " ")
233
+
234
+ #############################################################################
235
+ # Decide if ambiguous tokens are contracted or not - desambIt (within step 3)
236
+ #############################################################################
237
+ def desambIt(token, bits, i, lastField, s, SID, tokens):
238
+ def stripWord(w):
239
+ start, end = 0, len(w)
240
+ for j in range(len(w)):
241
+ if (not w[j].isalpha()):
242
+ start = j+1
243
+ else:
244
+ break
245
+ for j in range(start,len(w)):
246
+ if (not w[j].isalpha()):
247
+ end = j
248
+ break
249
+ return w[start:end].lower()
250
+ # nos - em os - nos
251
+ if (token.lower() == "nos"):
252
+ if (i > 0):
253
+ preVERB = lex.pexists(stripWord(bits[i-1]), "VERB") or lex.pexists(stripWord(bits[i-1]), "AUX")
254
+ else:
255
+ preVERB = False
256
+ if (i < len(bits)-1):
257
+ posVERB = lex.pexists(stripWord(bits[i+1]), "VERB") or lex.pexists(stripWord(bits[i+1]), "AUX")
258
+ posNOUNDET = lex.pexists(stripWord(bits[i+1]), "NOUN") or lex.pexists(stripWord(bits[i+1]), "ADJ") or lex.pexists(stripWord(bits[i+1]), "DET")
259
+ if (posNOUNDET):
260
+ possible = lex.pget(stripWord(bits[i+1]), "NOUN")+lex.pget(stripWord(bits[i+1]), "ADJ")+lex.pget(stripWord(bits[i+1]), "DET")
261
+ agree = False
262
+ for feats in possible:
263
+ if ("Number=Sing" not in feats[2]) and ("Gender=Fem" not in feats[2]):
264
+ agree = True
265
+ break
266
+ if (not agree):
267
+ posNOUNDET = False
268
+ else:
269
+ posVERB = False
270
+ posNOUNDET = False
271
+ if (posVERB and not posNOUNDET):
272
+ tokens.append([token, lastField]) # don't break
273
+ else:
274
+ tokens.append([token, "c"+lastField]) # break
275
+ if (token.isupper()):
276
+ tokens.append(["EM","_"])
277
+ tokens.append(["OS","_"])
278
+ elif (token[0].isupper()):
279
+ tokens.append(["Em","_"])
280
+ tokens.append(["os","_"])
281
+ else:
282
+ tokens.append(["em","_"])
283
+ tokens.append(["os","_"])
284
+ # consigo - com si - consigo
285
+ elif (token.lower() == "consigo"):
286
+ if (i > 0):
287
+ prePRONADV = lex.pexists(stripWord(bits[i-1]), "PRON") or lex.pexists(stripWord(bits[i-1]), "ADV")
288
+ else:
289
+ prePRONADV = False
290
+ if (i < len(bits)-1):
291
+ posVERB = lex.pexists(stripWord(bits[i+1]), "VERB") or lex.pexists(stripWord(bits[i+1]), "AUX")
292
+ else:
293
+ posVERB = False
294
+ if (i < len(bits)-2):
295
+ doQue = ((bits[i+1] == "do") and (bits[i+2] == "que")) or ((bits[i+1] == "sua"))
296
+ else:
297
+ doQue = False
298
+ if ((prePRONADV) or (posVERB)) and (not doQue):
299
+ tokens.append([token, lastField]) # don't break
300
+ else:
301
+ tokens.append([token, "c"+lastField]) # break
302
+ if (token.isupper()):
303
+ tokens.append(["COM","_"])
304
+ tokens.append(["SI","_"])
305
+ elif (token[0].isupper()):
306
+ tokens.append(["Com","_"])
307
+ tokens.append(["si","_"])
308
+ else:
309
+ tokens.append(["com","_"])
310
+ tokens.append(["si","_"])
311
+ # pra - para a - para
312
+ elif (token.lower() == "pra"):
313
+ if (i < len(bits)-1):
314
+ posNOUNDET = lex.pexists(stripWord(bits[i+1]), "NOUN") or lex.pexists(stripWord(bits[i+1]), "ADJ") or lex.pexists(stripWord(bits[i+1]), "DET")
315
+ if (posNOUNDET):
316
+ possible = lex.pget(stripWord(bits[i+1]), "NOUN")+lex.pget(stripWord(bits[i+1]), "ADJ")+lex.pget(stripWord(bits[i+1]), "DET")
317
+ agree = False
318
+ for feats in possible:
319
+ if ("Number=Plur" not in feats[2]) and ("Gender=Masc" not in feats[2]):
320
+ agree = True
321
+ break
322
+ if (not agree):
323
+ posNOUNDET = False
324
+ else:
325
+ posNOUNDET = False
326
+ if (posNOUNDET):
327
+ tokens.append([token, "c"+lastField]) # break
328
+ if (token.isupper()):
329
+ tokens.append(["PARA","_"])
330
+ tokens.append(["A","_"])
331
+ elif (token[0].isupper()):
332
+ tokens.append(["Para","_"])
333
+ tokens.append(["a","_"])
334
+ else:
335
+ tokens.append(["para","_"])
336
+ tokens.append(["a","_"])
337
+ else:
338
+ tokens.append([token, lastField]) # don't break
339
+ # pela - por a - pela
340
+ elif (token.lower() == "pela"):
341
+ if (i < len(bits)-1):
342
+ posNOUNDET = lex.pexists(stripWord(bits[i+1]), "NOUN") or lex.pexists(stripWord(bits[i+1]), "ADJ") or lex.pexists(stripWord(bits[i+1]), "NUM") or lex.pexists(stripWord(bits[i+1]), "DET")
343
+ properNOUNDIGIT = bits[i+1][0].isupper() or bits[i+1][0].isnumeric()
344
+ else:
345
+ posNOUNDET = False
346
+ properNOUNDIGIT = False
347
+ if (posNOUNDET) or (properNOUNDIGIT):
348
+ tokens.append([token, "c"+lastField]) # break
349
+ if (token.isupper()):
350
+ tokens.append(["POR","_"])
351
+ tokens.append(["A","_"])
352
+ elif (token[0].isupper()):
353
+ tokens.append(["Por","_"])
354
+ tokens.append(["a","_"])
355
+ else:
356
+ tokens.append(["por","_"])
357
+ tokens.append(["a","_"])
358
+ else:
359
+ tokens.append([token, lastField]) # don't break
360
+ # pelas - por as - pelas
361
+ elif (token.lower() == "pelas"):
362
+ if (i < len(bits)-1):
363
+ posNOUNDET = lex.pexists(stripWord(bits[i+1]), "NOUN") or lex.pexists(stripWord(bits[i+1]), "ADJ") or lex.pexists(stripWord(bits[i+1]), "NUM") or lex.pexists(stripWord(bits[i+1]), "DET")
364
+ properNOUNDIGIT = bits[i+1][0].isupper() or bits[i+1][0].isnumeric()
365
+ else:
366
+ posNOUNDET = False
367
+ properNOUNDIGIT = False
368
+ if (posNOUNDET) or (properNOUNDIGIT):
369
+ tokens.append([token, "c"+lastField]) # break
370
+ if (token.isupper()):
371
+ tokens.append(["POR","_"])
372
+ tokens.append(["AS","_"])
373
+ elif (token[0].isupper()):
374
+ tokens.append(["Por","_"])
375
+ tokens.append(["as","_"])
376
+ else:
377
+ tokens.append(["por","_"])
378
+ tokens.append(["as","_"])
379
+ else:
380
+ tokens.append([token, lastField]) # don't break
381
+ # pelo - por o - pelo
382
+ elif (token.lower() == "pelo"):
383
+ if (i > 0):
384
+ preART = lex.pexists(stripWord(bits[i-1]), "DET")
385
+ if (preART):
386
+ possible = lex.pget(stripWord(bits[i-1]), "DET")
387
+ agree = False
388
+ for feats in possible:
389
+ if ("Number=Plur" not in feats[2]) and ("Gender=Fem" not in feats[2]):
390
+ agree = True
391
+ break
392
+ if (not agree):
393
+ preART = False
394
+ else:
395
+ preART = (stripWord(bits[i-1]) != "que") and (stripWord(bits[i-1]) != "dado") and (stripWord(bits[i-1]) != "tanto") and (stripWord(bits[i-1]) != "quanto") and (stripWord(bits[i-1]) != "mais")
396
+ else:
397
+ preART = False
398
+ if (i < len(bits)-1):
399
+ posNOUNDET = lex.pexists(stripWord(bits[i+1]), "NOUN") or lex.pexists(stripWord(bits[i+1]), "ADJ") or lex.pexists(stripWord(bits[i+1]), "DET")
400
+ posLower = not bits[i+1][0].isupper()
401
+ if (posNOUNDET):
402
+ possible = lex.pget(stripWord(bits[i+1]), "NOUN")+lex.pget(stripWord(bits[i+1]), "ADJ")+lex.pget(stripWord(bits[i+1]), "DET")
403
+ agree = False
404
+ for feats in possible:
405
+ if ("Number=Plur" not in feats[2]) and ("Gender=Fem" not in feats[2]):
406
+ agree = True
407
+ break
408
+ if (not agree):
409
+ posNOUNDET = False
410
+ else:
411
+ posNOUNDET = False
412
+ posLower = True
413
+ if (preART) and (not posNOUNDET) and (posLower):
414
+ tokens.append([token, lastField]) # don't break
415
+ else:
416
+ tokens.append([token, "c"+lastField]) # break
417
+ if (token.isupper()):
418
+ tokens.append(["POR","_"])
419
+ tokens.append(["O","_"])
420
+ elif (token[0].isupper()):
421
+ tokens.append(["Por","_"])
422
+ tokens.append(["o","_"])
423
+ else:
424
+ tokens.append(["por","_"])
425
+ tokens.append(["o","_"])
426
+ # pelos - por os - pelos
427
+ elif (token.lower() == "pelos"):
428
+ if (i > 0):
429
+ preART = lex.pexists(stripWord(bits[i-1]), "DET")
430
+ if (preART):
431
+ possible = lex.pget(stripWord(bits[i-1]), "DET")
432
+ agree = False
433
+ for feats in possible:
434
+ if ("Number=Sing" not in feats[2]) and ("Gender=Fem" not in feats[2]) and ("PronType=Art" in feats[2]):
435
+ agree = True
436
+ break
437
+ if (not agree):
438
+ preART = False
439
+ else:
440
+ preART = (stripWord(bits[i-1]) != "que") and (stripWord(bits[i-1]) != "dado") and (stripWord(bits[i-1]) != "tanto") and (stripWord(bits[i-1]) != "quanto") and (stripWord(bits[i-1]) != "mais")
441
+ else:
442
+ preART = False
443
+ if (i < len(bits)-1):
444
+ posNOUNDET = lex.pexists(stripWord(bits[i+1]), "NOUN") or lex.pexists(stripWord(bits[i+1]), "ADJ") or lex.pexists(stripWord(bits[i+1]), "DET")
445
+ posLower = not bits[i+1][0].isupper()
446
+ if (posNOUNDET):
447
+ possible = lex.pget(stripWord(bits[i+1]), "NOUN")+lex.pget(stripWord(bits[i+1]), "ADJ")+lex.pget(stripWord(bits[i+1]), "DET")
448
+ agree = False
449
+ for feats in possible:
450
+ if ("Number=Sing" not in feats[2]) and ("Gender=Fem" not in feats[2]) and ("PronType=Art" in feats[2]):
451
+ agree = True
452
+ break
453
+ if (not agree):
454
+ posNOUNDET = False
455
+ else:
456
+ posNOUNDET = False
457
+ posLower = True
458
+ if (preART) and (not posNOUNDET) and (posLower):
459
+ tokens.append([token, lastField]) # don't break
460
+ else:
461
+ tokens.append([token, "c"+lastField]) # break
462
+ if (token.isupper()):
463
+ tokens.append(["POR","_"])
464
+ tokens.append(["OS","_"])
465
+ elif (token[0].isupper()):
466
+ tokens.append(["Por","_"])
467
+ tokens.append(["os","_"])
468
+ else:
469
+ tokens.append(["por","_"])
470
+ tokens.append(["os","_"])
471
+
472
+ #############################################################################
473
+ # Tokenizing - tokenizeIt (step 3)
474
+ #############################################################################
475
+ def tokenizeIt(s, SID, outfile):
476
+ removable = ["'", '"', "(", ")", "[", "]", "{", "}", "<", ">", \
477
+ "!", "?", ",", ";", ":", "=", "+", "*", "★", "|", "/", "\\", \
478
+ "&", "^", "_", "`", "'", "~", "%"]
479
+ ignored = ["@", "#"]
480
+ digits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
481
+ contracts = {"à":["a","a"],
482
+ "às":["a","as"],
483
+ "ao":["a", "o"],
484
+ "aos":["a", "os"],
485
+ "àquela":["a", "aquela"],
486
+ "àquelas":["a", "aquelas"],
487
+ "àquele":["a", "aquele"],
488
+ "àqueles":["a", "aqueles"],
489
+ "comigo":["com", "mim"],
490
+ "contigo":["com", "ti"],
491
+ "consigo":["com", "si"],
492
+ "conosco":["com", "nós"],
493
+ "convosco":["com", "vós"],
494
+ "da":["de", "a"],
495
+ "das":["de", "as"],
496
+ "do":["de", "o"],
497
+ "dos":["de", "os"],
498
+ "dali":["de", "ali"],
499
+ "daqui":["de", "aqui"],
500
+ "daí":["de", "aí"],
501
+ "desta":["de", "esta"],
502
+ "destas":["de", "estas"],
503
+ "deste":["de", "este"],
504
+ "destes":["de", "estes"],
505
+ "dessa":["de", "essa"],
506
+ "dessas":["de", "essas"],
507
+ "desse":["de", "esse"],
508
+ "desses":["de", "esses"],
509
+ "daquela":["de", "aquela"],
510
+ "daquelas":["de", "aquelas"],
511
+ "daquele":["de", "aquele"],
512
+ "daqueles":["de", "aqueles"],
513
+ "disto":["de", "isto"],
514
+ "disso":["de", "isso"],
515
+ "daquilo":["de", "aquilo"],
516
+ "dela":["de", "ela"],
517
+ "delas":["de", "elas"],
518
+ "dele":["de", "ele"],
519
+ "deles":["de", "eles"],
520
+ "doutra":["de", "outra"],
521
+ "doutras":["de", "outras"],
522
+ "doutro":["de", "outro"],
523
+ "doutros":["de", "outros"],
524
+ "dum":["de", "um"],
525
+ "duns":["de", "uns"],
526
+ "duma":["de", "uma"],
527
+ "dumas":["de", "umas"],
528
+ "na":["em", "a"],
529
+ "nas":["em", "as"],
530
+ "no":["em", "o"],
531
+ "nos":["em", "os"],
532
+ "nesta":["em", "esta"],
533
+ "nestas":["em", "estas"],
534
+ "neste":["em", "este"],
535
+ "nestes":["em", "estes"],
536
+ "nessa":["em", "essa"],
537
+ "nessas":["em", "essas"],
538
+ "nesse":["em", "esse"],
539
+ "nesses":["em", "esses"],
540
+ "naquela":["em", "aquela"],
541
+ "naquelas":["em", "aquelas"],
542
+ "naquele":["em", "aquele"],
543
+ "naqueles":["em", "aqueles"],
544
+ "nisto":["em", "isto"],
545
+ "nisso":["em", "isso"],
546
+ "naquilo":["em", "aquilo"],
547
+ "nela":["em", "ela"],
548
+ "nelas":["em", "elas"],
549
+ "nele":["em", "ele"],
550
+ "neles":["em", "eles"],
551
+ "noutra":["em", "outra"],
552
+ "noutras":["em", "outras"],
553
+ "noutro":["em", "outro"],
554
+ "noutros":["em", "outros"],
555
+ "num":["em", "um"],
556
+ "nuns":["em", "uns"],
557
+ "numa":["em", "uma"],
558
+ "numas":["em", "umas"],
559
+ "pela":["por", "a"],
560
+ "pelas":["por", "as"],
561
+ "pelo":["por", "o"],
562
+ "pelos":["por", "os"],
563
+ "pra":["para", "a"],
564
+ "pras":["para", "as"],
565
+ "pro":["para", "o"],
566
+ "pros":["para", "os"],
567
+ "prum":["para", "um"],
568
+ "pruns":["para", "uns"],
569
+ "pruma":["para", "uma"],
570
+ "prumas":["para", "umas"]}
571
+ ambigous = ["nos", "consigo", "pra", "pela", "pelas", "pelo", "pelos"]
572
+ # ambigous = ["nos", "consigo", "pra", "pelo", "pelos"]
573
+ enclisis = ['me', 'te', 'se', 'lhe', 'o', 'a', 'nos', 'vos', 'lhes', 'os', 'as', 'lo', 'la', 'los', 'las']
574
+ terminations = ["ia", "ias", "as", "iamos", "ieis", "iam", "ei", "as", "a", "emos", "eis", "ão"]
575
+ tokens = []
576
+ bits = s.split(" ")
577
+ k = 0
578
+ for b in bits:
579
+ # deal with the pre (before) middle
580
+ pre = []
581
+ changed = True
582
+ while (changed) and (len(b) > 1):
583
+ changed = False
584
+ if (b[0] in removable) or ((b[0] == "$") and (b[1] in digits)) or ((b[0] == "-") and (b[1] not in digits)):
585
+ pre.append(b[0])
586
+ b = b[1:]
587
+ changed = True
588
+ # deal with the pos (after) middle
589
+ tmp = []
590
+ changed = True
591
+ while (changed) and (len(b) > 1):
592
+ changed = False
593
+ if (b[-1] in removable+["-"]):
594
+ tmp.append(b[-1])
595
+ b = b[:-1]
596
+ changed = True
597
+ pos = []
598
+ reticent = ""
599
+ for i in range(len(tmp)-1, -1, -1):
600
+ if (tmp[i] == "."):
601
+ if (reticent == ""):
602
+ reticent = "."
603
+ elif (reticent == "."):
604
+ reticent = ".."
605
+ elif (reticent == ".."):
606
+ pos.append("...")
607
+ reticent = ""
608
+ else:
609
+ if (reticent != ""):
610
+ pos.append(reticent)
611
+ reticent = ""
612
+ pos.append(tmp[i])
613
+ if (reticent != ""):
614
+ pos.append(reticent)
615
+ # deal with the middle
616
+ buf = b.split("-")
617
+ if (len(buf) == 1):
618
+ parts = pre+[b]+pos
619
+ # enclisis
620
+ elif (len(buf) == 2) and (buf[1] in enclisis):
621
+ if (buf[0][-1] == "á"):
622
+ parts = pre+["*^*"+b, buf[0][:-1]+"ar", buf[1]]+pos
623
+ elif (buf[0][-1] == "ê"):
624
+ parts = pre+["*^*"+b, buf[0][:-1]+"er", buf[1]]+pos
625
+ elif (buf[0][-1] == "í"):
626
+ parts = pre+["*^*"+b, buf[0][:-1]+"ir", buf[1]]+pos
627
+ elif (buf[0][-1] == "ô"):
628
+ parts = pre+["*^*"+b, buf[0][:-1]+"or", buf[1]]+pos
629
+ else:
630
+ parts = pre+["*^*"+b, buf[0], buf[1]]+pos
631
+ # mesoclisis - type I (e.g. dar-lo-ia)
632
+ elif (len(buf) == 3) and (buf[1] in enclisis) \
633
+ and (buf[0][-1] == "r") and (buf[3] in [terminations]):
634
+ parts = pre+["*^*"+b, buf[0]+buf[3], buf[1]]+pos
635
+ # mesoclisis - type II (e.g. dá-lo-ia)
636
+ elif (len(buf) == 3) and (buf[1] in enclisis) \
637
+ and (buf[0][-1] in ["á", "ê", "í", "ô"]) and (buf[3] in [terminations]):
638
+ if (buf[0][-1] == "á"):
639
+ parts = pre+["*^*"+b, buf[0][:-1]+"ar"+buf[3], buf[1]]+pos
640
+ elif (buf[0][-1] == "ê"):
641
+ parts = pre+["*^*"+b, buf[0][:-1]+"er"+buf[3], buf[1]]+pos
642
+ elif (buf[0][-1] == "í"):
643
+ parts = pre+["*^*"+b, buf[0][:-1]+"ir"+buf[3], buf[1]]+pos
644
+ elif (buf[0][-1] == "ô"):
645
+ parts = pre+["*^*"+b, buf[0][:-1]+"or"+buf[3], buf[1]]+pos
646
+ else:
647
+ parts = pre+[b]+pos
648
+ # transform parts into tokens to be added
649
+ i = 0
650
+ while (i < len(parts)):
651
+ if (i == len(parts)-1):
652
+ lastField = "_"
653
+ else:
654
+ lastField = "SpaceAfter=No"
655
+ if (parts[i][:3] == "*^*"):
656
+ if (i+3 == len(parts)):
657
+ tokens.append([parts[i][3:], "c_"])
658
+ else:
659
+ tokens.append([parts[i][3:], "cSpaceAfter=No"])
660
+ i += 1
661
+ tokens.append([parts[i], "_"])
662
+ i += 1
663
+ tokens.append([parts[i], "_"])
664
+ elif (parts[i] not in ambigous):
665
+ ans = contracts.get(parts[i].lower())
666
+ if (ans == None):
667
+ tokens.append([parts[i], lastField])
668
+ else:
669
+ tokens.append([parts[i], "c"+lastField])
670
+ if (parts[i].isupper()):
671
+ tokens.append([ans[0].upper(),"_"])
672
+ tokens.append([ans[1].upper(),"_"])
673
+ elif (parts[i][0].isupper()):
674
+ tokens.append([ans[0][0].upper()+ans[0][1:],"_"])
675
+ tokens.append([ans[1],"_"])
676
+ else:
677
+ tokens.append([ans[0],"_"])
678
+ tokens.append([ans[1],"_"])
679
+ else:
680
+ desambIt(parts[i], bits, k, lastField, s, SID, tokens)
681
+ i += 1
682
+ k += 1
683
+ # output the sentence with all the tokens
684
+ print("# sent_id =", SID, file=outfile)
685
+ print("# text =", s, file=outfile)
686
+ ## printout tokens
687
+ toks = 0
688
+ for i in range(len(tokens)):
689
+ if (tokens[i][1][0] != "c"):
690
+ toks += 1
691
+ print(str(toks), tokens[i][0], "_", "_", "_", "_", "_", "_", "_", tokens[i][1], sep="\t", file=outfile)
692
+ else:
693
+ # contracted word
694
+ print(str(toks+1)+"-"+str(toks+2), tokens[i][0], "_", "_", "_", "_", "_", "_", "_", tokens[i][1][1:], sep="\t", file=outfile)
695
+ print(file=outfile)
696
+ return(toks)
697
+
698
+ #################################################
699
+ ### Deal with a sentence, clean it, if required, then tokenize it
700
+ #################################################
701
+ def dealWith(outfile, sent, SID, match, trim):
702
+ if (trim):
703
+ sent = trimIt(sent)
704
+ if (match):
705
+ sent = punctIt(sent)
706
+ if (sent != ""):
707
+ return 1, tokenizeIt(sent, SID, outfile)
708
+ else:
709
+ return 0, 0
710
+
711
+ #################################################
712
+ ### função principal do programa - busca argumentos e chama 'tokenize' para cada sentença da entrada
713
+ #################################################
714
+ def portTok():
715
+ if (len(sys.argv) == 1):
716
+ arguments = ["lix.conllu", "sents2.txt", True, True, "S0000"]
717
+ # arguments = ["sents.conllu", "sents.txt", True, True, "S0000"]
718
+ print("Assumindo default: 'sents.conllu' como arquivo de saída, 'sents.txt' como arquivo de entrada, correções, remoções e S0000 como sid.")
719
+ else:
720
+ arguments = parseOptions(sys.argv)
721
+ if (arguments != None):
722
+ if (arguments[0] == ""):
723
+ print("Assumindo 'sents.conllu' como arquivo de saída")
724
+ arguments[0] = 'sents.conllu'
725
+ if (arguments[1] == []):
726
+ print("Arquivo de entrada inválido - por favor corrija e tente novamente")
727
+ else:
728
+ outfile = open(arguments[0], "w")
729
+ print("# newdoc id = {}\n# newpar".format(arguments[0]), file=outfile)
730
+ infile = open(arguments[1], "r")
731
+ SID = arguments[4]
732
+ sTOTAL, tTOTAL = 0, 0
733
+ for line in infile:
734
+ SID = nextName(SID)
735
+ s, t = dealWith(outfile, line[:-1], SID, arguments[2], arguments[3])
736
+ if (s == 1):
737
+ sTOTAL += 1
738
+ tTOTAL += t
739
+ outfile.close()
740
+ infile.close()
741
+ print("Tokenização terminada com {} sentenças extraídas ({} tokens) e salvas em {}".format(sTOTAL, tTOTAL, arguments[0]))
742
+ else:
743
+ print("Problemas com parâmetros - por favor corrija e tente novamente")
744
+
745
+ portTok()
portTokenizer/sents.conllu ADDED
The diff for this file is too large to render. See raw diff
 
portTokenizer/sents.txt ADDED
@@ -0,0 +1,284 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Com a possibilidade de uma condenação impedir sua candidatura em 2018, o ex-presidente Luiz Inácio Lula da Silva fez, nesta segunda (9), um discurso inflamado contra a Lava Jato, no qual disse saber que está "lascado", exigiu um pedido de desculpas do juiz Sergio Moro e afirmou que, mesmo fora da disputa pelo Planalto, será um cabo eleitoral expressivo para a sucessão de Michel Temer.
2
+ Segundo o petista, réu em sete ações penais, o objetivo de Moro é impedir sua candidatura no ano que vem, desidratando-o, inclusive, no apoio a um nome alternativo, como o do ex-prefeito de São Paulo Fernando Haddad (PT), caso ele não possa concorrer à Presidência.
3
+ "Eu sei que tô lascado, todo dia tem um processo.
4
+ Eu não quero nem que Moro me absolva, eu só quero que ele peça desculpas", disse Lula durante um seminário sobre educação em Brasília.
5
+ "Eles [investigadores] chegam a dizer:
6
+ 'Ah, se o Lula não for candidato, ele não vai ter força como cabo eleitoral'.
7
+ Testem", completou o petista.
8
+ Para o ex-presidente, Moro usou "mentiras contadas pela Polícia Federal e pelo Ministério Público" para julgá-lo e condená-lo a nove anos e seis meses de prisão pelo caso do tríplex em Guarujá (SP).
9
+ O ex-presidente disse ainda não ter "medo" dos investigadores que, de acordo com ele, estão acostumados a "mexer com deputados e senadores" que temem as apurações.
10
+ "Eu quero que eles saibam o seguinte: se eles estão acostumados a lidar com deputado que tem medo deles, a mexer com senadores que têm medo deles, quero dizer que tenho respeito profundo por quem me respeita, pelas leis que nós ajudamos a criar, mas não tenho respeito por quem não me respeita e eles não me respeitaram", afirmou o petista.
11
+ De acordo com aliados, Lula não gosta de discutir, mesmo que nos bastidores, a chance de não ser candidato ao Planalto e a projeção do nome de Haddad como plano B do PT tem incomodado os mais próximos ao ex-presidente.
12
+ O ex-prefeito, que estava no evento nesta segunda, fez um discurso rápido, de menos de dez minutos, em que encerrou dizendo esperar que Lula assuma a Presidência em 2019.
13
+ "Espero que dia 1º de janeiro de 2019 esse pesadelo chamado Temer acabe e o senhor assuma a Presidência da República", disse Haddad.
14
+ 'DEMÔNIO DO MERCADO' Lula voltou a fazer um discurso mais agressivo em relação ao mercado e disse que "não tem cara de demônio", mas quer que o respeitem "como se fosse".
15
+ "Não tenho cara de demônio, mas quero que eles me respeitem como se eu fosse, porque eles sabem que a economia não vai ficar subordinada ao elitismo da sociedade brasileira", disse o ex-presidente.
16
+ O petista rivalizou ainda com o deputado Jair Bolsonaro (PSC-RJ), segundo colocado nas últimas pesquisas empatado com Marina Silva, e disse que se ele "agrada ao mercado", o PT tem que "desagradar".
17
+ A Folha publicou nesta segunda (9) reportagem em que mostrou que o deputado ensaia movimento ao centro no debate econômico, adotando um discurso simpático aos investidores do mercado financeiro.
18
+ Para Oumou Sangaré, cantora e ativista malinesa, o sofrimento da mulher é universal.
19
+ "Canto com todas as minhas forças e vejo mulheres chorando ao meu redor", disse durante um encontro na Casa da Cultura de Paraty, no Rio de Janeiro, neste domingo (8).
20
+ Herdeira da tradição musical de sua família -sua avó foi uma "grande estrela" do país africano-, ela conta que começou a cantar na rua para ajudar nas finanças de casa após o divórcio dos pais, que deixou seis filhos dependentes de sua mãe, também cantora.
21
+ "Eu vi uma mulher que sofria para se defender sozinha e alimentar os filhos e às vezes isso era muito duro, tinha dias em que ela se retirava no quarto para chorar", recorda.
22
+ Ela conta que o desejo de fazer a mãe feliz a incentivou, inclusive, a abandonar os estudos para se dedicar à música.
23
+ Ainda que seu canto fosse as dores da matriarca, Sangaré conta ter percebido que as mulheres que a ouviam também se viam decifradas nele.
24
+ "Quando uma mulher dá à luz, ela está entre a vida e a morte, mas ela o faz para que o mundo engrandeça, por que esse mesmo mundo não pode encarar os problemas dela?", questiona.
25
+ "É por isso que decidi ser escrava de todas as mulheres que sofrem."
26
+ Sangaré, que se diz uma "muçulmana relax", tornou-se uma notória ativista na luta pela igualdade de gêneros, batalhando contra a circuncisão feminina e o casamento e a poligamia compulsórios -sem contar seu trabalho com a ONU pela erradicação da fome em países africanos.
27
+ Com o discurso de empoderamento pelo trabalho -"desenvolvam-se e sejam úteis para sua família e seu país", ela repete com frequência-, resolveu dar o exemplo, criando uma rede hoteleira e uma concessionária de carros e plantando milho, cebola e laranja.
28
+ Os aspectos que moldaram a história de Sangaré estão impressos nos títulos de seus álbuns.
29
+ Além do que leva o seu nome, "Moussolou", o de estreia, significa "mulher";
30
+ "Ko Sira", "o casamento de hoje";
31
+ "Worotan", "preço por uma noiva";
32
+ "Seya", "alegria";
33
+ "Kounadia", "a boa estrela".
34
+ TRADIÇÃO SONORA Foi o mais recente, "Mogoya" (as pessoas da atualidade), que a cantora apresentou em Paraty, neste sábado (7), como parte da programação do Mimo Festival -o evento, gratuito, reuniu cerca de 25 mil pessoas com suas atrações gratuitas durante o fim de semana.
35
+ Com letras em bambara, um dos diversos idiomas de Mali, Sangaré se consagrou como ícone do wassoulou, estilo musical derivado do folclore de uma região homônima da África Ocidental.
36
+ No repertório que trouxe para cá, ela mistura o ritmo com batidas eletrônicas e conta que a atualização tinha como intuito atingir novas gerações e público do mercado global.
37
+ A cantora mostrou a potência de sua voz, amparada por uma banda parte africana e parte europeia que incluía um kamale ngoni -instrumento típico do wassoulou semelhante a um berimbau e moldado com uma cabaça- e uma dupla de backing vocals hipnotizantes.
38
+ Três reportagens da Folha foram vencedoras do Prêmio Petrobras de Jornalismo, anunciado na noite desta segunda-feira (9).
39
+ O jornal ganhou a premiação nas categorias Economia, com a criação do REM-F (Ranking de Eficiência dos Municípios-Folha), Regional SP-Sul, com uma série de reportagens sobre dados sigilosos do governo Geraldo Alckmin (PSDB), e Ciência e Tecnologia, com o especial "Tudo sobre o mosquito".
40
+ A vencedora do Grande Prêmio foi a reportagem "Terra bruta - Pistolagem, devastação e morte no coração do Brasil", do jornal "O Estado de S. Paulo".
41
+ Criado em 2013, o Prêmio Petrobras de Jornalismo está em sua quarta edição.
42
+ Ele teve neste ano 11 categorias nacionais e regionais, além de dois prêmios especiais.
43
+ Nenhuma das categorias é voltada especificamente às reportagens sobre política.
44
+ DOCUMENTOS SECRETOS DE ALCKMIN Vencedora na categoria Regional SP-Sul, a série de investigações publicadas pela Folha em outubro de 2015 revelou que a gestão Alckmin havia tornado sigilosas centenas de informações do transporte público metropolitano.
45
+ O trabalho é de autoria dos repórteres Artur Rodrigues, André Monteiro e Fabricio Lobel.
46
+ A classificação das informações impossibilitava a consulta pública de 157 documentos num prazo de 25 anos.
47
+ 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.
48
+ À época, como atualmente, todas as linhas em expansão do Metrô de São Paulo e da CPTM estavam atrasadas.
49
+ A reportagem motivou a abertura de uma investigação pelo Ministério Público e o pedido de explicações pelo Tribunal de Contas do Estado.
50
+ Dois dias após a publicação do material pelo jornal, o governo paulista revogou os decretos de sigilo e se comprometeu a revisar todos os termos semelhantes impostos até então.
51
+ Após a decisão, as reportagens identificaram outras áreas da gestão Alckmin em que também havia sido imposto o sigilo de informação.
52
+ Entre elas estavam dados sobre procedimentos e projetos técnicos e operacionais do abastecimento de água de São Paulo, além de dados da Polícia Militar e da Administração Penitenciária.
53
+ RANKING DE EFICIÊNCIA DOS MUNICÍPIOS O Ranking de Eficiência dos Municípios-Folha (REM-F), projeto publicado em agosto de 2016, antes das eleições municipais, trouxe uma ferramenta virtual, criada em conjunto com o Datafolha, que mostra quais prefeituras entregam mais serviços básicos à população usando menor volume de recursos financeiros.
54
+ O ranking, com participação de Alessandro Janoni, Fernando Canzian, Marcelo Soares, Mario Kanno e Renata Nunes, leva em conta indicadores de saúde, educação e saneamento para calcular a eficiência da gestão em relação à sua receita disponível.
55
+ Foram avaliados 5.281 municípios, ou 95% do total de 5.569 existentes no Brasil.
56
+ Além do índice, o projeto também incluiu visitas a 16 cidades brasileiras, de diferentes regiões e níveis de eficiência apurados pelo ranking.
57
+ O MOSQUITO Coordenado pelos jornalistas Marcelo Leite e Mariana Versolato, o pacote de reportagens sobre o mosquito Aedes aegypti foi publicado em dezembro de 2016, em meio à crise do vírus da zika.
58
+ Com participação de uma equipe de 21 profissionais, tem também entre seus autores os jornalistas Cláudia Collucci, Lalo de Almeida, Patricia Campos Mello, Reinaldo José Lopes e Gabriel Alves.
59
+ O material contém textos sobre diferentes aspectos da questão que comoveu o Brasil e o mundo, chegando a ser declarada como uma emergência internacional pela Organização Mundial da Saúde.
60
+ O primeiro capítulo "O vírus da zika" é o resultado de uma viagem ao berço da doença, o continente africano, com visitas ao Senegal e a Uganda, onde fica a floresta Zika, que deu nome ao vírus.
61
+ Em seguida, o material traz relatos sobre mães e seus filhos e filhas, que nasceram com microcefalia.
62
+ A reportagem explicita os percalços de quem não tinha muita informação do que fazer naquele momento tão crítico.
63
+ O especial ainda discute o impacto da doença nos EUA e as novidades no combate ao mosquito Aedes aegypti e à doença propriamente dita.
64
+ A Disney divulgou na noite desta segunda-feira (9) o novo trailer de "Star Wars:
65
+ Os Últimos Jedi", oitavo episódio da saga.
66
+ O trailer era aguardado pelos fãs e se tornou um dos tópicos mais comentados no Twitter no horário de seu lançamento.
67
+ Assista ao trailer de 'Os Últimos Jedi' Assista ao trailer de 'Os Últimos Jedi' Em "O Despertar da Força" (2015), episódio mais recente, a personagem Rey (Daisy Ridley) descobre que tem a Força e procura por Luke Skywalker (Mark Hamill) para começar seu treinamento Jedi.
68
+ A história do novo episódio continua desse ponto, e cenas do trailer mostram a relação entre Rey e Skywalker.
69
+ Com direção de Rian Johnson, o filme será lançado em 14 de dezembro no Brasil.
70
+ O nono episódio, ainda sem título, encerra a nova trilogia em 20 de dezembro de 2019.
71
+ O estúdio também divulgou novo poster do filme.
72
+ Poster O CBSS, banco da holding Elopar dos sócios Bradesco e Banco do Brasil, está fazendo parcerias com fintechs, prevendo em 2018 alcançar 30% de um mercado de rápido crescimento e que já empresta mais de R$ 1 bilhão por ano.
73
+ Inicialmente, os acordos usarão o modelo mais praticado no mercado, com fintechs captando pedidos de empréstimos e filtrando o perfil de risco dos tomadores, operação conhecida no jargão do mercado como "lead" e pela qual as fintechs são remuneradas, quase sempre por bancos de médio porte e cooperativas de crédito, que de fato concedem os financiamentos.
74
+ "Nós temos funding competitivo e em boa quantidade e as fintechs conseguem originar crédito com um custo muito menor do que faríamos por meios físicos", disse à Reuters o presidente do Banco CBSS, Carlos Giovane.
75
+ A primeira parceria é com a Bom Pra Crédito, marketplace no qual cerca de 500 mil interessados em tomar empréstimo pessoal submetem todo mês pedidos que são distribuídos para cerca de 25 bancos oferecerem propostas.
76
+ Além desse acordo, já em andamento, negociações estão em curso com outras quatro fintechs especializadas em crédito:
77
+ Guia Bolso, Lendico, Finanzero e Wecash, previstas para estarem operacionais ainda em 2017.
78
+ O movimento marca a primeira aproximação operacional, mesmo que de forma indireta, de grandes bancos com fintechs, que nos últimos dois anos emergiram como potenciais rivais no crédito pessoal, ao oferecerem taxas de juros muito menores do que as praticadas no sistema financeiro.
79
+ Segundo o presidente da Bom Pra Crédito, Ricardo Kalichsztein, ser parceiro é melhor.
80
+ O CBSS, no caso, oferecerá empréstimos pessoais sem garantia com taxas a partir de 3,9% ao mês.
81
+ A taxa média do sistema financeiro foi de 7,2% ao mês, segundo dados do Banco Central referentes a agosto.
82
+ A iniciativa acontece em meio a uma audiência pública aberta pelo Banco Central para regulamentar a atuação das plataformas digitais de crédito.
83
+ A proposta do BC é classificar essas fintechs em duas categorias, a que empresta com capital dos próprios acionistas e a que conecta investidores a tomadores de recursos, prática conhecida como peer to peer lending.
84
+ Na avaliação de especialistas do setor, dependendo da forma como vier a regulação, o modelo atual de parcerias pode ser esvaziado, uma vez que bancos podem preferir ter plataformas digitais próprias, enquanto algumas fintechs poderiam ter um braço financeiro para operar de ponta a ponta.
85
+ "As fintechs começarão a se perguntar se vale a pena virar banco", disse Rubens Vidigal Neto, sócio do PVG Advogados.
86
+ Atento a esse movimento, o CBSS já visualiza aprofundar a aproximação com as fintechs.
87
+ Num primeiro momento, as conversas envolvem proposta de remuneração mais atrativa, na qual o banco pode repassar às parceiras mais do que apenas um valor pela originação de negócios.
88
+ Mas com pelo menos uma delas as conversas já evoluíram para participação societária.
89
+ "Estamos em negociações finais para sermos sócios de uma delas (fintech)", disse Giovane, sem dar mais detalhes.
90
+ A entrada do CBSS no crédito digital é motivada, dentre outros fatores, pelo interesse dos sócios em acelerar a rentabilização do negócio, disse o executivo.
91
+ Após ter obtido as aprovações do Banco Central no ano passado para atuar como banco, o CBSS vem deslanchando uma série de iniciativas para vender produtos financeiros, incluindo por meio da financeira Ibi, de parcerias com redes varejistas e o lançamento de um plataforma digital própria de cartão de crédito, a Digio.
92
+ Essa plataforma começa a operar ainda este mês um marketplace, inclusive com produtos como os da Apple Store.
93
+ A partir de novembro, a Digio incluirá oferta de crédito pessoal.
94
+ Todas essas frentes consumiram investimentos que levam mais tempo para dar retorno.
95
+ O banco, que tinha patrimônio de R$ 410 milhões em junho, já opera no azul desde o mês passado, mas o plano é começar a ter lucro.
96
+ "As parcerias com as fintechs no crédito são um negócio que permite retorno quase imediato", disse Giovane.
97
+ O vocalista da banda irlandesa U2, Bono, fez uma pergunta espinhosa ao presidente argentino, Mauricio Macri, em encontro que ambos mantiveram na Casa Rosada, sede do governo argentino, nesta segunda-feira (9).
98
+ O músico, que se apresenta com seu grupo nesta terça (10) e quarta (11) no país, quis saber como estão as investigações do desaparecimento do artesão Santiago Maldonado, ocorrida dia 1º de agosto deste ano na Patagônia.
99
+ O sumiço de Maldonado se transformou em um dos temas da campanha para as eleições legislativas que ocorrem no próximo dia 22.
100
+ Marchas e protestos vêm ocorrendo em várias cidades desde então, e há cartazes pedindo o "reaparecimento com vida" do ativista.
101
+ Maldonado havia se juntado a um protesto de indígenas mapuche que reivindicam um território na Província de Chubut, no sul do país, hoje sob posse da companhia italiana Benetton.
102
+ Na ocasião, houve enfrentamento da Gendarmeria (polícia de fronteiras argentina) com os manifestantes, e testemunhas alegam que Maldonado foi levado pelos agentes.
103
+ O governo, por meio da Secretaria de Segurança Pública, à qual a Gendarmeria responde, alega que essa afirmação é falsa e, desde então, tem realizado intensas buscas pela região para encontrar Maldonado.
104
+ A ex-presidente Cristina Kirchner, candidata ao Senado pela oposição, tem usado a imagem de Maldonado em campanha, dizendo ser o "primeiro desaparecido político do governo Macri".
105
+ Apesar da pergunta, Bono e Macri se trataram de forma cordial.
106
+ Após o encontro, o cantor disse que havia "sentido que o presidente está comprometido na missão de encontrar Maldonado".
107
+ E acrescentou que vinha ao país "reforçar o pedido para que o caso seja esclarecido, em nome da Anistia Internacional".
108
+ Além disso, Bono afirmou que ambos trataram de alguns temas da pauta da próxima reunião do G-20, que ocorrerá na Argentina no ano que vem.
109
+ O país assume em dezembro a presidência rotativa do grupo que congrega as 20 maiores economias.
110
+ "As pessoas pensam que esses eventos são apenas encontros com jantares luxuosos.
111
+ Mas, neste caso, haverá um grande espaço dedicado ao debate da necessidade de se ajudar as mulheres que estão em situação de pobreza e às mais de 130 milhões de meninas em todo o mundo que não vão à escola", afirmou Bono.
112
+ O italiano Cesare Battisti disse nesta segunda-feira (9) que tem liberdade para sair do Brasil quando quiser.
113
+ "Eu não tenho refúgio político.
114
+ Eu sou um imigrante, com visto permanente no país.
115
+ Eu posso sair desse país quando e como quero.
116
+ Não tenho nenhuma restrição", afirmou ele em entrevista à TV Tribuna, afiliada da TV Globo.
117
+ Battisti foi detido na semana passada acusado de evasão de divisas ao tentar atravessar a fronteira com a Bolívia portando dólares e euros no valor equivalente a pouco mais de R$ 23 mil.
118
+ Na sexta-feira (6), o desembargador José Marcos Lunardelli, do TRF-3 (Tribunal Regional Federal da 3ª Região), concedeu um habeas corpus ao italiano, preso em Mato Grosso do Sul.
119
+ Ele chegou a São Paulo no sábado (7).
120
+ A entrevista à emissora foi gravada em Cananeia (SP), cidade onde Battisti está morando.
121
+ "Ia estar fugindo de quê?
122
+ O país onde estou protegido é aqui", afirmou ele, negando que tivesse a intenção de fugir do país.
123
+ "Não é verdade o que se fala, que eu não tinha o direito de sair do país."
124
+ A defesa do italiano já vinha afirmando que não há impedimento para que ele, na condição de refugiado, realize viagem, mesmo que seja para o exterior.
125
+ Segundo os advogados, sua situação jurídica no Brasil está plenamente legalizada há quase dez anos.
126
+ "Eu tenho todo o direito de cidadão brasileiro", disse Battisti à TV.
127
+ "O decreto do Lula não pode ser revogado.
128
+ Depois de cinco anos acabou o prazo."
129
+ Battisti fugiu da Itália e, em 2004, veio para o Brasil.
130
+ Foi preso em 2007 e, em 2009, o STF (Supremo Tribunal Federal) autorizou a extradição, que foi negada pelo ex-presidente Luiz Inácio Lula da Silva em 2010, no último dia de seu governo.
131
+ Antes da prisão na semana passada, o Ministério da Justiça já havia encaminhado ao presidente Michel Temer um parecer no qual tratava sobre a extradição de Battisti.
132
+ Agora a Subchefia para Assuntos Jurídicos (SAJ) do Planalto está elaborando uma avaliação que deve ficar pronta na quarta-feira (11).
133
+ A partir daí, cabe a Temer tomar uma decisão sobre o caso.
134
+ A expectativa é que ele delibere sobre isso logo após a entrega da análise jurídica, mas oficialmente não há prazo.
135
+ A pasta da Justiça enviou na sexta-feira (6) um parecer próprio ao Planalto, em que afirmava não haver nenhum obstáculo jurídico que impeça a extradição.
136
+ É a partir desse texto que o documento da SAJ deve ser redigido.
137
+ CRONOLOGIA O caso Battisti Década de 1970 Envolve-se com grupos de luta armada de extrema-esquerda Década de 1980 Foge da Itália e passa a maior parte do tempo no México.
138
+ É condenado à prisão perpétua pela Justiça italiana, acusado de quatro homicídios Década de 1990 Se exila em Paris (França), protegido por legislação do governo Mitterrand 2004 Sem Miterrand, França aprova extradição para Itália; foge em direção ao Brasil, onde vive clandestino 2007 É preso no Rio 2009 Ministério da Justiça dá a ele status de refugiado político, mas STF aprova extradição 2010 Lula, então presidente, decide pela permanência de Battisti no Brasil 2011 STF valida decisão de Lula, e Battisti é solto.
139
+ Governo concede visto de permanência a ele 2015 Juíza da 20ª Vara Federal de Brasília atende a pedido do Ministério Público e determina a deportação de Battisti.
140
+ A defesa recorre da decisão 2017 Na quarta (4.out), é detido em Corumbá (MS).
141
+ Consegue habeas corpus na sexta (6.out) Pela primeira vez desde que assumiu o comando da seleção brasileira há quase 16 meses, o técnico Tite afirmou que já pensou em continuar no cargo após a Copa.
142
+ Ele assumiu o posto em junho de 2016 após a demissão de Dunga.
143
+ O treinador iniciou o seu trabalho fora da zona de classificação para a Copa do Mundo, mas com uma arrancada surpreendente conseguiu nove vitórias consecutivas e dois empates e obteve a vaga no Mundial com antecipação.
144
+ O treinador ainda coleciona mais duas vitórias e uma derrota em jogos amistosos.
145
+ "Pensar eu pensei [seguir após Mundial], mas ainda é utopia, temos que crescer muito a mentalidade para esse tipo de coisa acontecer.
146
+ Temos que evoluir como técnicos, como dirigentes e como formadores de opinião.
147
+ Eu cobiço o que a Alemanha tem, que consegue deixar tanto tempo um treinador para trabalhar", afirmou Tite.
148
+ Na entrevista, o treinador falou sobre o o duelo contra o Chile, marcado para esta terça-feira (10), às 20h30, no Allianz Parque, pela última rodada das eliminatórias para a Copa do Mundo.
149
+ Uma vitória da seleção brasileira pode ajudar a Argentina a se classificar sem a repescagem ao Mundial.
150
+ O time dirigido por Sampaoli enfrenta o eliminado Equador em Quito.
151
+ Atualmente, o Chile ocupa a terceira posição com 26 pontos.
152
+ Já a Argentina está na sexta posição com 25 pontos.
153
+ Entre os dois times estão Colômbia, quarta colocada (26 pontos), e o Peru, quinto colocado (25 pontos).
154
+ "Vamos fazer o que é mais importante para nós, para a dignidade de um povo, da imprensa.
155
+ Não é nada de extraordinário, que é fazer o melhor.
156
+ Os outros vão colher o fruto do trabalho que fizeram", disse o treinador.
157
+ "A classificação será determinada com o trabalho feito nos 18 jogos.
158
+ Não será merecimento por apenas um jogo e sim pela sequência", completou.
159
+ Tite fará apenas duas mudanças em relação ao time que empatou com a Bolívia.
160
+ O goleiro Ederson, que terá a primeira oportunidade como titular, entra no lugar de Alisson, enquanto Marquinhos ocupa a vaga de Thiago Silva.
161
+ Na lateral esquerda, Alex Sandro será mantido.
162
+ "Não posso desestruturar a equipe em demasia.
163
+ Mexo no goleiro, na lateral [mantém o Alex Sandro] Normalmente são duas mudanças.
164
+ Se mexer demais, perde a organização, a coordenação e a preparação para o Mundial.
165
+ Quando começa a mexer nos três setores, essa oportunidade se perde em função da falta de estrutura.
166
+ Por isso que tomei o cuidado de não mexer excessivamente.
167
+ Porque aí você vira ''Professor Pardal'', completou.
168
+ O STF (Supremo Tribunal Federal) negou na quinta-feira (5) um recurso para analisar um pedido de impeachment contra o ministro Gilmar Mendes.
169
+ O caso foi levado ao Supremo em janeiro por um grupo de juristas, que entrou com um mandado de segurança contestando decisão do então presidente do Senado, Renan Calheiros (PMDB-AL), que, em setembro de 2016, arquivou um pedido de impeachment contra Gilmar.
170
+ Para os juristas, Renan não poderia arquivar sumariamente o pedido de impeachment:
171
+ A) por não ter competência legal para tanto, eis que tal competência é da Mesa do Senado;
172
+ B) por estar legalmente impedido (por suspeição) de praticar o ato hostilizado".
173
+ Segundo eles, o ato deveria ser anulado e reavaliado.
174
+ O documento é assinado por Celso Antonio Bandeira de Mello, Fabio Konder Comparato, Sérgio Sérvulo da Cunha, Eny Raimundo Moreira, Roberto Átila Amaral e Alvaro Augusto Ribeiro Costa.
175
+ Relator do caso, Edson Fachin negou o pedido do grupo, que recorreu.
176
+ Para Fachin, "embora os impetrantes discordem das conclusões a que chegou o então presidente do Senado, não cabe a esta corte rever seu mérito, apenas verificar a legalidade dos atos e dos procedimentos por ele praticados, no exercício legítimo de sua função constitucional".
177
+ O caso foi julgado no plenário virtual do STF entre os dias 29 de setembro e 5 de outubro.
178
+ Gilmar não participou e nem o ministro Marco Aurélio, que se declarou suspeito.
179
+ Os outros ministros votaram contra o prosseguimento da ação.
180
+ O aplicativo de mensagens instantâneas WhatsApp disponibilizou para download sua versão para negócios anunciada em setembro.
181
+ Em fase de testes, o serviço está sendo usado por algumas empresas selecionadas por meio de um pré-cadastro no site da empresa.
182
+ Com o WhatsApp Business, as companhias podem registrar suas contas com telefones fixos e configurar um perfil público, com verificação semelhante à que já é usada nas redes sociais e informações mais detalhadas do que as previstas hoje no serviço tradicional, como endereço, descrição e site do negócio.
183
+ Também é possível estabelecer horários específicos em que o Whatsapp estará ativo e definir uma resposta automática para os clientes.
184
+ A ideia é separar os perfis pessoais dos corporativos, que hoje funcionam de maneira "bastante rudimentar", como definiu a empresa quando comunicou sobre o lançamento do novo serviço.
185
+ Para as grandes companhias, segundo a mesma nota, o WhatsApp quer fazer do aplicativo uma solução para operar em escala - para fornecer notificações sobre horários de voo, no caso das companhias aéreas, por exemplo, confirmações de entrega e outras atualizações.
186
+ Em entrevista ao jornal americano The Wall Street Journal logo após o anúncio do novo serviço, o chefe de operações do WhatsApp Matt Idema confirmou que há intenção de cobrar das empresas pelo serviço futuramente, sem dar mais detalhes sobre como isso funcionaria ou quanto custaria.
187
+ Executivos da companhia já haviam afirmado que o lançamento de um serviço para empresas fazia parte da estratégia para monetizar o aplicativo.
188
+ No Brasil, estão testando o WhatsApp Business companhias como o banco Itaú, que integrou o aplicativo à sua plataforma de atendimento aos clientes do serviço Personalitté Digital, e a companhia aérea holandesa KLM, que disponibilizou o serviço para aqueles que, no momento da reserva ou do check-in feito no site da empresa, selecionarem a opção para receber informações via WhatsApp.
189
+ Em julho, o aplicativo, lançado em 2009 e adquirido por US$ 19 milhões pelo Facebook em 2014, comemorou a marca de um bilhão de usuários ativos por dia.
190
+ Pouco mais de 10% desse total, 120 milhões, estão no Brasil.
191
+ A procuradora-geral da República, Raquel Dodge, defendeu a manutenção das prisões de Joesley Batista e Ricardo Saud, executivos da JBS.
192
+ Em dois documentos enviados na noite de sexta-feira (6) ao STF (Supremo Tribunal Federal), Dodge afirma que há risco de que eles fujam ou atrapalhem as investigações.
193
+ Ela aponta também a possibilidade de que eles voltem a cometer crimes.
194
+ Em 14 de setembro, o ministro Edson Fachin, relator do caso JBS no Supremo, converteu a prisão de Batista e de Saud de temporária (5 dias) para preventiva, sem prazo definido.
195
+ Para Dodge, a liberdade de Joesley e Saud oferece risco às investigações, pois eles são suspeitos de ocultar fatos e de sonegar provas que comprometem outras pessoas.
196
+ "É irretocável a sua anterior decisão, que, antes de deferir a prisão temporária do ora agravante, determinou a suspensão cautelar da eficácia do acordo de colaboração premiada previamente firmado", escreveu Dodge.
197
+ Segundo a procuradora-geral, "estão presentes os pressupostos e requisitos indispensáveis à decretação da prisão preventiva, sendo esta necessária a garantir a ordem pública (evitar reiteração delitiva) e por conveniência da instrução penal (risco de destruição ou ocultação de provas)".
198
+ "Necessária, portanto, a prisão preventiva também para proteção da ordem pública, em vista da gravidade em concreto dos crimes em apuração, da personalidade do agente e da necessidade de prevenir a reiteração delitiva, já que o esquema criminoso é sistêmico."
199
+ Dodge destaca que os executivos têm dinheiro para fugir do país.
200
+ No caso de Saud, ela ressalta que ele possui cidadania paraguaia e que não havia contado aos procuradores que tem uma conta bancária no Paraguai.
201
+ ACORDO DE DELAÇÃO Ela destaca que as decisões pelas prisões preventivas foram feitas de maneira correta, uma vez que seu antecessor, Rodrigo Janot, rescindiu os acordos de delação de Batista e Saud.
202
+ Tanto para Janot como para Dodge, houve descumprimento de uma cláusula do acordo de delação que trata de omissão de má-fé, o que justificou rever os benefícios.
203
+ O centro da crise da delação da JBS é uma gravação, datada de 17 de março, em que Joesley e Saud falam de possível atuação do ex-procurador Marcello Miller no acordo de delação quando ainda atuava no Ministério Público -ele deixou o cargo oficialmente em 5 de abril.
204
+ O áudio foi entregue pelos delatores à PGR no dia 31 de agosto.
205
+ Dodge diz que em nenhum momento os delatores contaram ter sido instruídos por Miller durante as negociações do acordo.
206
+ ÁUDIO Ela também destaca que possivelmente os delatores não tinham a intenção de entregar um áudio de uma conversa gravada acidentalmente e que embasou a prisão.
207
+ "Até o momento, os indícios sugerem que a omissão destes fatos foi intencional, premeditada e de má-fé", diz Dodge.
208
+ "Pairam dúvidas, inclusive, se o arquivo de áudio 'PIAUI RICARDO 3 17032017.WAV' foi entregue às autoridades por engano ou se foi mais uma estratégia da defesa, pois poderiam ter conhecimento de que a Polícia Federal teria conseguido recuperar o arquivo apagado dos equipamentos eletrônicos entregues pelos delatores."
209
+ Ela diz ainda que o acordo de colaboração premiada firmado com o Ministério Público Federal "não pode ser utilizado para blindar o colaborador de forma absoluta da aplicação da lei".
210
+ "Os fatos de que se tem notícia são gravíssimos, o caso é emblemático e sem precedentes na história do país, de forma que as investigações devem ser conduzidas com seriedade e cercadas de extrema cautela pelo Ministério Público e pelo Poder Judiciário."
211
+ A procuradora-geral também já se manifestou pela manutenção da prisão de Wesley Batista,, irmão de Joesley e também sócio da JBS, decretada pela Justiça Federal em São Paulo no âmbito de uma investigação sobre uso de informações privilegiadas para lucrar no mercado financeiro -prática conhecida como "insider trading".
212
+ O governo da Califórnia decretou nesta segunda-feira (9) estado de emergência na região do vale de Napa, no norte do Estado, que passa por incêndios florestais ainda fora de controle que já deixaram 10 pessoas mortas.
213
+ As chamas, que começaram nas reservas naturais, avançaram nos últimos dias com ventos de 80 km/h e chegaram às cidades.
214
+ Mais de 1.500 imóveis comerciais e residenciais foram destruídos e 20 mil pessoas, desalojadas.
215
+ Segundo as autoridades californianas, ao menos 14 focos de incêndio concentrados em uma faixa de 300 km de extensão estão sob combate na região.
216
+ Nenhum deles ainda foi controlado.
217
+ Além da mata e das construções, também estão ameaçadas as vinícolas desta região, uma das principais produtoras de vinho dos EUA.
218
+ São oito os condados mais afetados, incluindo Napa, Sonoma, Yuba e Mendocino.
219
+ Incêndios na Califórnia A cidade de Santa Rosa, a maior da região, foi uma das mais atingidas.
220
+ Casas, um supermercado e um hotel foram destruídos e parte da cidade precisou ser esvaziada.
221
+ No fim da tarde, as autoridades decretaram toque de recolher pelo risco de saques.
222
+ "É um inferno como você nunca viu antes", disse à agência de notícias Associated Press Marian Williams, que teve que deixar sua casa como seus vizinhos de madrugada quando o fogo chegou às vinícolas de Kenwood.
223
+ "Eu pude sentir o calor do fogo se aproximando quando peguei meu carro.
224
+ As árvores estavam queimando como tochas."
225
+ "Podíamos ver o céu ficando vermelho.
226
+ Só percebemos que vinha o incêndio no último segundo.
227
+ Tinha fumaça por todos os lados", disse Jesús Torres, de Anaheim, à rede de televisão CBS.
228
+ O maior número de mortos, sete, foi registrado em Sonoma.
229
+ Outras duas mortes ocorreram em Napa e uma em Mendocino.
230
+ O diretor do departamento florestal californiano, Ken Pimlott, disse que há desaparecidos e outros feridos graves, mas sem mencionar números.
231
+ A área afetada pelas chamas chega a 176 km² e ao menos 114 mil residências estão sem energia elétrica.
232
+ A fumaça espessa dos incêndios pode ser avistada de San Francisco, a quase cem quilômetros do vale de Napa.
233
+ O presidente do Banco Nacional de Desenvolvimento Econômico e Social (BNDES), Paulo Rabello de Castro, negou nesta segunda-feira que tenha havido irregularidades nos empréstimos concedidos pela instituição ao grupo JBS.
234
+ O executivo disse que o banco tem mecanismos de monitoramento, mas não pode ser "babá de empresário".
235
+ "Aqui com certeza não houve irregularidades; mas o tomador tem que ter responsabilidade de usar condizente os recursos", afirmou Rabello de Castro a jornalistas.
236
+ As afirmações acontecem após reportagens da mídia local nos últimos dias terem afirmado que a JBS, que está no centro de um escândalo de corrupção, usou parte dos recursos tomados com o BNDES para fins distintos do previsto.
237
+ "Acho que esse dinheiro foi usado efetivamente no negócio, mas à medida que os recursos eram investidos iam caindo como um caminhão deixando grãos de soja caindo pelo caminho.
238
+ Não é o BNDES que vai correr atrás do caminhão", adicionou.
239
+ O BNDES emprestou mais de 8 bilhões de reais ao grupo para a compra de empresas entre 2007 e 2011 e há suspeitas de que parte desse dinheiro foi desviado, o que pode ter dado um prejuízo ao banco de mais de 1 bilhão.
240
+ Após a operação Bullish, da Polícia Federal, apontar supostos favorecimentos no repasse de recursos à JBS, o banco montou uma comissão interna sobre o assunto, mas não encontrou desvios cometidos por funcionários.
241
+ FINANCIAMENTO EXTERNO O banco vem sendo cobrado pela União a devolver gradualmente os mais de 500 bilhões de reais emprestados nos últimos anos.
242
+ Em setembro, o BNDES devolveu 33 bilhões e outros 17 bilhões serão devolvidos até o fim do ano.
243
+ Para diversificar as fontes de recursos, o banco pretende repensar o uso do Fundo de Amparo do Trabalhador (FAT), disse Rabello de Castro, adiantando que vai sugerir ao Codefat mudanças na forma de repasse de recursos ao banco.
244
+ Até 2007, a fonte principal era o FAT, seguida por empréstimos internacionais de órgãos multilaterais e captações domésticas.
245
+ "Vamos voltar o FAT como nossa principal fonte, talvez com sistema de remuneração diferente atualizado", disse o executivo.
246
+ Mas o BNDES deve voltar a buscar captações de recursos de organismos multilaterais como KFW, o banco dos Brics, o China Development Bank e Agência Francesa de Desenvolvimento.
247
+ Em novembro, Rabello de Castro visitará agências de rating nos EUA para tentar obter uma classificação melhor do que a do soberano para o banco.
248
+ "Nosso rating é pelo menos 3 pontos percentuais acima do rating soberano, para ser discreto", disse.
249
+ Sobre sua filiação ao PSC, Rabello de Castro não descartou uma candidatura presidencial em 2018, mas disse que uma decisão ainda não foi tomada.
250
+ O presidente-executivo da Apple, Tim Cook, destacou nesta segunda-feira (9) o papel de uma pequena empresa francesa por trás de recursos inovadores nos mais recentes iPhones, antes de uma reunião com o presidente Emmanuel Macron, que tem defendido maior rigor nos impostos sobre empresas de tecnologia.
251
+ Cook fez uma visita surpresa à Eldim, que desenvolve tecnologia óptica usada no sistema de reconhecimento facial dentro dos novos iPhone X, que devem chegar ao mercado no mês que vem a partir de 999 dólares.
252
+ O Face ID, como o recurso de reconhecimento facial do novo aparelho é conhecido, substituirá o sensor de impressão digital para destravar o telefone, e é um elementos da campanha da Apple para se diferenciar de dispositivos concorrentes.
253
+ "Parabéns por seu trabalho!", disse Cook em sua conta oficial no Twitter, em francês.
254
+ Uma foto dele conversando com funcionários da Eldim também foi publicada.
255
+ Cook depois se reuniu com Macro, que tem defendido que a Apple e outras companhias de tecnologia, como a Amazon.com, paguem mais impostos na Europa.
256
+ "Parabéns à Europa por agir com determinação para fazer com que regras tributárias e a justiça sejam respeitadas", tuitou Macron na semana passada, saudando autoridades da União Europeia por levarem a Irlanda, estado-membro do bloco, à Justiça para cobrar 13 bilhões de euros em impostos retroativos da Apple.
257
+ Um representante da presidência francesa disse que Macron e Cook não debateram sobre o passado e descreveram as conversas sobre regulamentação de plataformas e de políticas tributárias como construtivas e promissoras.
258
+ Questionado se haviam discutido a proposta francesa de cobrar impostos sobre a receita de grande companhias de tecnologia, e não sobre o lucro, o assessor de Macron disse que "eles não discutiram questões específicas."
259
+ A Volkswagen projeta um crescimento de 40% no Brasil nos próximos quatro anos, afirma Pablo Di Si, novo presidente da montadora, anunciado nesta segunda-feira (9).
260
+ "A economia vai seguir crescendo.
261
+ Observamos um descolamento da política e da econômica no país."
262
+ O aumento da demanda argentina também deverá garantir a alta das exportações, que, no caso da montadora, foi de 62% no acumulado deste ano até setembro, diz o executivo -que vem justamente da sede argentina da companhia.
263
+ "Precisamos melhorar a competitividade para exportar também a novos mercados emergentes, como Turquia, Egito, Chile."
264
+ A empresa prevê 20 lançamentos até 2020 no Brasil.
265
+ O primeiro deles, o novo Polo, já foi colocado no mercado, e o segundo, o sedã Virtus, será lançado em janeiro de 2018.
266
+ Outros produtos serão anunciados no próximo ano, afirma ele, que não deu mais detalhes.
267
+ Grande parte do investimento de R$ 7 bilhões previsto até 2020 será destinado à melhoria de produção e aos fornecedores, segundo Di Si.
268
+ "A cadeia também passou por uma retração.
269
+ Um dos maiores perigos é que o fornecimento não acompanhe a retomada."
270
+ Em relação ao fim do Inovar-Auto e uma possibilidade de aumento das importações de componentes, Di Si afirma que é preciso de os fornecedores locais tenham mais competitividade.
271
+ "O Rota 2030 também ajudará a desenvolver o restante da indústria", diz.
272
+ A nova gestão também planeja modernizar a distribuição.
273
+ Hoje, são 530 as concessionárias da Volkswagen.
274
+ "É preciso ter uma forma menos burocrática e mais rápida de se relacionar com os clientes.
275
+ O objetivo é aumentar as vendas para sonhar em assumir a liderança."
276
+ A empresa é hoje líder em exportações, mas está na terceira posição em vendas no mercado nacional, com 12% de participação.
277
+ A General Motors lidera (18,2%), seguida pela Fiat (13%).
278
+ Outro plano em estudo pela montadora é iniciar a importação de veículos elétricos para o Brasil em 2018.
279
+ "Antes, porém, é preciso ter certeza que haverá estações de carregamento elétrico, e em quais Estados.
280
+ É preciso ter um ecossistema.
281
+ Depois disso, é preciso capacitar a rede de concessionárias."
282
+ CAMINHÕES A Volkswagen Caminhões e Ônibus anunciou nesta segunda (9) que decidiu cancelar as férias coletivas de funcionários da sua fábrica em Resende, no Rio de Janeiro, pela primeira vez em seis anos, motivada por sinais de retomada na demanda por veículos pesados pelo lançamento da família de modelos leves urbanos, disse o presidente da companhia para a América Latina, Roberto Cortes.
283
+ "A Bolsa se valorizou 77% nos últimos seis meses, o risco Brasil caiu, o real está estável e as taxas de juros à metade do que eram.
284
+ De outubro a dezembro, estamos esperando um aumento de 25% nas vendas", afirmou o executivo.