legalgeekapp / app.py
albhu's picture
Update app.py
243487d verified
import streamlit as st
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline
import fitz # PyMuPDF PDF olvasáshoz
from docx import Document # DOCX olvasáshoz
# Fordító modell betöltése (M2M100 fordítás magyar és angol között)
translator_tokenizer = AutoTokenizer.from_pretrained("facebook/m2m100_418M")
translator_model = AutoModelForSeq2SeqLM.from_pretrained("facebook/m2m100_418M")
translation_pipeline = pipeline("translation", model=translator_model, tokenizer=translator_tokenizer)
# Generatív modell betöltése (angol nyelven működik)
gpt_tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-large")
gpt_model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-large")
generate_answer = pipeline("text2text-generation", model=gpt_model, tokenizer=gpt_tokenizer)
# Szöveg feldarabolása max hosszal
def chunk_text(text, max_length=512):
words = text.split()
chunks = []
while len(words) > max_length:
chunk = " ".join(words[:max_length])
chunks.append(chunk)
words = words[max_length:]
chunks.append(" ".join(words))
return chunks
# Fordítás funkciók
def translate_to_english(text):
chunks = chunk_text(text, max_length=512)
translated_text = ""
for chunk in chunks:
translation = translation_pipeline(chunk, src_lang="hu", tgt_lang="en", max_length=512)[0]['translation_text']
translated_text += " " + translation
return translated_text.strip()
def translate_to_hungarian(text):
chunks = chunk_text(text, max_length=512)
translated_text = ""
for chunk in chunks:
translation = translation_pipeline(chunk, src_lang="en", tgt_lang="hu", max_length=512)[0]['translation_text']
translated_text += " " + translation
return translated_text.strip()
# PDF szöveg kinyerése
def extract_text_from_pdf(pdf_file):
text = ""
with fitz.open("pdf", pdf_file.read()) as doc:
for page in doc:
text += page.get_text()
return text
# DOCX szöveg kinyerése
def extract_text_from_docx(docx_file):
doc = Document(docx_file)
text = "\n".join([paragraph.text for paragraph in doc.paragraphs])
return text
# Streamlit alkalmazás
st.title("AI Jogi Chatbot - Fordítás Alapú Megközelítéssel")
# Dokumentum feltöltése
uploaded_file = st.file_uploader("Töltsön fel egy dokumentumot", type=["txt", "pdf", "docx"])
if uploaded_file:
file_type = uploaded_file.type
# Dokumentum típus szerinti beolvasás
if file_type == "application/pdf":
context = extract_text_from_pdf(uploaded_file)
elif file_type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
context = extract_text_from_docx(uploaded_file)
else:
# TXT fájl feltöltése esetén
try:
context = uploaded_file.read().decode("utf-8")
except UnicodeDecodeError:
context = uploaded_file.read().decode("ISO-8859-1")
# Teljes dokumentum megjelenítése
st.write("### Feltöltött dokumentum tartalma:")
st.write(context)
# Dokumentum fordítása angolra
with st.spinner('Fordítás angolra...'):
context_english = translate_to_english(context)
# Chatelés a dokumentum kontextusában
st.write("### Chat")
question = st.text_input("Írja be a kérdését a dokumentumról:")
if question:
with st.spinner('Válasz generálása...'):
# Kérdés fordítása angolra
question_english = translate_to_english(question)
# Generatív válaszadás angol nyelven
input_text = f"{context_english}\n\nQuestion: {question_english}\nAnswer:"
response_english = generate_answer(input_text, max_length=150)[0]["generated_text"]
# Válasz fordítása magyarra
response_hungarian = translate_to_hungarian(response_english)
st.write("Válasz:", response_hungarian)