Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

implementar funções em Python para extração de verbos #39

Closed
leoalenc opened this issue Dec 21, 2021 · 10 comments
Closed

implementar funções em Python para extração de verbos #39

leoalenc opened this issue Dec 21, 2021 · 10 comments
Assignees
Labels
enhancement New feature or request

Comments

@leoalenc
Copy link
Contributor

@arademaker, construí scripts com diversas funções em Python que extraem verbos do Bosque, usando o dicionário criado por meio de valences.py, e geram entradas da gramática, atualizando o índice dos lemas.
Componente central da criação de entradas é um mapping de molduras sobre tipos da gramática. Esta issue relaciona-se, além de #11, às seguintes:

LR-POR/PorGram#60
LR-POR/PorGram#19

O objetivo desta issue é melhorar esses scripts meus. Uma atividade talvez para @analununes ou quem se dispuser a isso.

@leoalenc leoalenc added the enhancement New feature or request label Dec 21, 2021
@leoalenc leoalenc self-assigned this Dec 21, 2021
leoalenc added a commit that referenced this issue Dec 21, 2021
@arademaker
Copy link
Collaborator

arademaker commented Dec 22, 2021

amostra de 50 entradas para avaliação:

acabar_2 := nonrefl-ine-obj-verb-lex &
  [ STEM < "acabar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_acabar_v_2_rel" ].

ligar_1 := nonrefl-goa-obj-verb-lex &
  [ STEM < "ligar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_ligar_v_1_rel" ].

vetar_1 := trans-verb-lex &
  [ STEM < "vetar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_vetar_v_1_rel" ].

mencionar_1 := trans-verb-lex &
  [ STEM < "mencionar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_mencionar_v_1_rel" ].

relegar_1 := trans-verb-lex &
  [ STEM < "relegar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_relegar_v_1_rel" ].

colmatar_1 := trans-verb-lex &
  [ STEM < "colmatar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_colmatar_v_1_rel" ].

calibrar_1 := trans-verb-lex &
  [ STEM < "calibrar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_calibrar_v_1_rel" ].

chamar_1 := trans-verb-lex &
  [ STEM < "chamar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_chamar_v_1_rel" ].

bater_3 := refl-int-verb-lex &
  [ STEM < "bater" >,
    SYNSEM.LKEYS.KEYREL.PRED "_bater_v_3_rel" ].

indicar_3 := trans-verb-lex &
  [ STEM < "indicar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_indicar_v_3_rel" ].

celebrar_1 := trans-verb-lex &
  [ STEM < "celebrar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_celebrar_v_1_rel" ].

acoplar_1 := nonrefl-dat-obj-verb-lex &
  [ STEM < "acoplar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_acoplar_v_1_rel" ].

concentrar_1 := trans-verb-lex &
  [ STEM < "concentrar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_concentrar_v_1_rel" ].

explodir_1 := trans-verb-lex &
  [ STEM < "explodir" >,
    SYNSEM.LKEYS.KEYREL.PRED "_explodir_v_1_rel" ].

cessar_1 := trans-verb-lex &
  [ STEM < "cessar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_cessar_v_1_rel" ].

amplificar_1 := trans-verb-lex &
  [ STEM < "amplificar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_amplificar_v_1_rel" ].

formular_1 := trans-verb-lex &
  [ STEM < "formular" >,
    SYNSEM.LKEYS.KEYREL.PRED "_formular_v_1_rel" ].

reencontrar_2 := refl-int-verb-lex &
  [ STEM < "reencontrar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_reencontrar_v_2_rel" ].

colher_1 := trans-verb-lex &
  [ STEM < "colher" >,
    SYNSEM.LKEYS.KEYREL.PRED "_colher_v_1_rel" ].

supor_3 := trans-verb-lex &
  [ STEM < "supor" >,
    SYNSEM.LKEYS.KEYREL.PRED "_supor_v_3_rel" ].

passar_3 := refl-int-verb-lex &
  [ STEM < "passar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_passar_v_3_rel" ].

batizar_1 := nonrefl-gen-obj-verb-lex &
  [ STEM < "batizar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_batizar_v_1_rel" ].

cobrar_1 := trans-verb-lex &
  [ STEM < "cobrar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_cobrar_v_1_rel" ].

solicitar_3 := subj-cl-rec-verb-lex &
  [ STEM < "solicitar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_solicitar_v_3_rel" ].

estourar_1 := trans-verb-lex &
  [ STEM < "estourar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_estourar_v_1_rel" ].

treinar_1 := trans-verb-lex &
  [ STEM < "treinar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_treinar_v_1_rel" ].

consubstanciar_1 := trans-verb-lex &
  [ STEM < "consubstanciar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_consubstanciar_v_1_rel" ].

revisitar_1 := trans-verb-lex &
  [ STEM < "revisitar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_revisitar_v_1_rel" ].

votar_2 := trans-verb-lex &
  [ STEM < "votar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_votar_v_2_rel" ].

conformar_1 := refl-com-obj-verb-lex &
  [ STEM < "conformar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_conformar_v_1_rel" ].

valer_1 := trans-verb-lex &
  [ STEM < "valer" >,
    SYNSEM.LKEYS.KEYREL.PRED "_valer_v_1_rel" ].

acompanhar_2 := nonrefl-gen-obj-verb-lex &
  [ STEM < "acompanhar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_acompanhar_v_2_rel" ].

torturar_1 := trans-verb-lex &
  [ STEM < "torturar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_torturar_v_1_rel" ].

punir_1 := trans-verb-lex &
  [ STEM < "punir" >,
    SYNSEM.LKEYS.KEYREL.PRED "_punir_v_1_rel" ].

replicar_1 := ind-cl-verb-lex &
  [ STEM < "replicar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_replicar_v_1_rel" ].

visitar_1 := trans-verb-lex &
  [ STEM < "visitar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_visitar_v_1_rel" ].

reconstruir_1 := trans-verb-lex &
  [ STEM < "reconstruir" >,
    SYNSEM.LKEYS.KEYREL.PRED "_reconstruir_v_1_rel" ].

estudar_1 := trans-verb-lex &
  [ STEM < "estudar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_estudar_v_1_rel" ].

privilegiar_1 := trans-verb-lex &
  [ STEM < "privilegiar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_privilegiar_v_1_rel" ].

contar_5 := nonrefl-com-obj-verb-lex &
  [ STEM < "contar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_contar_v_5_rel" ].

mimetizar_1 := trans-verb-lex &
  [ STEM < "mimetizar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_mimetizar_v_1_rel" ].

demover_1 := trans-verb-lex &
  [ STEM < "demover" >,
    SYNSEM.LKEYS.KEYREL.PRED "_demover_v_1_rel" ].

plantar_1 := trans-verb-lex &
  [ STEM < "plantar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_plantar_v_1_rel" ].

afastar_1 := refl-gen-obj-verb-lex &
  [ STEM < "afastar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_afastar_v_1_rel" ].

adiantar_3 := nom-acc-dat-ditransitive-verb-lex &
  [ STEM < "adiantar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_adiantar_v_3_rel" ].

mentir_1 := nonrefl-dat-obj-verb-lex &
  [ STEM < "mentir" >,
    SYNSEM.LKEYS.KEYREL.PRED "_mentir_v_1_rel" ].

dissolver_1 := trans-verb-lex &
  [ STEM < "dissolver" >,
    SYNSEM.LKEYS.KEYREL.PRED "_dissolver_v_1_rel" ].

reconciliar_1 := trans-verb-lex &
  [ STEM < "reconciliar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_reconciliar_v_1_rel" ].

inscrever_2 := refl-ine-obj-verb-lex &
  [ STEM < "inscrever" >,
    SYNSEM.LKEYS.KEYREL.PRED "_inscrever_v_2_rel" ].

repor_1 := trans-verb-lex &
  [ STEM < "repor" >,
    SYNSEM.LKEYS.KEYREL.PRED "_repor_v_1_rel" ].

Código no sample-eval-valence.py de e9f4bdb

@arademaker
Copy link
Collaborator

arademaker commented Dec 22, 2021

Em e9f4bdb acrescentei os mapeamentos das molduras extraídas do bosque no etc/valence.py para os tipos da PorGram.

leoalenc added a commit that referenced this issue Dec 25, 2021
leoalenc added a commit that referenced this issue Dec 25, 2021
leoalenc added a commit that referenced this issue Jan 4, 2022
@leoalenc
Copy link
Contributor Author

leoalenc commented Jan 4, 2022

Em 2190f23, incluí as seguintes funções:

  1. get_examples_of_verbtype, que extrai do Bosque os exemplos que correspondem a tipos da PorGram, com base nos mapeamentos de https://github.com/LR-POR/tools/tree/main/etc/ud-types.
    2.get_shortest_example, que extrai o exemplo mais curto de uma lista de exemplos.

leoalenc added a commit that referenced this issue Jan 4, 2022
@leoalenc
Copy link
Contributor Author

leoalenc commented Jan 4, 2022

f919564 contém mudanças e acréscimos que facilitam a outros usuários a criação de novas entradas da PorGram a partir de exemplos do Bosque.

@leoalenc
Copy link
Contributor Author

leoalenc commented Jan 4, 2022

Implementei, em 4f3b388, a função compute_stats, que cria tabela m*n, onde m é a aridade de uma moldura e n é a quantidade de molduras com essa aridade, relevante para detecção de molduras excessivamente longas que podem indicar erros de anotação, conforme UniversalDependencies/UD_Portuguese-Bosque#393.

@leoalenc
Copy link
Contributor Author

leoalenc commented Jan 5, 2022

Em dfb654a, implementei a função insert_examples que, aplicada sobre um arquivo TDL com entradas geradas automaticamente a partir de dados do UD_Portuguese-Bosque, insere, em cada entrada lexical, como docstring, o exemplo mais curto do verbo no tipo respectivo. Para tanto, é feita uma reconversão do tipo da PorGram para a lista de molduras correspondentes.
A função permite também extrair uma amostra aleatória do arquivo TDL dado, incorporando a funcionalidade de e9f4bdb, implementado por @arademaker.
Um exemplo extraído de um arquivo gerado pela função:

afastar_1 := refl-gen-obj-verb-lex &
  [ STEM < "afastar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_afastar_v_1_rel" ]
  """
  Como melhorar o ensino superior sem transformar as universidades em «escolões», onde os professores só repetem e se afastam da pesquisa?
  """. 

@leoalenc
Copy link
Contributor Author

Em 1581720, melhorei a função que extrai todas as preposições de todas as molduras valenciais. A lista de preposições revela potenciais erros de anotação do Bosque, problemas que detalharei em issue própria do respectivo repositório.

@leoalenc
Copy link
Contributor Author

Corrigir problema detectado em LR-POR/PorGram#59 (comment), causado pelo fato de alguns verbos como cópulas não estarem sendo incorporados ao dicionários de entradas existentes, levando a que o módulo de criação automática de entradas a partir de molduras do Bosque gere duplicatas.

@leoalenc
Copy link
Contributor Author

Com ed7dff9, fecho a questão. Os scripts ValenceExtractor.py e WriteVerbEntries.py permitem agora extrair todas as entradas existentes da PorGram e incluir novas entradas automaticamente a partir de dados do UD Bosque, atualizando os índices, conforme as seguintes issues:

LR-POR/PorGram#60
LR-POR/PorGram#66
LR-POR/PorGram#67
LR-POR/PorGram#69

Fecho a issue. Problemas que surgirem e melhoras que vierem a ser feitas nos scripts serão objeto de issues específicas.

@leoalenc
Copy link
Contributor Author

Em e9f4bdb acrescentei os mapeamentos das molduras extraídas do bosque no etc/valence.py para os tipos da PorGram.

Novos mapeamentos incluídos com ed7dff9.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants