Spaces:
Sleeping
Sleeping
File size: 4,004 Bytes
e00a4eb f3404f7 22ff05f 6e0319a f3404f7 243487d f3404f7 243487d f3404f7 243487d c680564 22ff05f 424df7c f3404f7 c680564 102a394 22ff05f 424df7c 22ff05f a5ae12f 424df7c f3404f7 8414c2b 102a394 8414c2b 102a394 f3404f7 102a394 f3404f7 102a394 f3404f7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
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)
|