Spaces:
Sleeping
Sleeping
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) | |