@pladious

Как вывести текст без ошибок в файл с помощью SpellChecker?

Есть готовый код:
from tkinter import *
from tkinter import ttk
from tkinter import filedialog
from spellchecker import SpellChecker
 
root = Tk()
root.title("проверка текста на ошибки")
root.geometry("350x300")
spell = SpellChecker(language='ru')
 
root.grid_rowconfigure(index=0, weight=1)
root.grid_columnconfigure(index=0, weight=1)
root.grid_columnconfigure(index=1, weight=1)
 
text_editor = Text()
text_editor.grid(column=0, columnspan=2, row=0)
 
# открываем файл в текстовое поле
def open_file():
    filepath = filedialog.askopenfilename()
    if filepath != "":
        with open(filepath, "r", encoding='utf-8' ) as file:
            text =file.read()
            text_editor.delete("1.0", END)
            text_editor.insert("1.0", text)
 
# сохраняем текст из текстового поля в файл
def save_file():
    filepath = filedialog.asksaveasfilename()
    if filepath != "":
        text = text_editor.get("1.0", END)
        with open(filepath, "w") as file:
            mistakes = spell.unknown(text.split())
            file.write("Ошибки: " + str(mistakes))
            file.write("Правильное написание: " + spell.candidates(mistakes))

open_button = ttk.Button(text="Открыть файл с текстом", command=open_file)
open_button.grid(column=0, row=1, sticky=NSEW, padx=10)
 
save_button = ttk.Button(text="Сохранить ошибки в файл", command=save_file)
save_button.grid(column=1, row=1, sticky=NSEW, padx=10)
 
root.mainloop()

нужно сделать так, чтобы в 35 строчке кода
file.write("Правильное написание: " + spell.candidates(mistakes))

выводилось либо правильно написание слов с ошибками, либо введенный пользователем текст без ошибок, пробовал несколько вариантов реализации этого, но все попытки были неудачны, прошу помощи
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 1
@o5a
Если все еще актуально, то можете сделать так.

spell.candidates напрямую не предназначен для вывода текста, он возвращает только набор предполагаемых вариантов для каждого переданного на проверку слова, поэтому вывод его просто так в строку мало что даст.

И spell.unknown возвращает только множество "некорректных" слов.
Если цель вывести весь исправленный текст, то лучше использовать spell.correction, можно так:
def save_file():
    filepath = filedialog.asksaveasfilename()
    if filepath != "":
        text = text_editor.get("1.0", END)
        with open(filepath, "w") as file:
            mistakes = spell.unknown(text.split())
            file.write("Ошибки: " + str(mistakes))

            # перебираем пословно и заменяем слово, если его считает некорректным
            result = []
            for word in text.split():
                correct = spell.correction(word)
                # берем просто изначальное слово, если корректор не нашел его в словаре
                result.append(correct if correct else word)

            file.write("\n")
            file.write("Правильное написание: " + ' '.join(result))

Если все-таки предполагалось выводить в файл не весь исправленный текст, а только ошибочные слова, то не сложно будет изменить, просто перебираете не по всему тексту, а по своему mistakes.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы