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

Integra base para segmentadores e segmentador da AMA #64

Merged
merged 5 commits into from
Dec 13, 2023
Merged

Commits on Dec 13, 2023

  1. Configuration menu
    Copy the full SHA
    4b5616d View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    e08ba51 View commit details
    Browse the repository at this point in the history
  3. Cria módulo de segmentação para suportar novos segmentadores

    - Cria módulo `segmentation` para organizar o código dos segmentadores
    - O módulo segue o padrão de classe base e classes derivadas para cada
      segmentador específico
    - O primeiro segmentador base é o `AssociationSegmenter` para segmentar
      documentos de associações de municípios
    - Uma dataclass para segmentos `GazetteSegment` também foi criada
    - Os segmentadores são instanciados por meio de uma fábrica
      `get_segmenter`
    Jefersonalves authored and ogecece committed Dec 13, 2023
    Configuration menu
    Copy the full SHA
    acadf0e View commit details
    Browse the repository at this point in the history
  4. Consolida as funcionalidades de segmentação de associações

    Deleta módulo associations para usar o segmentation
    
    Remove arquivo sem uso
    
    Move funções relacionadas aos territórios para um único arquivo
    
    Move arquivo que lida com territórios para o módulo utils
    
    Atualiza referências para o módulo territories
    
    Troca referência para o módulo segmentation
    
    Remove atribuição da url para usar a url da associação
    
    Remove uso dos territórios nos módulos superiores aos de segmentação
    
    Remove tratamento de exceção para nomes errados na limpeza
    
    Refatora forma de obtenção dos dados dos territórios
    
    Corrige type hinting da segmentação da AMA
    
    Adiciona chamada para obter os territórios para os segmentadores
    
    Corrige type hint no módulo segmentation factory
    
    Remove tratamentos específicos de associações do módulo territories
    
    Adapta segmentador da AMA para obter o territory id dos segmentos
    
    Correções no processo de extração
    
    Remove construção da url ao fazer upload do conteúdo dos segmentos
    Jefersonalves authored and ogecece committed Dec 13, 2023
    Configuration menu
    Copy the full SHA
    2db8615 View commit details
    Browse the repository at this point in the history
  5. Refatora processo de Segmentação

    Torna a busca pelos territórios em uma task
    
    Melhora a obtenção de dados do município a partir do nome
    
    Trata erros que ocorreram em diários recentes
    
    Lança exceção ao obter território se este não for encontrado
    
    Faz ajustes para não ser preciso instanciar a database no segmentador
    
    Refatora bifurcação entre diários normais e de associações
    
    Modifica uso de territories e gazette por segmentadores
    
    Territories agora são utilizados por segmentadores por meio de um
    atributo de instância criado na inicialização da classe.
    
    Também não parecia necessária a atribuição do objeto `Gazette` à
    instância do segmentador, então o objeto passa a ser usado apenas como
    argumento na `.get_gazette_segments()` e não mais na inicialização.
    
    Como a instância do segmentador pode ser reutilizada sem problemas, um
    padrão de singleton foi utilizado na criação das instâncias.
    
    Corrige segmentação com marcador de início falso
    
    Na edição de 7 de Dezembro de 2023 do diário da Associação dos
    Municípios Alagoanos, o diário de Dois Riachos possui o cabeçalho
    
    ```
    ESTADO DE ALAGOAS
    
    PREFEITURA MUNICIPAL DE EDUCAÇÃO
    
    SECRETARIA MUNICIPAL DE EDUCAÇÃO DE DOIS RIACHOS
    ```
    
    no meio do texto de um ato. Isso fazia com que a segmentação fosse
    engatilhada novamente, resultando em um segmento anterior quase vazio
    (praticamente apenas o cabeçalho) e o segmento atual com o nome de
    município incorreto ("EDUCAÇÃO").
    
    Agora, a palavra EDUCAÇÃO foi inserida no regex como uma exceção
    notável.
    
    Refatora mapeamento de município para python-slugify
    
    Biblioteca já implementa as transformações que usamos e ainda provê
    mais funcionalidades. Agora, a chave criada para um município fica em
    formato mais clássico de slug ("uf-nome-municipio").
    
    Refatora split_text de al_associacao_municipios
    
    O método `split_text_by_territory()` estava com problemas de extração
    incompleta. Ex:
    
    ```
          {
            "_index" : "querido-diario",
            "_type" : "_doc",
            "_id" : "7b7ed1557de74c25cff6a04023ed525f",
            "_score" : null,
            "_source" : {
              "id" : 6,
              "territory_name" : "Maribondo",
              "source_text" : "Alagoas , 02 de Outubro de 2023   •   Diário Oficial dos Municípios do Estado de Alagoas   •    ANO XI | Nº 2145",
              "date" : "2023-10-02",
              "edition_number" : "2145",
              "is_extra_edition" : false,
              "power" : "executive_legislative",
              "file_checksum" : "7b7ed1557de74c25cff6a04023ed525f",
              "scraped_at" : "2023-12-11T20:25:43.705771",
              "created_at" : "2023-12-11T20:25:45.500616",
              "processed" : true,
              "file_path" : "2700000/2023-10-02/a4c2994ffab9f0dabc0d2c3ad46436f917d61efb.pdf",
              "file_url" : "https://www-storage.voxtecnologia.com.br?m=sigpub.publicacao&f=9878&i=publicado_91279_2023-09-29_564051d01bafcfea6f84735fc59f4d94.pdf",
              "state_code" : "AL",
              "territory_id" : "2704807",
              "file_raw_txt" : "/2704807/2023-10-02/7b7ed1557de74c25cff6a04023ed525f.txt",
              "url" : "http://google.com/2700000/2023-10-02/a4c2994ffab9f0dabc0d2c3ad46436f917d61efb.pdf"
            },
    ```
    
    Neste caso, o `source_text` está apenas com o cabeçalho.
    
    Além disso, o código estava um pouco confuso, então uma refatoração foi
    realizada para simplificar a segmentação, passando a utilizar mais
    `re.split()` ao invés de iterar diretamente linha-a-linha.
    
    Outra consequência dessa mudança é que além de mais segmentos estarem
    sendo coletados, os textos dos segmentos refletem o texto original mais
    fielmente, pois o tratamento de espaços em branco e quebras de linha não
    está sendo feito linha-a-linha no corpo do segmento.
    
    Refatora gazette_text_extraction por conta de associações
    
    O fluxo da task estava um pouco confuso, especialmente na bifurcação
    entre arquivo de diário agregado ou diário completo. Essa refatoração
    tem como objetivo simplificar esse fluxo e por consequência, assim como
    a task, os segmentadores também foram simplificados.
    
    Refatora criação de índices para tasks
    
    Corrige slug na segmentação
    
    Para eliminar a necessidade de exceções por conta de municípios com
    alguma palavra separada por espaço em seu nome indevidamente, o slug
    agora não utiliza mais um separador e concatena tudo.
    
    Ex:
    - al-senador-rui-palmeira  -> alsenadorruipalmeira
    - al-senador-rui-palme-ira -> alsenadorruipalmeira
    Jefersonalves authored and ogecece committed Dec 13, 2023
    Configuration menu
    Copy the full SHA
    299d323 View commit details
    Browse the repository at this point in the history