CompLin / nheengatu

Tools and resources for the computational processing of Nheengatu (Modern Tupi)
7 stars 1 forks source link

preferência de parataxes em série em vez de em paralelo? #605

Open heliolbs opened 2 weeks ago

heliolbs commented 2 weeks ago

A partir deste comentário de @leoalenc em #599 a respeito da preferência de adoção da orientação UD 'nested-coordination' em relação à orientação UD side-by-side-run-on-sentences, decidi investigar o quanto essa diretriz está sendo seguida ao longo do corpus.

Neste comentário da mesma issue, relatei a consulta à versão 2.14 do treebank pelo Grew-Match, cujo resultado indicou 95 ocorrências de três nós encadeados por duas parataxes e apenas 14 ocorrências de pares de parataxes que compartilhavam o mesmo head.

heliolbs commented 2 weeks ago

As três funções abaixo foram usadas para analisar todas as sentenças do treebank, com qualquer quantidade de ocorrências de parataxe.

import Yauti
sents = Yauti.extractConlluSents(Yauti.TREEBANK_PATH)

def analyse_parataxes(sents):

    mapeamento = {}

    for sent in sents:

        parataxis = sent.filter(deprel='parataxis')

        tokenList = parataxis

        if len(parataxis) > 1:

            for p in parataxis:
                if sent.filter(id=p['head']):
                    t = sent.filter(id=p['head'])[0]
                if t not in parataxis:
                    tokenList.append(t)

            token_pairs = get_token_pairs(tokenList)

            sequence = connect_token_pairs(token_pairs)

            if len(tokenList) == len(sequence[0]):
                pattern = 'Série'
            else:
                pattern = 'Paralelo'

            mapeamento.update({sent.metadata['sent_id'] : {'sequence' : sequence[0], 'padrão' : pattern}})

    return mapeamento

def get_token_pairs(sent):
    token_pairs = []

    for tokenA in sent:
        for tokenB in sent:
            if tokenA['id'] == tokenB['head'] and tokenB['deprel'] == 'parataxis':
                token_pairs.append([tokenA['id'], tokenB['id']])

    return token_pairs

def connect_token_pairs(pairs):

    if len(pairs) == 0:
        return [[]]

    elif len(pairs) == 1:
        sequence = pairs

    else:
        sequence = []
        for pairA in pairs:
            for pairB in pairs:
                if pairA[1:] == pairB[:-1]:
                    sequence.append(sorted(list(set(pairA+pairB))))

        return(connect_token_pairs(sequence))

    return sequence
heliolbs commented 2 weeks ago

O código abaixo se refere à execução das funções acima e à quantificação dos resultados.

mapa = analyse_parataxes(sents)

contagem = {}

for k, v in mapa.items():
    if v['padrão'] in contagem.keys():
        contagem[v['padrão']] += 1
    else:
        contagem.update({ v['padrão'] : 1})

contagem
# {'Série': 81, 'Paralelo': 62}

contagem = {}

for k, v in mapa.items():
    if 'Casasnovas2006' in k:
        if v['padrão'] in contagem.keys():
            contagem[v['padrão']] += 1
        else:
            contagem.update({ v['padrão'] : 1})

contagem
# {'Paralelo': 24, 'Série': 13}
heliolbs commented 2 weeks ago

Trago para cá a sinopse que adiantei em #599 .

Minha consulta me diz que há 143 sentenças no treebank com pelo menos duas ocorrências de parataxis. Dentre elas, 62 sentenças seguem seu padrão em 'série' (encadeamento de parataxes), mas 81 têm pelo menos uma parataxe não encadeada, isto é, ou seguem o padrão em 'paralelo' ou se estruturam de forma híbrida, mesclando os dois padrões . Algumas poucas têm parataxes completamente desconectadas umas das outras (padrão em paralelo). Dessas 143 sentenças, 37 são do Casasnovas (2006): sendo 24 em paralelo e 13 em série. Vou abrir nova issue para expor meu código e documentar a investigação da aplicação dessa diretriz.

Obs.: A versão consultada foi do antepenúltimo commit. Acredito que seus dois últimos commits não afetaram esses resultados.

Padrão Paralelo (ou Híbrido) Série Total
Sentenças do corpus 81 (57%) 62 (43%) 143
Sentenças de Casasnovas2006 24 (65%) 13 (35%) 37

Originally posted by @heliolbs in comment

heliolbs commented 2 weeks ago

As células da coluna 'Encadeamento' representam os ids encadeados por parataxes naquela sentença. As células vazias nessa coluna indicam sentenças cujas parataxes são completamente desconectadas umas das outras. O código abaixo gerou automaticamente as linhas de conteúdo da tabela abaixo já com a formatação em markdown:

for k, v in mapa.items():
    print(f"`{k}`|{str(v['sequence'])[1:-1]}|{v['padrão']}")
Sentença Encadeamento Padrão
Avila2021:0:0:38 13, 20, 26 Série
Avila2021:0:0:46 4, 10, 16 Série
Avila2021:0:0:64 3, 8, 11 Série
Avila2021:0:0:69 2, 6, 10 Série
Avila2021:0:0:87 2, 8, 16, 21 Série
Avila2021:0:0:93 2, 4, 6 Série
Avila2021:0:0:98 9, 12, 19 Série
Avila2021:0:0:106 Paralelo
Avila2021:0:0:109 5, 9, 18, 21 Série
Avila2021:0:0:124 6, 11, 16, 28 Série
Avila2021:0:0:127 Paralelo
Avila2021:0:0:129 2, 9, 14 Série
Avila2021:13:1:130 6, 12, 15 Série
Avila2021:0:0:134 1, 5, 9 Série
Avila2021:0:0:139 1, 4, 7 Série
Avila2021:0:0:143 3, 9, 14 Série
Avila2021:0:0:177 2, 7, 16, 21 Série
Avila2021:0:0:179 2, 7, 12 Série
Avila2021:19:1:181 6, 9, 15, 18 Paralelo
Avila2021:0:0:183 4, 8, 13 Série
Avila2021:0:0:189 2, 4, 6, 10, 25 Série
Avila2021:0:0:213 13, 19, 21 Paralelo
Avila2021:0:0:224 4, 10, 12 Série
Avila2021:24:2:246 2, 4, 5 Série
Avila2021:0:0:261 2, 13, 18 Série
Avila2021:0:0:306 Paralelo
Avila2021:0:0:310 3, 11, 13, 17, 21, 27, 29, 32, 34, 35 Série
Avila2021:0:0:312 5, 10, 13 Paralelo
Avila2021:0:0:330 1, 6, 8 Série
Avila2021:29:5:334 2, 6, 9 Série
Avila2021:0:0:366 12, 15, 19, 20 Paralelo
Avila2021:0:0:367 4, 8, 12 Série
Avila2021:0:0:376 11, 25, 34 Série
Avila2021:0:0:380 Paralelo
Avila2021:0:0:382 9, 15, 19 Paralelo
Avila2021:0:0:387 1, 7, 12, 18 Série
Avila2021:0:0:405 1, 9, 16 Série
Avila2021:0:0:425 3, 6, 11, 18 Série
Avila2021:0:0:428 1, 9, 13 Série
Avila2021:0:0:436 2, 4, 11, 16, 20 Série
Avila2021:0:0:439 9, 13, 17 Série
Avila2021:0:0:461 4, 9, 11 Série
Avila2021:0:0:464 5, 11, 14 Paralelo
Avila2021:0:0:503 2, 4, 9 Série
Avila2021:0:0:525 4, 6, 12 Série
Avila2021:0:0:565 1, 5, 11 Série
Avila2021:0:0:580 2, 7, 9 Série
Avila2021:0:0:603 6, 11, 16, 22, 24 Série
Avila2021:0:0:613 Paralelo
Avila2021:0:0:619 2, 5, 11 Série
Avila2021:0:0:636 2, 5, 11 Série
Avila2021:0:0:673 3, 8, 10, 18 Série
Avila2021:0:0:678 Paralelo
NTLN2019:0:0:3 Paralelo
NTLN2019:0:0:6 14, 17, 22 Paralelo
NTLN2019:0:0:7 3, 5, 17 Série
NTLN2019:1:1:8 1, 3, 5 Série
NTLN2019:4:1:31 2, 12, 13, 16, 20 Série
NTLN2019:0:0:34 7, 24, 29 Série
NTLN2019:5:2:38 Paralelo
NTLN2019:5:3:39 Paralelo
NTLN2019:0:0:49 12, 15, 18 Paralelo
NTLN2019:0:0:50 5, 13, 18, 23 Paralelo
Cruz2011:0:0:95 Paralelo
TerraPreta2013:1:6:6 10, 14, 25 Série
Casasnovas2006:1:5:5 Paralelo
Casasnovas2006:1:6:6 12, 17, 23 Paralelo
Casasnovas2006:1:13:13 13, 17, 22 Paralelo
Casasnovas2006:2:2:16 1, 3, 5, 6 Série
Casasnovas2006:2:5:19 3, 4, 5 Série
Casasnovas2006:2:10:24 3, 5, 10 Paralelo
Casasnovas2006:3:9:33 11, 13, 15, 17, 21, 22 Série
Casasnovas2006:3:10:34 4, 6, 11 Paralelo
Casasnovas2006:4:10:45 6, 8, 17 Série
Casasnovas2006:4:13:48 6, 12, 20 Série
Casasnovas2006:5:6:54 12, 13, 14 Paralelo
Casasnovas2006:5:7:55 Paralelo
Casasnovas2006:5:8:56 Paralelo
Casasnovas2006:5:10:58 Paralelo
Casasnovas2006:6:5:64 Paralelo
Casasnovas2006:8:7:75 4, 9, 10 Série
Casasnovas2006:8:8:76 Paralelo
Casasnovas2006:8:10:78 6, 7, 10 Série
Casasnovas2006:8:14:82 Paralelo
Casasnovas2006:9:2:86 1, 5, 11 Série
Casasnovas2006:9:13:97 1, 2, 9, 10 Série
Casasnovas2006:9:17:101 Paralelo
Casasnovas2006:9:22:106 Paralelo
Casasnovas2006:9:25:109 Paralelo
Casasnovas2006:9:32:116 Paralelo
Casasnovas2006:10:7:126 Paralelo
Casasnovas2006:11:14:145 8, 17, 18 Série
Casasnovas2006:11:15:146 Paralelo
Casasnovas2006:11:27:158 Paralelo
Casasnovas2006:12:1:167 Paralelo
Casasnovas2006:12:7:173 9, 14, 23 Série
Casasnovas2006:12:8:174 Paralelo
Casasnovas2006:12:17:183 Paralelo
Casasnovas2006:12:21:187 Paralelo
Casasnovas2006:12:26:192 Paralelo
Casasnovas2006:12:27:193 2, 6, 15 Série
Casasnovas2006:12:28:194 6, 10, 17 Série
Rodrigues1890:1-1-4:3:103 Paralelo
Rodrigues1890:1-1-4:4:104 3, 7, 8 Série
Rodrigues1890:1-1-6:0:0 2, 9, 12 Série
Rodrigues1890:1-1-11:84:84 Paralelo
Rodrigues1890:1-2-2:101:101 17, 24, 27, 32 Paralelo
Rodrigues1890:1-2-2:120:120 2, 10, 12 Paralelo
Rodrigues1890:1-2-3:130:130 Paralelo
Rodrigues1890:1-2-3:734:734 7, 10, 24 Série
Rodrigues1890:2-5:4:104 3, 5, 9 Série
Rodrigues1890:2-10:40:40 8, 16, 23 Série
Rodrigues1890:2-14:6:506 Paralelo
Magalhaes1876:1:6:6 4, 8, 14, 19 Série
Magalhaes1876:1:14:14 9, 16, 19 Paralelo
Magalhaes1876:1:16:16 2, 5, 11 Série
Magalhaes1876:1:37:37 2, 5, 11, 16 Série
Magalhaes1876:1:39:39 1, 4, 7 Série
Magalhaes1876:1:43:43 6, 9, 16 Paralelo
Magalhaes1876:2:3:46 Paralelo
Magalhaes1876:2:8:51 14, 16, 24 Paralelo
Magalhaes1876:3:3:203 2, 4, 7 Série
Magalhaes1876:12:100:3000 Paralelo
Amorim1928:19:75:75 5, 10, 15 Série
Amorim1928:21:5:1000 Paralelo
Amorim1928:21:43:43 2, 7, 14 Série
Amorim1928:6:382:382 2, 10, 12 Série
Amorim1928:8-1:3:3003 4, 9, 19, 29, 36 Série
Amorim1928:8:64:64 9, 16, 23 Série
Amorim1928:8-1:30:3033 7, 12, 16 Série
Amorim1928:2:221:5620 5, 12, 17 Série
Amorim1928:2:102:102 Paralelo
Amorim1928:6-1:350:350 Paralelo
Amorim1928:3:200:200 Paralelo
Amorim1928:3:201:201 Paralelo
Amorim1928:10:150:150 2, 6, 11 Série
Amorim1928:12:40:40 Paralelo
Amorim1928:33:132:132 3, 11, 12, 19 Série
Costa1909:1:12:12 2, 10, 12 Série
Aguiar1898:9:1:1001 5, 14, 22 Paralelo
Aguiar1898:21-6:6:546 2, 14, 20 Série
Aguiar1898:21-6:7:547 2, 7, 12, 15, 19, 23, 32 Série
Leetra2015:8:100:100 1, 12, 25, 26 Paralelo