@comtext/ocr-fix
v1.2.1
Published
Post-OCR text correction utilities
Readme
ocr-fix
Post-OCR коррекция текста — набор утилит для исправления артефактов, которые возникают при OCR-распознавании и мешают дальнейшей обработке текста.
API
Пакет экспортирует две функции.
correct(str)
Корректирует произвольный текст после OCR. Применяет набор исправлений:
| # | Исправление | Пример |
|---|---|---|
| 1 | Все пробельные символы кроме \n (табы, \u00A0, \u202F и др.) → обычный пробел | "10 кг" → "10 кг" |
| 2 | Перенос слова через дефис в конце строки: дефис и \n удаляются, части слова склеиваются | "школь-\nного" → "школьного" |
| 3 | Остальные одиночные \n внутри абзаца → пробел (двойные \n сохраняются) | "строка\nпродолжение" → "строка продолжение" |
| 4 | Дефис в роли тире → —: --, -, а также дефис после , . ! ? » ) | "это - пример" → "это — пример", "да,- нет" → "да, — нет" |
| 5 | Кириллические буквы-двойники в отдельно стоящих римских цифрах (2+ символа) → латинские | "ХХ век" → "XX век", "ХIХ" → "XIX" |
| 6 | Пробел после точки в аббревиатурах и инициалах (буква + точка + буква/цифра) | "В.И.Ленин" → "В. И. Ленин", "т.1" → "т. 1" |
| 7 | Несколько пробелов подряд → один пробел | "слово слово" → "слово слово" |
Пример:
Воспитание творческой активности учащихся в процессе изучения
ими математики является одной из актуальных целей нашего школь-
ного преподавания.↓
Воспитание творческой активности учащихся в процессе изучения ими математики является одной из актуальных целей нашего школьного преподавания.correctComtext(str)
Корректирует файл в формате comtext — Markdown с YAML frontmatter.
Если файл начинается с блока ---, frontmatter сохраняется без изменений.
К остальной части текста применяется correct.
---
format: article
title: Название
---
Текст первой строки
продолжение текста.↓
---
format: article
title: Название
---
Текст первой строки продолжение текста.renumberFootnotes(str)
Перенумеровывает сноски в тексте Markdown.
Все ссылки [^id] и соответствующие определения [^id]: заменяются порядковыми номерами 1, 2, 3, … в том порядке, в котором ссылки встречаются в тексте. Если одна и та же сноска упоминается несколько раз, все её вхождения получают одинаковый номер. Если frontmatter присутствует — он сохраняется без изменений.
Пример:
Первое утверждение[^b] и второе[^a].
[^a]: Определение A.
[^b]: Определение B.↓
Первое утверждение[^1] и второе[^2].
[^1]: Определение B.
[^2]: Определение A.Установка
yarn add @comtext/ocr-fixИспользование
import { correct, correctComtext, renumberFootnotes } from '@comtext/ocr-fix'
// Для произвольного текста
const rawOcrText = `Первый абзац\nиз двух строк\n\nВторой абзац`
console.log(correct(rawOcrText))
// "Первый абзац из двух строк\n\nВторой абзац"
// Для comtext-файла с frontmatter
const comtextFile = `---\nformat: article\n---\nТекст\nпродолжение`
console.log(correctComtext(comtextFile))
// "---\nformat: article\n---\nТекст продолжение"
// Перенумерация сносок
const withFootnotes = `Текст[^b] и ещё[^a].\n\n[^a]: Сноска A.\n[^b]: Сноска B.\n`
console.log(renumberFootnotes(withFootnotes))
// "Текст[^1] и ещё[^2].\n\n[^1]: Сноска B.\n[^2]: Сноска A.\n"Тесты
yarn testДля режима наблюдения (перезапуск при изменениях):
yarn test:watchДля отчёта о покрытии:
yarn test:coverageСтруктура проекта
ocr-fix/
├── src/
│ └── correct.js # correct и correctComtext
├── tests/
│ └── correct.test.js # Jest-тесты
├── package.json
└── README.md