Gerador de referência cruzada de texto
Publicado por Perfil removido (última atualização em 08/03/2010)
[ Hits: 6.187 ]
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!")
Just Do It - XML Generic Editor
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
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
VOL já não é mais como antes? (9)
É normal não gostar de KDE? (13)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









