Closed leoalenc closed 1 month ago
@leoalenc , dei uma pausa na implementação do script de captura dos casos análogos da tarefa 2 para consultar o Grew-Match. Usando a consulta abaixo, é possível ver que, no banco de árvores v2.14, há 57 ocorrências de verbos com iobj
mas sem obj
.
pattern {
X [upos = VERB];
X -[iobj]-> Y;
}
without { X -[obj]-> O }
Entretanto, alguns dos verbos das ocorrências têm ccomp
, o que me deixou na dúvida sobre filtrar esse caso ou não. Talvez seja por influência da gramática tradicional; vou investigar. Modificando levemente a consulta acima, usei a consulta abaixo para concluir que há apenas 10 ocorrências de verbos na v2.14 com iobl
mas sem obj
e sem ccomp
.
pattern {
X [upos = VERB];
X -[iobj]-> Y;
}
without { X -[obj|ccomp]-> O }
Vou retomar amanhã a implementação do script para termos as informações exatas sobre a versão do banco em desenvolvimento aqui no nosso repositório.
@leoalenc , dei uma pausa na implementação do script de captura dos casos análogos da tarefa 2 para consultar o Grew-Match. Usando a consulta abaixo, é possível ver que, no banco de árvores v2.14, há 57 ocorrências de verbos com
iobj
mas semobj
.pattern { X [upos = VERB]; X -[iobj]-> Y; } without { X -[obj]-> O }
Entretanto, alguns dos verbos das ocorrências têm
ccomp
, o que me deixou na dúvida sobre filtrar esse caso ou não. Talvez seja por influência da gramática tradicional; vou investigar. Modificando levemente a consulta acima, usei a consulta abaixo para concluir que há apenas 10 ocorrências de verbos na v2.14 comiobl
mas semobj
e semccomp
.pattern { X [upos = VERB]; X -[iobj]-> Y; } without { X -[obj|ccomp]-> O }
Vou retomar amanhã a implementação do script para termos as informações exatas sobre a versão do banco em desenvolvimento aqui no nosso repositório.
@heliolbs , excelente trabalho! Conforme a teoria das dependências universais, nos casos de que estamos tratando,ccomp equivale a um obj. Aquela função é como se fosse um objeto direto realizado através de uma sentença. Os casos que realmente demandam atenção são mesmo esses que não possuem nem obj nem ccomp. Esses casos não constituem necessariamente erros, porque pode ser que tenhamos um obj implícito. Precisam ser verificados manualmente um a um.
@heliolbs , excelente trabalho! Conforme a teoria das dependências universais, nos casos de que estamos tratando,ccomp equivale a um obj. Aquela função é como se fosse um objeto direto realizado através de uma sentença. Os casos que realmente demandam atenção são mesmo esses que não possuem nem obj nem ccomp.
Que bom, @leoalenc . Então minha intuição estava certa. Com relação à verificação do banco de árvores atual, após incluir e rodar a função abaixo dentro do módulo AnnotateConllu
do meu clone local, obtive resultados idênticos aos da consulta à v2.14 pelo Grew-Match. A única exceção foi a própria sentença desta questão, Avila2021:0:0:542
, que já havia sido corrigida por você. Isso indica que nenhuma sentença que satisfaça as condições do cenário avaliado aqui foi incluída no banco de árvores após o lançamento da v2.14. A sentença Rodrigues1890:1-2-2:101:101
aparece duas vezes, pois há dois verbos nela que satisfazem o cenário.
Esses casos não constituem necessariamente erros, porque pode ser que tenhamos um obj implícito. Precisam ser verificados manualmente um a um.
Vou verificar cada sentença a procura de objs implícitos.
Navarro2016:0:0:206
Avila2021:4:1:25
Avila2021:4:2:26
Avila2021:0:0:36
Avila2021:0:0:241
Avila2021:0:0:562
Rodrigues1890:1-2-2:101:101
Rodrigues1890:1-2-2:101:101
Magalhaes1876:2:24:67
def getSentencesIssue454():
"""
Scan the treebank for sentences with verbs governing iobj but not either obj or ccomp. Returns a list of sent_id values. The current results are identical to what Grew-Match returns.
>>> getSentencesIssue454()
['Navarro2016:0:0:206', 'Avila2021:4:1:25', 'Avila2021:4:2:26', 'Avila2021:0:0:36', 'Avila2021:0:0:241', 'Avila2021:0:0:562', 'Rodrigues1890:1-2-2:101:101', 'Rodrigues1890:1-2-2:101:101', 'Magalhaes1876:2:24:67']
"""
with open(TREEBANK_PATH, 'r', encoding='utf-8') as f:
txt = f.read()
tree_list_txt = txt.split('\n\n')
sent_id_pattern = re.compile('# sent_id = (.*)')
line_pattern = re.compile(r'\n(\d{1,2})\t.*\t.*\t([A-Z2]*)\t[A-Z2]*\t.*\t(\d{1,2})\t([a-z]*)\t.*\t.*')
yrl = []
for arvore in tree_list_txt:
verbs = []
ccomp_heads = []
obj_heads = []
iobj_heads = []
tree = {
'verbs' : verbs,
'ccomp_heads' : ccomp_heads,
'obj_heads' : obj_heads,
'iobj_heads' : iobj_heads
}
first_line = arvore.split('\n')[0]
search_result = sent_id_pattern.search(first_line)
if search_result:
sent_id = search_result.group(1)
tree.update({'sent_id' : sent_id})
yrl.append(tree)
lines= re.findall(line_pattern, arvore)
for line in lines:
if line[1] == 'VERB':
verbs.append(line[0])
if line[3] == 'ccomp':
ccomp_heads.append(line[2])
if line[3] == 'obj':
obj_heads.append(line[2])
if line[3] == 'iobj':
iobj_heads.append(line[2])
sentences = []
for arvore in yrl:
verbs = arvore['verbs']
ccomp_heads = arvore['ccomp_heads']
obj_heads = arvore['obj_heads']
iobj_heads = arvore['iobj_heads']
for verb_id in verbs:
if verb_id in iobj_heads and verb_id not in obj_heads and verb_id not in ccomp_heads:
sentences.append(arvore['sent_id'])
return sentences
Sentenças extraídas:
Navarro2016:0:0:206
obj
do verbo meẽ 'dar' implícito, mencionado na oração anterior
Avila2021:4:1:25
A mesmo situação acima.
Avila2021:4:2:26
Há um objeto direto nulo anafórico regido por xari 'entregar' na segunda oração, correferente do objeto implícito da oração anterior.
Avila2021:0:0:36
O verbo encaixado meẽ 'dar' é ccomp
, não xcomp
. Correção feita. Ver #230.
Avila2021:0:0:241
Há um objeto direto nulo anafórico.
Avila2021:0:0:562
Objeto direto nulo anafórico.
Rodrigues1890:1-2-2:101:101
Objeto direto nulo anafórico.
Rodrigues1890:1-2-2:101:101
Objeto direto nulo anafórico.
Magalhaes1876:2:24:67
Aqui parece ocorrer uma variante do verbo nheẽ 'falar' sem objeto direto. Talvez seja o caso de corrigir o iobj
para obl
.
Em
Avila2021:0:0:542
, o nó 8 tem como núcleo regente o nó 9, fazendo com que o verbo que regeiobj
não governe também umobj
, o que normalmente não deve ocorrer (ver https://universaldependencies.org/u/dep/iobj.html). Independentemente disso, pusanga 'remédio' é claramente um argumento de meẽ 'dar' (nó 5).
- [x] corrigir
head
do nó 8 (@leoalenc )- [ ] levantar casos análogos de erro (@heliolbs )
A tarefa 2 gerou #460. Portanto, vou considerar essa tarefa concluídas e fechar a presente questão após o commit abaixo.
Em
Avila2021:0:0:542
, o nó 8 tem como núcleo regente o nó 9, fazendo com que o verbo que regeiobj
não governe também umobj
, o que normalmente não deve ocorrer (ver https://universaldependencies.org/u/dep/iobj.html). Independentemente disso, pusanga 'remédio' é claramente um argumento de meẽ 'dar' (nó 5).head
do nó 8 (@leoalenc )