Update Portuguese Language (#2790)

* Add words to portuguese language _num_words

* Add words to portuguese language _num_words

* Portuguese - Add/remove stopwords, fix tokenizer, add currency symbols

* Extended punctuation and norm_exceptions in the Portuguese language
This commit is contained in:
Filipe Caixeta 2018-09-29 04:51:45 -03:00 committed by Ines Montani
parent 05b6103a0c
commit 6c498f9ff4
6 changed files with 81 additions and 38 deletions

View File

@ -6,8 +6,10 @@ from .stop_words import STOP_WORDS
from .lex_attrs import LEX_ATTRS from .lex_attrs import LEX_ATTRS
from .lemmatizer import LOOKUP from .lemmatizer import LOOKUP
from .tag_map import TAG_MAP from .tag_map import TAG_MAP
from .norm_exceptions import NORM_EXCEPTIONS
from ..tokenizer_exceptions import BASE_EXCEPTIONS from ..tokenizer_exceptions import BASE_EXCEPTIONS
from .punctuation import TOKENIZER_INFIXES, TOKENIZER_PREFIXES
from ..norm_exceptions import BASE_NORMS from ..norm_exceptions import BASE_NORMS
from ...language import Language from ...language import Language
from ...attrs import LANG, NORM from ...attrs import LANG, NORM
@ -17,13 +19,14 @@ from ...util import update_exc, add_lookups
class PortugueseDefaults(Language.Defaults): class PortugueseDefaults(Language.Defaults):
lex_attr_getters = dict(Language.Defaults.lex_attr_getters) lex_attr_getters = dict(Language.Defaults.lex_attr_getters)
lex_attr_getters[LANG] = lambda text: 'pt' lex_attr_getters[LANG] = lambda text: 'pt'
lex_attr_getters[NORM] = add_lookups(Language.Defaults.lex_attr_getters[NORM], BASE_NORMS) lex_attr_getters[NORM] = add_lookups(Language.Defaults.lex_attr_getters[NORM], BASE_NORMS, NORM_EXCEPTIONS)
lex_attr_getters.update(LEX_ATTRS) lex_attr_getters.update(LEX_ATTRS)
tokenizer_exceptions = update_exc(BASE_EXCEPTIONS, TOKENIZER_EXCEPTIONS) tokenizer_exceptions = update_exc(BASE_EXCEPTIONS, TOKENIZER_EXCEPTIONS)
stop_words = STOP_WORDS stop_words = STOP_WORDS
lemma_lookup = LOOKUP lemma_lookup = LOOKUP
tag_map = TAG_MAP tag_map = TAG_MAP
infixes = TOKENIZER_INFIXES
prefixes = TOKENIZER_PREFIXES
class Portuguese(Language): class Portuguese(Language):
lang = 'pt' lang = 'pt'

View File

@ -23,7 +23,7 @@ _ordinal_words = ['primeiro', 'segundo', 'terceiro', 'quarto', 'quinto', 'sexto'
def like_num(text): def like_num(text):
text = text.replace(',', '').replace('.', '') text = text.replace(',', '').replace('.', '').replace('º','').replace('ª','')
if text.isdigit(): if text.isdigit():
return True return True
if text.count('/') == 1: if text.count('/') == 1:

View File

@ -0,0 +1,23 @@
# coding: utf8
from __future__ import unicode_literals
# These exceptions are used to add NORM values based on a token's ORTH value.
# Individual languages can also add their own exceptions and overwrite them -
# for example, British vs. American spelling in English.
# Norms are only set if no alternative is provided in the tokenizer exceptions.
# Note that this does not change any other token attributes. Its main purpose
# is to normalise the word representations so that equivalent tokens receive
# similar representations. For example: $ and € are very different, but they're
# both currency symbols. By normalising currency symbols to $, all symbols are
# seen as similar, no matter how common they are in the training data.
NORM_EXCEPTIONS = {
"R$": "$", # Real
"r$": "$", # Real
"Cz$": "$", # Cruzado
"cz$": "$", # Cruzado
"NCz$": "$", # Cruzado Novo
"ncz$": "$" # Cruzado Novo
}

View File

@ -0,0 +1,18 @@
# coding: utf8
from __future__ import unicode_literals
from ..punctuation import TOKENIZER_PREFIXES as BASE_TOKENIZER_PREFIXES
from ..punctuation import TOKENIZER_SUFFIXES as BASE_TOKENIZER_SUFFIXES
from ..punctuation import TOKENIZER_INFIXES as BASE_TOKENIZER_INFIXES
_prefixes = ([r'\w{1,3}\$'] + BASE_TOKENIZER_PREFIXES)
_suffixes = (BASE_TOKENIZER_SUFFIXES)
_infixes = ([r'(\w+-\w+(-\w+)*)'] +
BASE_TOKENIZER_INFIXES
)
TOKENIZER_PREFIXES = _prefixes
TOKENIZER_SUFFIXES = _suffixes
TOKENIZER_INFIXES = _infixes

View File

@ -3,67 +3,66 @@ from __future__ import unicode_literals
STOP_WORDS = set(""" STOP_WORDS = set("""
à às acerca adeus agora ainda algo algumas alguns ali além ambas ambos ano à às área acerca ademais adeus agora ainda algo algumas alguns ali além ambas ambos antes
anos antes ao aos apenas apoio apoia apontar após aquela aquelas aquele aqueles ao aos apenas apoia apoio apontar após aquela aquelas aquele aqueles aqui aquilo
aqui aquilo área as assim através atrás até as assim através atrás até
baixo bastante bem boa bom breve baixo bastante bem boa bom breve
cada caminho catorze cedo cento certamente certeza cima cinco coisa com como cada caminho catorze cedo cento certamente certeza cima cinco coisa com como
comprido comprida conhecida conhecido conselho contra corrente custa comprida comprido conhecida conhecido conselho contra contudo corrente cuja
cujo custa
da daquela daquele dar das de debaixo demais dentro depois desde desligada da daquela daquele dar das de debaixo demais dentro depois des desde dessa desse
desligado dessa desse desta deste deve devem deverá dez dezanove dezasseis desta deste deve devem deverá dez dezanove dezasseis dezassete dezoito diante
dezassete dezoito dia diante direita diz dizem dizer do dois dos doze duas direita disso diz dizem dizer do dois dos doze duas dão
dão dúvida
é ela elas ele eles em embora enquanto entre então era és essa essas esse esses é és ela elas ele eles em embora enquanto entre então era essa essas esse esses esta
esta estado estar estará estas estava este estes esteve estive estivemos estado estar estará estas estava este estes esteve estive estivemos estiveram
estiveram estiveste estivestes estou está estás estão eu exemplo estiveste estivestes estou está estás estão eu eventual exemplo
falta fará favor faz fazeis fazem fazemos fazer fazes fazia faço fez fim final falta fará favor faz fazeis fazem fazemos fazer fazes fazia faço fez fim final
foi fomos for fora foram forma foste fostes fui foi fomos for fora foram forma foste fostes fui
geral grande grandes grupo geral grande grandes grupo
hoje horas inclusive iniciar inicio ir irá isso isto
iniciar inicio ir irá isso isto
lado ligado local logo longe lugar lado lhe ligado local logo longe lugar
maior maioria maiorias mais mal mas me meio menor menos meses mesmo meu meus maior maioria maiorias mais mal mas me meio menor menos meses mesmo meu meus mil
mil minha minhas momento muito muitos máximo mês minha minhas momento muito muitos máximo mês
na nada naquela naquele nas nem nenhuma nessa nesse nesta neste no noite nome na nada naquela naquele nas nem nenhuma nessa nesse nesta neste no nos nossa
nos nossa nossas nosso nossos nova novas nove novo novos num numa nunca nuns nossas nosso nossos nova novas nove novo novos num numa nunca nuns não nível nós
não nível nós número números número números
obra obrigada obrigado oitava oitavo oito onde ontem onze os ou outra outras obrigada obrigado oitava oitavo oito onde ontem onze ora os ou outra outras outros
outro outros
para parece parte partir pegar pela pelas pelo pelos perto pessoas pode podem para parece parte partir pegar pela pelas pelo pelos perto pode podem poder poderá
poder poderá podia ponto pontos por porque porquê posição possivelmente posso podia pois ponto pontos por porquanto porque porquê portanto porém posição
possível pouca pouco povo primeira primeiro próprio próxima próximo puderam pôde possivelmente posso possível pouca pouco povo primeira primeiro próprio próxima
põe põem próximo puderam pôde põe põem
qual qualquer quando quanto quarta quarto quatro que quem quer querem quero quais qual qualquer quando quanto quarta quarto quatro que quem quer querem quero
questão quieta quieto quinta quinto quinze quê questão quieta quieto quinta quinto quinze quê
relação relação
sabe saber se segunda segundo sei seis sem sempre ser seria sete seu seus sexta sabe saber se segunda segundo sei seis sem sempre ser seria sete seu seus sexta
sexto sim sistema sob sobre sois somente somos sou sua suas são sétima sétimo sexto sim sistema sob sobre sois somente somos sou sua suas são sétima sétimo
tal talvez também tanta tanto tarde te tem temos tempo tendes tenho tens tentar tais tal talvez também tanta tanto tarde te tem temos tempo tendes tenho tens
tentaram tente tentei ter terceira terceiro teu teus teve tipo tive tivemos tentar tentaram tente tentei ter terceira terceiro teu teus teve tipo tive
tiveram tiveste tivestes toda todas todo todos trabalhar trabalho treze três tu tivemos tiveram tiveste tivestes toda todas todo todos treze três tu tua tuas
tua tuas tudo tão têm tudo tão têm
último um uma umas uns usa usar um uma umas uns usa usar último
vai vais valor veja vem vens ver verdade verdadeira verdadeiro vez vezes viagem vai vais valor veja vem vens ver vez vezes vinda vindo vinte você vocês vos vossa
vinda vindo vinte você vocês vos vossa vossas vosso vossos vários vão vêm vós vossas vosso vossos vários vão vêm vós
zero zero
""".split()) """.split())

View File

@ -67,7 +67,7 @@ for orth in _per_pron + _dem_pron + _und_pron:
for orth in [ for orth in [
"Adm.", "Dr.", "e.g.", "E.g.", "E.G.", "Gen.", "Gov.", "i.e.", "I.e.", "Adm.", "Dr.", "e.g.", "E.g.", "E.G.", "Gen.", "Gov.", "i.e.", "I.e.",
"I.E.", "Jr.", "Ltd.", "p.m.", "Ph.D.", "Rep.", "Rev.", "Sen.", "Sr.", "I.E.", "Jr.", "Ltd.", "p.m.", "Ph.D.", "Rep.", "Rev.", "Sen.", "Sr.",
"Sra.", "vs."]: "Sra.", "vs.", "tel.", "pág.", "pag."]:
_exc[orth] = [{ORTH: orth}] _exc[orth] = [{ORTH: orth}]