Как проверить орфографию и пунктуацию текста в Python?

Приветствую.
Для дипломной работы делаю своего голосового ассистента. Для распознавания речи использую Vosk.
Все работает, но Vosk выдает текст без орфографии и пунктуации (привет как дела). И мне необходимо исправлять текст, чтобы при выводе диалога с ассистентом, все выглядело красиво.

Описываю все способы и методы, что я опробовал:

Silero - т.к. я использую её для синтеза голоса, попробовал и корректировку ошибок, но она не очень хорошо работает (выдает: "Привет как дела!").
Яндекс Спеллер - нету исправления пунктуации.
Textovod - с виду есть все, что мне надо, но api не работает, хотя он есть.
Вот эта нейросеть - пожалуй, лучший вариант, но из-за её веса и кучи файлов вставлять её не хочется.

И много других сервисов, которые не поддерживали кириллицу. Даже пытался выкручиваться, переводя текст на английский (использовал google переводчик), исправляя его и обратно переводил на русский. Но иногда получались абсурдные ответы.
джон открой браузер -> Джон Открытый браузер
Также, есть вариант использовать Яндекс Переводчик, т.к. там автоматически исправляются все ошибки. Он платный, хоть и дешевый, я пока хочу рассматривать бесплатные варианты.

Как вы поняли я так и не нашел ничего. Может, кто знает другие сервисы или API для исправления орфографии и пунктуации в тексте?
  • Вопрос задан
  • 2128 просмотров
Пригласить эксперта
Ответы на вопрос 4
dimonchik2013
@dimonchik2013
non progredi est regredi
пунктуацию никак

в общем случае задача не решается,
а в частном - вот такие монструозные нейронки как Вы и сами нашли, их обучать-переобучать, и все равно не будет 100% попадания
Ответ написан
Комментировать
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
Задача исправления пунктуации до сих пор не решена, как и задача орфографии.
Ответ написан
@bituke
import fitz
import nltk
import string
import pymorphy2

# загружаем словари и правила для pymorphy2
morph = pymorphy2.MorphAnalyzer()

# загружаем русский язык для NLTK
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
nltk.download('tagsets')
nltk.download('words')
nltk.download('maxent_ne_chunker')
nltk.download('stopwords')

# извлекаем текст из PDF-файла
with fitz.open('example.pdf') as doc:
    text = ""
    for page in doc:
        text += page.getText()

# токенизируем текст и удаляем пунктуацию
tokens = nltk.word_tokenize(text)
tokens = [word for word in tokens if word.isalnum()]

# исправляем орфографические ошибки
corrected_tokens = []
for token in tokens:
    parsed_token = morph.parse(token)[0]
    if 'LATIN' in parsed_token.tag or 'PNCT' in parsed_token.tag:
        corrected_tokens.append(token)
    else:
        corrected_tokens.append(parsed_token.normal_form)

# восстанавливаем пунктуацию
final_text = ""
for i, token in enumerate(corrected_tokens):
    final_text += token
    if i < len(corrected_tokens) - 1 and corrected_tokens[i+1] not in string.punctuation:
        final_text += " "
    elif i < len(corrected_tokens) - 1 and corrected_tokens[i+1] in string.punctuation:
        final_text += corrected_tokens[i+1]

print(final_text)
Ответ написан
@Motozciklist
Как-то решили эту проблему? Больше интересует момент с орфографией, я пытаюсь использовать YandexSpeller(), но он очень медленный для больших текстов
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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