Как использовать SpellChecker для записи текста в файл без опечаток?

Как можно изменить код в 35-й строке, чтобы выводилось как правильное написание слов с ошибками, так и сами ошибочные слова?
  • 28 марта 2024 г. 19:39
Ответы на вопрос 2
Для использования SpellChecker для записи текста в файл без опечаток, можно сделать следующее:

1. Импортировать библиотеку SpellChecker
2. Создать объект SpellChecker
3. Пройти по каждому слову в тексте, проверить его правильность и при необходимости исправить
4. Записать исправленный текст в файл

Пример кода:

```python
from spellchecker import SpellChecker

spell = SpellChecker()

text = "Это превдрвтво покажется вам занимательном."

corrected_text = []
for word in text.split():
    corrected_text.append(spell.correction(word))

with open("corrected_text.txt", "w") as f:
    f.write(" ".join(corrected_text))
```

Чтобы изменить код в 35-й строке для вывода как правильного написания слов с ошибками, так и сами ошибочные слова, можно использовать методы SpellChecker `candidates()` и `correction()`:

```python
from spellchecker import SpellChecker

spell = SpellChecker()

text = "Это превдрвтво покажется вам занимательном."

corrected_text = []
for word in text.split():
    corrected_word = spell.correction(word)
    if corrected_word != word:
        corrected_text.append(f"{word} -> {corrected_word}")
    else:
        corrected_text.append(word)

with open("corrected_text.txt", "w") as f:
    f.write(" ".join(corrected_text))
```

В данном случае, если слово было исправлено, вместо него в файл будет записана пара "оригинальное слово -> исправленное слово". А если слово не было исправлено, в файл будет записано оригинальное слово.
Если все еще актуально, то можете сделать так. 

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.
Похожие вопросы