Olej писал(а):
Ещё :
Вопрос: как из книги DJVU (PDF будет то же самое) извлечь текст ... например фрагменты программного кода Go?
Не колотить же их с книги вручную?
Т.к. DJVU/PDF - это растровый графический формат, то тут нам без OCR не обойтись (
сканирование и распознавание текста ... только без сканирования).
Пробую:
- сохраняем выделенный фрагмент (растровый графический прямоугольник), "сохранить как" в DJVU-вьювере (DjView4):
- используя OCR Cuneiform
- как показал опыт, распознавать нужно 2 раза: русский язык - комментарии + английский язык - программный код:
Код: Выделить всё
[olej@dell vector]$ cuneiform -l rus -f text -o app1c.txt app1.bmp
Cuneiform for Linux 1.1.0
Код: Выделить всё
[olej@dell vector]$ cuneiform -l eng -f text -o app1ce.txt app1.bmp
Cuneiform for Linux 1.1.0
- результат достаточно удовлетворительный ... если слить английский и русский текст:
Код: Выделить всё
[olej@dell vector]$ cat app1ce.txt
func appendlnt(x []int, y int) []int {
var z []int
zlen:= len(x) + 1
if zlen <= cap(x) {
// NMeetcn He<To A/IR pocta. Pacmnpnem epee.
z = x[:zlen]
) else (
// Mecta Ann pOcta Het. BMAenneM HOSHA MaCCNR. Veeneuneaen
// 8 Aea pa33 ARR IHIHRNHoe amopTN3NpoaaHHHoe crloxHocTH.
zcap:= zlen
if zcap < 2"len(x) {
zcap = 2 * len(x)
z = make([]int, zlen, zcap)
copy(z, x) // ectpoennan (Iynxunn; cM. Te«ct paanena
)
z[len(x)] = y
return z
)
Код: Выделить всё
[olej@dell vector]$ cat app1c.txt
топ< аррепд1пе(х [)йпт, у 1пт) []1пт (
уаг з [)йпт
з1еп := 1еп(х) + 1
1т г1еп <= сар(х) (
// Имеется место для роста. Расширяем срез.
з = х[ га1еп)
) е1зе (
// Места для роста нет. Выделяем новый массив. Увеличиваем
// в два раза для линейной амортизированнной слохности.
асар := г1еп
зй ясар < 2"1еп(х) (
асар = 2 * 1еп(х)
г = шайе([)1пт, г1еп, асар)
сору(г, х) // Встроенная функция; см. текст раздела
)
г[1еп(х)) = у
гееогп г
)
На то, чтобы слить 2 файла, выверить и восстановить этот фрагмент кода (с восстановлением отступов, исправлениями ошибок ... ')'->'}' ) мне потребовалось
6 минут.