Gerador de referência cruzada de texto

Publicado por Ewerton Daniel de Lima (última atualização em 08/03/2010)

[ Hits: 5.815 ]

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.

  



Esconder código-fonte

# -*- 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!")

Scripts recomendados

Calcula a idade da pessoa em dias

Método de Bissecção

Calculadora de funções do 1º grau

Método de Newton

Correios - Rastreador de encomendas


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts