@theurus

Как исправить текст с разорванными предложениями?

Есть телеграм бот который распознает текст с картинок.

#my_ocr.py
import io
import fitz
import pytesseract
from PIL import Image


#распознаем  текст с картинки из байтовой строки
def get_text_from_image(b):
    language = 'rus+eng+ukr'
    f = io.BytesIO(b)
    return pytesseract.image_to_string(Image.open(f), lang=language)


#tb.py
from aiogram import Bot, Dispatcher, types, executor
import cfg
import io
import my_ocr


bot = Bot(token=cfg.token)
dp = Dispatcher(bot)


@dp.message_handler(content_types=types.ContentType.PHOTO)
async def handle_photo(message: types.Message):
    # получаем самую большую фотографию из списка
    photo = message.photo[-1]
    fp = io.BytesIO()
    # скачиваем фотографию в байтовый поток
    await photo.download(destination_file=fp)
    # распознаем текст на фотографии с помощью pytesseract
    text = my_ocr.get_text_from_image(fp.read())
    # отправляем распознанный текст пользователю
    if text.strip() != '':
        # если текст слишком длинный, отправляем его в виде текстового файла
        if len(text) > 4096:
            with io.StringIO(text) as f:
                f.name = 'text.txt'
                await message.reply_document(f)
        else:
            await message.reply(text)

if __name__ == '__main__':
    executor.start_polling(dp)


Распознанный текст выглядит не совсем так как надо, предложения разорваны.

Например картинка 1682717299.jpg

Текст

Женщина:

— Обветрились губы. Воспользовалась
скрабом для губ, сделала питательную
маску, намазала бальзамом, сверху -
увлажняющий блеск.

Мужчина:

— Обветрились губы. Отодрал кожу.
Сьел.


а должно быть как то так

Женщина:

— Обветрились губы. Воспользовалась скрабом для губ, сделала питательную маску, намазала бальзамом, сверху -
увлажняющий блеск.

Мужчина:

— Обветрились губы. Отодрал кожу. Сьел.


Можно конечно просто склеивать строки пробелами пока не наткнешься на пустую строку но может есть какие то специализированные библиотеки для этого. Еще неплохо бы исправлять ошибки которые появляются от плохого распознавания.
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 1
@dima20155
you don't choose c++. It chooses you
Было бы здорово, если бы вы распечатали строку в виде байт и приложили.
Полагаю, что распознается текст вместе с символами переноса строки '\n'.
А вы хотите определенным образом их удалить у части текста.

Думаю, для вашей можно использовать следующую логику: идти по строке и удалять все символы переноса строки пока не встретите точку. или двоеточие (в вашем случае).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы