Jump to content

Estrutura Hierárquica Específica Textos Word


Postagens Recomendadas

Olá pessoal,

Preciso de ajuda para criar um Script Python no google colab que aplique a estrutura hierárquica específica ao texto fornecido conforme a necessidade e conforme a equivalência das marcações definidas
e identificadas para títulos, item e subitem. Adicionar ou replicar todos os marcadores da sua escala hierárquica.

Os marcadores títulos podem ser identificados nos textos com os seguintes formatos:
- Números únicos: 3
- Números duplos: 22
- Números duplos com ponto: 2.3
- Números triplos: 232
- Números triplos com pontos: 4.3.8
- Números quádruplos com pontos: 4.3.8.1
- Números quintuplos com pontos: 4.3.8.1.2
- Letras minúsculas com apenas um lado do parênteses: a)
- Letras minúsculas entre parênteses: (a)
- Números com apenas um lado do parênteses: 1)
- Números entre parênteses  (1)
- Descrição: Attachment A, B, C...
- Descrição: Appendix 1, 2, 3...
- Descrição: Appendix A, B, C...

E os marcadores item e subitem podem ser identificados nos textos com os seguintes formatos:
- Números duplos: 22
- Números duplos com pontos: 2.3
- Números triplos: 232
- Números triplos com pontos: 4.3.8
- Números quádruplos com pontos: 4.3.8.1
- Números quintuplos com pontos: 4.3.8.1.2
- Letras minúsculas com apenas um lado do parênteses: a)
- Letras minúsculas entre parênteses: (a)
- Letras maiúsculas entre parênteses: (A)
- Números com apenas um lado do parênteses: 1)
- Números entre parênteses  (1)
- Notas Explicativas: as notas devem ser identificadas como:
"Note 1, Note 2, Note 3...", e devem receber todas marcações hierárquica em ecalada do título, item ou subitem ao qual pertencerem ou estiverem dentro.

Exemplo:

 1 TextoTextoTextoTextoTextoTextoTextoTextoTextoTextoTextoTexto
  12 TextoTextoTextoTextoTextoTextoTextoTextoTextoTexto
     1.1.2 TextoTextoTextoTextoTextoTextoTextoTextoTextoTexto
             a) TextoTextoTextoTextoTextoTextoTextoTextoTextoTexto
             b) TextoTextoTextoTextoTextoTextoTextoTextoTextoTexto
                 Note 1 - TextoTextoTextoTextoTextoTextoTextoTexto
                 Note 2 - TextoTextoTextoTextoTextoTextoTextoTexto    

Ao incluir todos os marcadores em escalada ao textos tem que ficar dessa forma:

 1 TextoTextoTextoTextoTextoTextoTextoTextoTextoTextoTextoTexto
  1  12 TextoTextoTextoTextoTextoTextoTextoTextoTextoTexto
     1  12  1.1.2 TextoTextoTextoTextoTextoTextoTextoTextoTextoTexto
            1   12  1.1.2  a) TextoTextoTextoTextoTextoTextoTextoTextoTextoTexto
            1 12   1.1.2.  b) TextoTextoTextoTextoTextoTextoTextoTextoTextoTexto  
                     1   12.  1.1.2.  b)  Note 1 - TextoTextoTextoTextoTextoTextoTextoTexto
                     1   12    1.1.2.  b)  Note 2 - TextoTextoTextoTextoTextoTextoTextoTexto
 

ESTOU USANDO O TEXTO ABAIXO COMO EXEMPLO, MAS OS TEXTOS PODEM TER QUALQUER UM DOS MARCADORES INFORMADOS ACIMA
Texto a ser aplicado:

3.5.3 The operator shall track the position of an aeroplane through automated reporting at least every 15 minutes for
the portion(s) of the in-flight operation(s) that is planned in an oceanic area(s) under the following conditions:
a) the aeroplane has a maximum certificated take-off mass of over 45 500 kg and a seating capacity greater than 19; and
b) where an ATS unit obtains aeroplane position information at greater than 15 minute intervals.
Note 1.— Oceanic area, for the purpose of aircraft tracking, is the airspace which overlies waters outside the territory of
a State.
Note 2.— See Annex 11, Chapter 2, for coordination between the operator and air traffic services providers regarding
position report messages.
Note 3.— Operational procedures for monitoring the aircraft tracking information are contained in PANS-OPS,
Volume III, Section 10.

COMO OS TEXTOS DEVEM FICAR:

3.5.3 The operator shall track the position of an aeroplane through automated reporting at least every 15 minutes for
the portion(s) of the in-flight operation(s) that is planned in an oceanic area(s) under the following conditions:
     3.5.3  a) the aeroplane has a maximum certificated take-off mass of over 45 500 kg and a seating capacity greater than 19; and
     3.5.3  b) where an ATS unit obtains aeroplane position information at greater than 15 minute intervals.
             3.5.3  b)  Note 1.— Oceanic area, for the purpose of aircraft tracking, is the airspace which overlies waters outside the territory of
             a State.
             3.5.3  b)  Note 2.— See Annex 11, Chapter 2, for coordination between the operator and air traffic services providers regarding
             position report messages.
             3.5.3  b)  Note 3.— Operational procedures for monitoring the aircraft tracking information are contained in PANS-OPS,
             Volume III, Section 10.

Observe no texto acima que os marcadores foram adicionados aos textos que fazem parte da sua escala hierárquica!
 

CHEGUEI NESSE CÓDIGO MAS NÃO DEU CERTO:

# Instalação das bibliotecas necessárias
!pip install python-docx

import docx
from google.colab import files
import re

def upload_file():
    # Solicita ao usuário que faça upload de um arquivo
    uploaded = files.upload()
    filename = next(iter(uploaded))
    return filename

def detect_marker_type(text):
    # Detecta o tipo de marcador e retorna o tipo e o nível
    patterns = {
        "single_number": r"^\d+\s",
        "double_number": r"^\d+\.\d+\s",
        "triple_number": r"^\d+\.\d+\.\d+\s",
        "quad_number": r"^\d+\.\d+\.\d+\.\d+\s",
        "quint_number": r"^\d+\.\d+\.\d+\.\d+\.\d+\s",
        "lower_letter_paren": r"^\([a-z]\)\s",
        "lower_letter": r"^[a-z]\)\s",
        "upper_letter": r"^\([A-Z]\)\s",
        "single_number_paren": r"^\(\d+\)\s",
        "single_number_one_paren": r"^\d+\)\s",
        "attachment": r"^(Attachment|Appendix)\s[A-Z0-9]+",
        "note": r"^Note\s\d+"
    }
   
    for key, pattern in patterns.items():
        if re.match(pattern, text):
            return key
    return None

def process_document(filename):
    doc = docx.Document(filename)
    level_stack = []
   
    for para in doc.paragraphs:
        text = para.text.strip()
        marker_type = detect_marker_type(text)
       
        if marker_type:
            # Determine the hierarchy level
            if marker_type in ["single_number", "double_number", "triple_number", "quad_number", "quint_number", "attachment"]:
                level = 0  # Title levels reset hierarchy
            elif marker_type in ["lower_letter", "lower_letter_paren", "upper_letter"]:
                level = 1  # Item under title
            elif marker_type in ["single_number_one_paren", "single_number_paren"]:
                level = 2  # Subitem
            elif marker_type == "note":
                level = 3  # Note under subitem
            # Adjust stack to current level
            level_stack = level_stack[:level] + [text]
            # Create hierarchical prefix
            prefix = ' '.join(level_stack[:-1]) + ' ' if level_stack[:-1] else ''
            # Update paragraph text with hierarchical prefix
            para.text = prefix + text

    # Save the processed document
    new_filename = "processed_" + filename
    doc.save(new_filename)
    return new_filename

def download_file(filename):
    # Trigger file download
    files.download(filename)

# Running the script
uploaded_filename = upload_file()
processed_filename = process_document(uploaded_filename)
download_file(processed_filename)

Editado por MorfeuPy
Sugestão do site
  • Curtir 1
Link to comment
Compartilhe em outros sites

  • Administradores

Olá, @MorfeuPy 🤗

Obrigado por compartilhar sua dúvida! Para que nossa comunidade possa ajudar da melhor forma, aconselhamos editar o tópico e colar o código dentro da caixa de edição 'code'. 

Isso ajuda na formatação, legibilidade e segurança.

Se precisar de ajuda para isso, temos um vídeo explicativo que pode ser útil:

 

Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...