LR-POR / PorGram

A Portuguese HPSG Grammar
Other
2 stars 1 forks source link

construct lexical entries for transfer verbs #64

Open leoalenc opened 2 years ago

leoalenc commented 2 years ago

O objetivo desta issue, desdobramento de #19, é construir entradas de verbos de transferência, de que doar constitui exemplo prototípico. O grupo inclui não somente verbos de transferência de posse, mas, também, verbos de comunicação, que expressam transferência de informação de um AGENTE para um RECIPIENTE. Na PorGram, temos:

~/hpsg/por$ grep -En "^doar" *.tdl

lexicon.tdl:369:doar := trans-verb-lex & prep-obj-verbs.tdl:1:doar_1 := nom-acc-rec-ditransitive-verb-lex &

Verbos com o tipo nom-acc-rec-ditransitive-verb-lex são ditransitivos (ou bitransitivos), tradicionalmente chamados de transitivos diretos e indiretos. O RECIPIENTE pode realizar-se tanto com a preposição de dativo a quanto com para, esta última restrita (ou pelo menos mais comum) ao PB. Para povoar esse tipo, precisamos inicialmente extrair os verbos do Bosque usando este script, apresentado no artigo submetido ao PROPOR:

valences = joblib.load("valences_dict.joblib")
acc_dat_verbs=set()
for e in ['<VERB:act,iobj:a,obj>',
        '<VERB:act,nsubj,iobj:a,obj>',
        '<VERB:pass,nsubj,iobj:a>',
        '<VERB:act,nsubj,iobj,obj>',
        '<VERB:act,iobj,obj>','<VERB:pass,iobj>',
        '<VERB:pass,nsubj,iobj>']:
    verbs=valences.get(e)
    if verbs:
        acc_dat_verbs.update(verbs)

Em seguida, precisamos construir variante desse script substituindo iobj:a por iobj:para:

valences = joblib.load("valences_dict.joblib")
acc_goal_verbs=set()
for e in ['<VERB:act,iobj:para,obj>',
        '<VERB:act,nsubj,iobj:para,obj>',
        '<VERB:pass,nsubj,iobj:para>']:
    verbs=valences.get(e)
    if verbs:
        acc_goal_verbs.update(verbs)

Finalmente, construímos as entradas para a união dos dois conjuntos gerados pelos dois scripts. @arademaker e @wellington36 , uma questão interessante é verificar a consistência do Bosque na anotação desse tipo de verbo. Por exemplo, em vez de iobj, será que teríamos também obj:a ou obj:para nas molduras do segundo script (excluindo os casos de iobj sem preposição, que são clíticos dativos)? Notem que o clítico de iobj deve sempre ser dativo. Essa é mais uma forma de detectar possíveis erros de anotação. Verbos que somente ocorrem no corpus com iobj:para ou iobj:a receberão tipos mais específicos, respectivamente:

nom-acc-goal-ditransitive-verb-lex

nom-acc-dat-ditransitive-verb-lex

Uma inspeção manual, contudo, poderá reclassificar esses verbos como nom-acc-rec-ditransitive-verb-lex . Por exemplo, vamos supor que encontremos no Bosque:

A prefeitura cedeu o prédio abandonado para uma ONG.

Intuitivamente, sabemos que poderíamos parafrasear essa frase como:

A prefeitura cedeu o prédio abandonado a uma ONG.

O mesmo sentido do verbo admite também clíticos dativos:

A prefeitura lhes cedeu o prédio abandonado.

Esses dois últimos exemplos evidenciam que ceder enquadra-se no tipo nom-acc-rec-ditransitive-verb-lex.

leoalenc commented 2 years ago

@analununes e @arademaker , para construir as molduras dos scripts, parti do pressuposto de que elas não codificam variações de ordem de constituintes, mas seguem um ordenamento pré-definido. Podem checar se isso de fato ocorre no programa em Python? Ou seja, dados os exemplos:

A uma ONG a prefeitura cedeu o prédio abandonado . A prefeitura cedeu o prédio abandonado a uma ONG. A prefeitura cedeu a uma ONG o prédio abandonado. O prédio abandonado a prefeitura cedeu a uma ONG.

a moldura correspondente seria:

'<VERB:act,nsubj,iobj:a,obj>'

É isso mesmo? Existiria também a variante abaixo?

'<VERB:act,nsubj,obj,iobj:a>'

analununes commented 2 years ago

@leoalenc, com seu script extraí os seguintes verbos:

_acc_goalverbs

representar, aumentar, dar, emprestar, reorientar, preparar, conceder, elevar, enviar, reduzir, abrir, indicar, encaminhar, tirar, nomear

_acc_datverbs

devolver, explicar, garantir, lançar, recordar, relatar, ganhar, encomendar, cobrar, rasgar, traçar, fazer, assistir, mover, interessar, pagar, preferir, creditar, transmitir, reconhecer, conceder, atribuir, apontar, encaminhar, revelar, saudar, adaptar, passar, confirmar, dedicar, denunciar, roubar, resistir, tirar, dispensar, conectar, proporcionar, atirar, juntar, exprimir, suscitar, adiantar, cortar, lembrar, restringir, dar, acrescentar, ensinar, conferir, distribuir, trazer, confiar, entregar, ligar, meter, doar, sobrepor, rematar, retirar, comprovar, adubar, possibilitar, dificultar, manifestar, apresentar, levar, jurar, provocar, atenuar, comunicar, arriscar, marcar, fornecer, custar, propor, prestar, obrigar, enriquecer, associar, sugerir, escrever, pedir, limitar, destinar, propôr, tomar, reduzir, dever, submeter, imprimir, remeter, deixar, aplicar, colocar, condenar, acariciar, alargar, solicitar, chegar, enviar, caber, mostrar, permitir, deitar, preparar, dizer, impor, mangueirar, oferecer, criar, alegar, exigir, endereçar, pôr, decretar, negar, prender, unir, tapar, abraçar, reconduzir, documentar, comparar, chamar, desafiar, acentuar, abrir, vender, apor, opor, disponibilizar, instaurar

fazendo a interseção dos grupos acima: nom-acc-rec-ditransitive-verb-lex

[' enviar', ' encaminhar', ' conceder', ' dar', ' tirar', ' reduzir', ' preparar', ' abrir']

Gerei as entradas desses verbos usando a delphin, apenas um teste: entradas.txt

leoalenc commented 2 years ago

@analununes, muito obrigado! As entradas têm um problema: você precisa colocar as strings entre aspas! Ou seja, em vez de

endereçar := nom-acc-dat-ditransitive-verb-lex &
  [ STEM < endereçar >,
    SYNSEM.LKEYS.KEYREL.PRED _endereçar_v_rel_ ].

precisamos de

endereçar := nom-acc-dat-ditransitive-verb-lex &
  [ STEM < "endereçar" >,
    SYNSEM.LKEYS.KEYREL.PRED "_endereçar_v_rel_" ].
leoalenc commented 2 years ago

@analununes e @arademaker, seria extremaente importante organizar os resultados extraídos do Bosque numa tabela no seguinte formato, para facilitar a validação manual dos dados:

lemma number of occurrences with type type example sentence
tapar 1 nom-acc-dat-ditransitive-verb-lex No momento em que regressava a casa, o indivíduo lançou-se sobre ela, tapou-lhe a boca, agrediu-a e atirou-a ao chão.

Escolher para a última coluna a menor sentença exemplificativa. No caso, existe uma única sentença com o verbo tapar com o tipo nom-acc-dat-ditransitive-verb-lex.

analununes commented 2 years ago

@leoalenc, consegui colocar entre aspas:

entradas.txt

Estou tentando construir a tabela, ainda não consegui, não sei como extrair a informação de número de ocorrências :(

leoalenc commented 2 years ago

@leoalenc, consegui colocar entre aspas:

entradas.txt

Estou tentando construir a tabela, ainda não consegui, não sei como extrair a informação de número de ocorrências :(

@analununes, obrigado. Realmente, parece bem difícil extrair o número de ocorrências, dada a maneira como essa featurer foi implementada. Também não consegui. Talvez fosse o caso de mudar o programa em Python para que o atributo example de <class 'valences.Valence'> fosse uma lista de strings e não uma string. Você poderia abrir issue a respeito no repositório tools para alterar isso? O que acha, @arademaker?

leoalenc commented 2 years ago

@analununes e @arademaker , entendi agora como foi implementada a funcionalidade do programa que permite extrair os exemplos de um dado verbo com dada moldura: o objeto Verbo armazena uma lista com as molduras onde ocorre, cada uma das quais possui um atributo Exemplo. Por isso, para saber a quantidade de exemplos com cada moldura, basta iniciar um contador. Vejam:

>>> i=0
>>> for c in situar.valences:
    if c.valence_category == '<VERB:act,nsubj,expl>':
        i+=1
        print(c.example)

As metas quanto à inflação é conseguir que esta, até ao final de 1992, se situe nos 12 por cento ao mês.
Mary Jo White considerou no entanto que as empresas não estavam protegidas pelo facto de a sua sede se situar fora dos Estados Unidos.
Confrontado com o pedido da mudança toponímica, o município viseense, através do seu líder, Fernando Ruas, oficiou a Junta no sentido de dar o nome de Luís Martins a uma outra avenida que atravessa a freguesia e que se situa num troço da Entrada Nacional 2 gerido pela Câmara -- o que não agradou aos elementos da autarquia repesense.
Adriana Varejão situa-se no campo das reflexões sobre o cruzamento de culturas.
>>> i
4
>>>  

Portanto, ignorem minha sugestão de mudança no comentário anterior.

analununes commented 2 years ago

@leoalenc muito obrigada pela ajuda! Construí a tabela:

tabela.txt