Repository navigation
feat(variants): spec 005, ASCII transliteration and variant group_id - #38
Merged
Merged
Conversation
…antes Spec 005 e ADRs 0010 (regras de agrupamento), 0011 (correspondência sem acento) e 0012 (transliteração para ASCII); atualiza o roadmap. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…itas novas Spec 005, R1 (issue #4). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Spec 005, R2 (issue #4; ADR 0012). Apóstrofos e hífens tipográficos normalizados; ascii vazio quando algum caractere não tem transliteração; validate passa a exigir só ASCII sem maiúsculas. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…forme Spec 005, R3 (issue #4): Maria del Carmen, Van der Berg, Joana d'Arc; artigos só depois de partícula (Jia Le continua). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… e SSA) Spec 005, R6 e R7.3 (ADR 0011); nota na spec 002, R2. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tadas Spec 005, R4 (issue #4): por país pesa só o que a linha conta; no índice, votos de países; caixa publicada antes da gerada. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Spec 005, R5 (ADRs 0010 e 0011): same_item e, em sobrenomes, other_gender; depois transliteração e nome sem acento só quando inequívocos; P460 não junta; group_id é a menor chave. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Spec 005, R5 e R7.4: name_index recebe fontes e ligações; cli._build usa a união das fontes das observações e das ligações. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ratos das specs 001 e 002 Spec 005, R7.1, R7.2, R8 e R10. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Spec 005, R9.3 e R9.4 (issue #31): o pico do run vinha da conversão de todas as observações para colunas de uma vez; tools/bench_pipeline.py ganha --wikidata. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rom bridging items Phase 1 now joins nodes through their Wikidata items: a label of items in different groups (장 of 张 and 蒋) stays alone. Phase 2 skips a transliteration whose destination is ambiguous or already belongs to another name in the source script (見 -> 현 of 玄), and an unaccented name already grouped elsewhere. Adds optional rule counters for the spec measurement. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…articles capitalised ascii_form no longer returns capitals for ™, ℳ, ℡ or math letters, which failed validate and aborted the source. Hiragana with katakana is Hrkt; half-width ー is ignored; a particle in the last word stays capitalised (John Van). Explains the 1.2.0 bump in schema.py. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…view Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…JK readings on other items A transliteration source counts as a label of its item, so a source under items of different groups (Герман) is a homograph. A group whose transliterations reach two or more groups of other names joins none of them (Кінаш -> Kinach, Kinasz). Han, kana and hangul romanisations never join a name of another group or item (suk/suková and 术). Cyrillic to Latin joins across items stay (Омельчук -> Omelczuk). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…the 1.2.0 note Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Spec 005 (
005-variantes): escrita, forma ASCII, capitalização, forma de exibição e agrupamento de variantes (group_id). Status da spec: Em implementação.Spec:
docs/specs/005-variantes/spec.md, com plano e tarefas. ADRs novos: 0010 (regras de agrupamento), 0011 (correspondência sem acento), 0012 (transliteração para ASCII).O que mudou
detect_scripttrata letras de largura total e meia largura,々como han, ignoraー/ゝ/ヽ, devolveJpan(han com kana),Hrkt(hiragana com katakana, ISO 15924) eKore(hangul com han) e reconhece 20 escritas que eramZzzz.Dž,fi,ə,ŋ,ɔ) e cirílico (Ивановviraivanov,Марияviramariia). Apóstrofos e hífens tipográficos normalizados;casefoldde novo depois da NFKD (™,ℳ,℡,𝓜não geram maiúscula). Se um caractere não tem transliteração,asciifica vazio (sem forma parcial).validatepassa a exigir só ASCII sem maiúsculas.Maria del Carmen,Van der Berg,Joana d'Arc); artigos só depois de partícula (Jia Lenão muda); partícula na última palavra fica capitalizada (John Van).primary, edição e tipo escolhidos); no índice, votos de países, sem somarbirthscompopulation; a caixa publicada vence a capitalização gerada.variants.py. Nós (kind,name_key) com observação; junção pela chave, ligações tratadas como não dirigidas, ligações com ponta sem observação ignoradas. Fase 1 por itens: os itens se juntam só porother_genderem sobrenomes, e cada nó entra no grupo dos seus itens (porsame_item, origem de transliteração ouother_gender) só se todos já são um grupo; rótulo homógrafo de itens diferentes (장de张e蒋,Германde dois itens) fica sozinho. Fase 2: transliteração e nome sem acento, só quando inequívocos e sem concorrência (destino que já é nome de outro grupo ou rótulo de outro item com nome na escrita da origem não é anexado:見->현de玄;Герман->Herman/Hermanováentra quandoГерманé de um item só). Romanização de han, kana ou hangul nunca se anexa a nome de outro grupo ou item (suk/sukováe术); transliterações de um grupo que chegam a dois ou mais grupos de outros nomes não se anexam (leque:Кінаш->KinacheKinasz).different_fromimpede a junção. P460 não junta. Prenome e sobrenome nunca se juntam.group_idé o menorname_keydo grupo.strips_accents(R6): campo opcional emsources.yaml,truepara StatCan (nota 7), INE (nota metodológica: "eliminando los acentos") e SSA (0 de 104.819 nomes fora do ASCII).links(files), da spec 004 R4.1) e R2 (strips_accents), e na spec 001 R3/R5 (variant_links.parquet,group_id,ascii).cli._buildmonta a lista de fontes do manifesto com a união das fontes das observações e das ligações.SCHEMA_VERSION1.2.0.write_observations, que montava todas as colunas de uma vez. Agora a escrita vai em lotes de 250.000 linhas.tools/bench_pipeline.py --wikidata DIRinclui o Wikidata na medição.group_idem todas as linhas degiven_names.csvefamily_names.csv.Critérios de aceite e como foram verificados
tests/test_normalize.py::test_escrita_r1(佐々木Hani,ユーリKana,AnnaLatn,さくら子Jpan,김金Kore,ଦାସOrya e outros).test_forma_ascii_r2etest_forma_ascii_vazia_quando_algum_caractere_nao_tem_transliteracao. No lote real, só 8 nomes latinos e 332 cirílicos (letras do cazaque, tártaro e tadjique) ficam comasciivazio.test_particulas_em_caixa_uniforme; oES_CSVda CI agora trazFrancesc d'AssiseJoana d'Arc.test_indice_nao_soma_births_com_population,test_por_pais_edicao_antiga_nao_pesaetest_forma_publicada_vence_a_capitalizacao_gerada.tests/test_variants.py(Marie-Eve,장sem ponte entre张e蒋,見/현/玄,Герман/Herman/Hermanová, Иванов/Иванова/Ivanov, Paulo/Paula separados,Chenambíguo,Inesambíguo,different_fromnas duas fases, tipos diferentes, P460, ligação sem observação, junção pela chave, independência da ordem e da direção, com transliteração e sem acento embaralhados).run --offlinesobre as amostras:test_build_links_preenche_group_id,test_manifesto_lista_a_fonte_das_ligacoes,schema_version1.2.0 e o passo da CI (tests/test_ci.py).strips_accents:tests/test_sources_extensoes.py./usr/bin/time -l, pico de memória física; master e branch medidas nas mesmas condições):tools/bench_pipeline.py --wikidata(ingest e build em etapas): 87,6 s mais 78,0 s, pico de 2.881 MB, dentro dos limites.different_from. Grupos com rótulos de itens diferentes, contando também os QIDs das origens de transliteração e sem contarother_gender: 87 prenomes e 59 sobrenomes (eram 186 e 273 antes desta rodada), quase todos o mesmo nome em itens duplicados de línguas diferentes ligados por cirílico -> latim (Алексей/Aleksei,Омельчук/Omelczuk,Родин/Родін/Rodin); dois prenomes têm rótulo CJK no próprio item (요셉,威廉).Marie-Eve/Marie-Ève,Jose/JoséeJosee/Joséeficam juntos.uv synceuv run pytest -q(748 testes) passam localmente; a CI roda neste PR.Decisões tomadas sozinho (custo se estiverem erradas)
Ivanov/Iwanow, cognatos) ficam em grupos separados; quem precisar delas usavariant_links(Cognatos pela P460 (said to be the same as) sem componente gigante #37).other_gendersó junta sobrenomes. Custo:Paulo/Paulanão se agrupam; se a intenção for agrupá-los, basta mudar a tabelaFASE_1e subir a versão menor.InesentreInèseInés;Ivanovdo russo e do ucraniano) ficam sem grupo.strips_accentssó pela medição, sem documento da SSA. Custo: se algum nome não tem acento por escolha da família, ele se junta à forma acentuada, o que ainda é variante do mesmo nome.group_id= menorname_keydo grupo. É legível e determinístico, mas muda entre releases quando entra um nome com chave menor.asciivazio quando falta transliteração. Custo: ucranianoГvirag; nomes com letras fora das tabelas ficam semascii.Герман->Herman(grupo latino comHermanová). A regra implementada só bloqueia quando o grupo ou item do destino tem um nome na escrita da origem. Na segunda revisão, romanização de CJK passou a nunca se anexar a nome de outro item, e cirílico -> latim continua juntando entre itens. Custo se errado: itens duplicados de línguas diferentes (russo e ucraniano) continuam juntos pela transliteração.Hrkt, e nãoJpan;々e〆contam como han pela propriedade Script do Unicode.ParquetWriter): o arquivo passa a ter vários grupos de linhas, com o mesmo conteúdo.strips_accentsemsources.pye a escrita em lotes emio.py. O conceito é de nomes, mas o registro de fontes vai mudar de repositório.Issues
Revisão independente (rodadas de correções)
Commits
554bfc9(agrupamento por itens e concorrência),0aa499c(ASCII sem maiúsculas depois da NFKD,Hrkt,ー, partícula final) e276792d(spec R1, R2, R3, R5, R8; ADR 0010; nota degroup_idinstável entre releases na spec 001; roadmap com 003e e 004 mescladas). Segunda rodada:c417a65(homógrafos escondidos pela origem de transliteração, leque e romanização de CJK) e6d5af76(números de R5.8 e ADR 0010; R8 e o comentário deschema.pydizem quevalidateconferescriptpor igualdade easciisó como ASCII minúsculo). A spec R8 explica a 1.2.0:asciipode ficar vazio em latim enamemuda;ingestebuilddevem usar a mesma versão.Closes #4
Closes #31
Criadas: #35 (transliteração de grego, hangul, kana e demais escritas), #36 (
group_idemby_countrye junções aplicadas), #37 (cognatos pela P460).🤖 Generated with Claude Code