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)