File size: 2,257 Bytes
700394b
ba980c3
0ba9444
700394b
ea76dd6
ba980c3
e15bbee
ba980c3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7d7f01f
ba980c3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66031eb
ba980c3
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
import streamlit as st
from transformers import pipeline

MAX_LENGTH = 512

# Load the spell corrector model
corrector = pipeline("text2text-generation", model="Diezu/bat_pho_bo")

def find_mistake_positions(original, corrected):
    """
    Tìm vị trí các từ bị sửa trong câu gốc.
    original: Câu gốc (chuỗi)
    corrected: Câu đã được sửa (chuỗi)
    Trả về danh sách các vị trí từ sai (start_index, end_index)
    """
    positions = []
    orig_tokens = original.split()  # Tách từ câu gốc
    corr_tokens = corrected.split()  # Tách từ câu sửa

    orig_idx = 0  # Chỉ số ký tự bắt đầu trong câu gốc
    for orig_word, corr_word in zip(orig_tokens, corr_tokens):
        if orig_word != corr_word:  # Nếu từ bị thay đổi
            start_index = original.find(orig_word, orig_idx) + 1  # Tìm vị trí từ trong câu gốc
            end_index = start_index + len(orig_word) - 1  # Tính vị trí kết thúc
            positions.append((start_index, end_index))  # Ghi lại (start, end)
        orig_idx += len(orig_word) + 1  # Cập nhật chỉ số (bao gồm khoảng trắng)

    return positions

# Streamlit app layout
st.title("Ứng Dụng Sửa Lỗi Chính Tả")
st.write("Nhập văn bản và nhận kết quả sửa lỗi chính tả!")

# Input text box for user to enter a sentence
input_text = st.text_area("Nhập câu gốc:", placeholder="Hôm nay toi di hoc rất vui, gặp gỡ nhiêu ban be mơi.")

if st.button("Sửa lỗi"):
    # Perform batch prediction
    predictions = corrector([input_text], max_length=MAX_LENGTH)

    # Get the corrected text and find mistake positions
    corrected_text = predictions[0]["generated_text"]
    mistake_positions = find_mistake_positions(input_text, corrected_text)

    # Display the results
    st.subheader("Kết quả sửa lỗi:")
    st.write(f"Câu gốc: {input_text}")
    st.write(f"Câu sửa: {corrected_text}")
    
    st.subheader("Vị trí các từ sai (start_index, end_index):")
    if mistake_positions:
        for start, end in mistake_positions:
            st.write(f"Vị trí từ sai: {start} - {end}")
    else:
        st.write("Không phát hiện từ sai.")