Gerador de referência cruzada de texto
Publicado por Perfil removido (última atualização em 08/03/2010)
[ Hits: 6.178 ]
Download referencia_cruzada.zip
Gerador de referência cruzada de texto utilizando duas estruturas de dados (também implementadas):
1. Uma árvore binária de busca do tipo Splay.
2. Uma lista ligada dupla.
Envolve manipulação de arquivos e de strings.
# -*- coding: utf-8 -*-
'''
Gera a referência cruzada de um texto, utilizando-se de
uma árvore binária do tipo splay tree e uma lista ligada
como estruturas auxiliares.
'''
from splay_tree import SplayTree
from lista_dupla import ListaLigadaDupla
import os
def abrir_arquivo(arquivo):
    try:
        fp = open(arquivo, "r")
    except:
        fp = None
    return fp
def imprime_referencia(p):
    print("\n\n"+str(p.dado), end="")
    print(" -> ", end=" ")
    for i in range(len(p.plista)):
        print(str(p.plista[i])+"; ", end=" ")
def salva_referencia(p):
    fp = open(arquivo_nome+"_referência.txt", "a")
    fp.write("\n\n"+str(p.dado))
    fp.write(" -> ")
    for i in range(len(p.plista)):
        fp.write(str(p.plista[i])+"; ")
    fp.close()
def remover_lista_da_arvore(p):
    p.plista = None
    
def insere_palavra(palavra, linha):
    p = arvore.buscar(palavra)
    if not p:
        arvore.inserir(palavra)
        p = arvore.buscar(palavra)
    if not p.plista:
        p.plista = ListaLigadaDupla()
    p.plista.append(linha)
def referencia_cruzada(fp):
    arvore.caminhar(1, remover_lista_da_arvore)
    arvore.remover_tudo()
    linha = fp.readline()
    num_linha = 1
    while linha:
        palavras = linha.split()
        for palavra in palavras:
            palavra = palavra.upper()
            palavra_inserir = ""
            for c in palavra:
                if c not in ['"', "'", "(", ")", "[", "]", "{", "}", '“', '”',
                             "?", "!", ";", ":", ".", ",", "\\", "|", "/"]:
                    palavra_inserir += c
            if palavra_inserir != "":
                insere_palavra(palavra_inserir, num_linha)
                palavra = ""
        linha = fp.readline()
        num_linha += 1    
    fp.seek(0)
arvore = SplayTree()
file_open = None
arquivo_nome = ""
opcao = 0
while opcao != 4:
    os.system("clear")
    print("GERAÇÃO DE REFERÊNCIA CRUZADA A PARTIR DE ARQUIVOS TEXTO")
    print("\n1. Selecionar arquivo")
    print("2. Mostrar referência na tela")
    print("3. Salvar referência em arquivo")
    print("4. Sair")
    if file_open:
        print("\n\nArquivo aberto: "+arquivo_nome)
    try:
        opcao = int(input("Escolha a opção desejada: "))
    except ValueError:
        opcao = 0
        input("Você deve inserir somente números equivalentes às opções!")
    if opcao == 1:
        arquivo_nome = input("Digite o nome do arquivo que deseja abrir: ")
        file_open = abrir_arquivo(arquivo_nome)
        if file_open:
            input("Arquivo aberto com sucesso!")
        else:
            input("O arquivo selecionado não pode ser aberto...")
    if opcao == 2:
        if file_open:
            referencia_cruzada(file_open)
            arvore.caminhar(1, imprime_referencia)
            input("\nPressione ENTER para continuar...")
        else:
            input("Selecione um arquivo antes!")
    if opcao == 3:
        if file_open:
            referencia_cruzada(file_open)
            if os.path.exists(arquivo_nome+"_referência.txt"):
                os.remove(arquivo_nome+"_referência.txt")
            arvore.caminhar(1, salva_referencia)
            input("Referência cruzada gravada no arquivo: "
                  +arquivo_nome+"_referência.txt")
        else:
            input("Selecione um arquivo antes!")
Probabilidade de Vencer - Poker Texas Hold
Unescape de caracteres especiais ISO-8859-1
Afinador de Violão/guitarra em python e gtk.
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)
Instalação dualboot Windows 11 e Debian 13 (7)









