Skip to content

Instantly share code, notes, and snippets.

@fabiolimace
Last active November 19, 2022 12:55
Show Gist options
  • Save fabiolimace/84bcdd13e3b6f463cce41138a347df2f to your computer and use it in GitHub Desktop.
Save fabiolimace/84bcdd13e3b6f463cce41138a347df2f to your computer and use it in GitHub Desktop.
Expressão Regular para Frases

Expressão Regular para Frases

Palavra:                                    [a-zA-ZáéíóúÁÉÍÓÚàÀâêôÂÊÔãõÃÕüÜçǪº-]+
Numero:                                                                            [0-9]+([,. ]?[0-9]+)*                                                     [0-9]+([,. ]?[0-9]+)*
Numero ou palavra:                         ([a-zA-ZáéíóúÁÉÍÓÚàÀâêôÂÊÔãõÃÕüÜçǪº-]+|[0-9]+([,. ]?[0-9]+)*)            ([a-zA-ZáéíóúÁÉÍÓÚàÀâêôÂÊÔãõÃÕüÜçǪº-]+|[0-9]+([,. ]?[0-9]+)*)
Pontuação gráfica:                                                                                       ( |[,:] )                                                                 [\.\?\!]
Início de frase:      [A-ZÁÉÍÓÚÀÂÊÔÃÕÜÇ]
Frase:               ^[A-ZÁÉÍÓÚÀÂÊÔÃÕÜÇ] ?(([a-zA-ZáéíóúÁÉÍÓÚàÀâêôÂÊÔãõÃÕüÜçǪº-]+|[0-9]+([,. ]?[0-9]+)*)( |[,:] ))+(([a-zA-ZáéíóúÁÉÍÓÚàÀâêôÂÊÔãõÃÕüÜçǪº-]+|[0-9]+([,. ]?[0-9]+)*)[\.\?\!])

                     |---                  palavras sucedidads por espaco ou virgula                           ---| |--              ultima palavra da frase vizinha ao ponto             --|

Para melhorar a correspondência:

  • Transformar um '. [::MAIUSCULA::]' em um '.\n[::MAIUSCULA::]' para facilitar a identificação de início e fim de períodos.
  • Remover aspas simples e duplas, estilizadas ou não, inglesas ou europeias: s/"'//g
  • Transformar ' - ' e ' -- ' em ', ': s/ - /, /g; s/ -- /, /g
  • Transformar ' (' em ', ', ') ' em ', ' e ')::punct::' em '::punct::' : s/ (/, /g; s/) /, /g; s/)(,.?!)/\1/g
  • Remover referências numéricas como às da Wikipedia: s/[[0-9]+]//g
  • Transformar todas as entidades HTML em seus caracteres corespondentes na codificação empregada (UTF8 ou LATIN)
  • Remover espaços no início e no fim de cada linha: s/^ +//g; s/ +$//g

Problemas ainda não tratados:

  • Datas e horários: 31/12/99, 31/12/1999, 23:59, 23h59, 11:59 PM
  • Símbolos monetários: U$, R$, USD, BRL, n dólares, n reais
  • Intervalos como estes: 2003-2011, 2017–presente, 0,0-1,0
  • Unidades métricas e de outros sistemas de medida
  • Siglas e acrônimos com pontos: Y.M.C.A., C.R.F., A.C., D.C. etc
  • Quebras prematuras de frases devido a abreviações e siglas que terminam com um ponto: "pres.", "sen.", "art." etc
  • Números romanos: I, II, III etc
  • Nomes próprios compostos sem hífen: União Europeia, Estados Unidos, João da Silva etc

Um exemplo de como capturar todas as frases de um corpus de maneira ordenada e não repetida:

find $HOME/extract-wiki -type f -name "*.txt" | xargs cat \
    | sed -E 's/\. /\.\n/g' \
    | tr -d "\'\"" \
    | sed -E 's/ \(/, /g; s/\) /, /g' \
    | sed -E 's/(À|À)/À/g' \
    | sed -E 's/(Á|Á)/Á/g' \
    | sed -E 's/(Â|Â)/Â/g' \
    | sed -E 's/(Ã|Ã)/Ã/g' \
    | sed -E 's/(Ç|Ç)/Ç/g' \
    | sed -E 's/(É|É)/É/g' \
    | sed -E 's/(Ê|Ê)/Ê/g' \
    | sed -E 's/(Í|Í)/Í/g' \
    | sed -E 's/(Ó|Ó)/Ó/g' \
    | sed -E 's/(Ô|Ô)/Ô/g' \
    | sed -E 's/(Õ|Õ)/Õ/g' \
    | sed -E 's/(Ú|Ú)/Ú/g' \
    | sed -E 's/(Û|Û)/Û/g' \
    | sed -E 's/(Ü|Ü)/Ü/g' \
    | sed -E 's/(à|à)/à/g' \
    | sed -E 's/(á|á)/á/g' \
    | sed -E 's/(â|â)/â/g' \
    | sed -E 's/(ã|ã)/ã/g' \
    | sed -E 's/(ç|ç)/ç/g' \
    | sed -E 's/(é|é)/é/g' \
    | sed -E 's/(ê|ê)/ê/g' \
    | sed -E 's/(í|í)/í/g' \
    | sed -E 's/(ó|ó)/ó/g' \
    | sed -E 's/(ô|ô)/ô/g' \
    | sed -E 's/(õ|õ)/õ/g' \
    | sed -E 's/(ú|ú)/ú/g' \
    | sed -E 's/(ü|ü)/ü/g' \
    | sed -E 's/(ª|ª)/ª/g' \
    | sed -E 's/(®|®)/®/g' \
    | sed -E 's/(°|°)/°/g' \
    | sed -E 's/(²|²)/²/g' \
    | sed -E 's/(³|³)/³/g' \
    | sed -E 's/(¹|¹)/¹/g' \
    | sed -E 's/(º|º)/º/g' \
    | sed -E 's/(¼|¼)/¼/g' \
    | sed -E 's/(½|½)/½/g' \
    | sed -E 's/(¾|¾)/¾/g' \
    | sed -E 's/(©|©)/©/g' \
    | sed -E 's/(§|§)/§/g' \
    | sed -E 's/(£|£)/£/g' \
    | sed -E 's/(>|>)/>/g' \
    | sed -E 's/(&lt;|&#60;)/</g' \
    | sed -E 's/(&amp;|&#38;)/&/g' \
    | sed -E 's/(&quot;|&#34;)/"/g' \
    | sed -E "s/(&apos;|&#39;)/'/g" \
    | sed -E 's/(&ndash;|&#8211;)/–/g' \
    | sed -E 's/(&mdash;|&#8212;)/—/g' \
    | sed -E 's/(&lsquo;|&#8216;)/‘/g' \
    | sed -E 's/(&rsquo;|&#8217;)/’/g' \
    | sed -E 's/(&ldquo;|&#8220;)/“/g' \
    | sed -E 's/(&rdquo;|&#8221;)/”/g' \
    | sed -E 's/(&hellip;|&#8230;)/…/g' \
    | sed -E 's/(&bull;|&#8226;)/•/g' \
    | sed -E 's/&[^;]+;//g' \
    | grep -E --only-matching \
    "^[A-ZÁÉÍÓÚÀÂÊÔÃÕÜÇ] ?(([a-zA-ZáéíóúÁÉÍÓÚàÀâêôÂÊÔãõÃÕüÜçǪº-]+|[0-9]+([,. ]?[0-9]+)*)( |[,:] ))+(([a-zA-ZáéíóúÁÉÍÓÚàÀâêôÂÊÔãõÃÕüÜçǪº-]+|[0-9]+([,. ]?[0-9]+)*)[\.\?\!])" \
    | sort --unique \
    > $HOME/frases.wiki.txt
A alimentação da Gol resume-se basicamente a passageiros vindos de Recife e Salvador.
A alimentação dela foi um divisor de águas.
A alimentação deve sempre ser a mais natural e menos processada possível.
A alimentação é a base de uma boa saúde e a adequação da dieta reduzirá as chances de o gato rejeitar a comida.
A alimentação é feita por um cabo e adaptador de energia.
A alimentação e o local de habitação são aspectos com os quais ele tem atenção.
A alimentação errada pode deixá-lo preguiçoso e trazer muitos problemas.
A alimentação influencia não somente no peso, mas também na qualidade de vida.
A alta carga tributária do Brasil encarece os produtos nacionais, desestimula os investimentos e abre as portas do país para a ilegalidade.
A alta carga tributária, muito diferente da aplicada em outros países, principalmente vizinhos, também traz impactos para o Brasil?
A alta carga tributária no Brasil torna os preços dos produtos fabricados pela indústria nacional mais elevados.
A alta carga tributária traz vantagens ao mercado ilícito e não reflete em benefícios para o Brasil.
A alta concentração do fenol, contudo, tem propriedade cardiotóxica e pode causar intoxicação no coração, rins e fígado.
A alta cultura já não está morta entre nós, e sua restauração se opera lentamente por talentos individuais em áreas diversas, muitos dos quais herdeiros diretos do filósofo, falecido no último 24 de janeiro.
A alta da carne bovina puxa também o aumento da suína e da carne de frango, que passam a ser mais consumidas como substitutas.
A alta da maré também viabiliza ressacas e alagamentos.
A alta das matérias-primas no mundo, impulsionada pela guerra na Ucrânia e a perspectiva de mais aumento de juros por aqui, atrai investimentos estrangeiros e ajuda a impulsionar bolsa e derrubar o dólar.
A alta de infecções é associada ao avanço da nova subvariante da Ômicron, a BQ.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment