Men ish jarayonida duch kelgan uch xil xatolarni ta'kidladim:
Shu kabi belgilar bilan boshqa belgilarni almashtirish. Misol uchun, "C" harfi "p", "n" va "va" va "aksincha" bilan almashtiriladi. Tesseract ning uchinchi versiyasidan foydalanganda "o" harfini nolga almashtirish mumkin. Ushbu xatolar eng keng tarqalgan bo'lib, muayyan tanib olish kutubxonasi uchun sozlashni talab qiladi. Shunday qilib, tesseract versiyalarining 3 va 4 tamoyillari keskin farqlarga ega, shuning uchun xatolar boshqacha bo'ladi. Belgilar birlashishi. So'zlar birlashtirilishi mumkin (teskari hali uchrashmagan). Birinchi xato bilan birgalikda "dvapatodin"kabi jinlarning iboralari paydo bo'ladi. Keling, bunday hayvonlarni bezovta qilaylik. Shovqin-matndagi chap belgilar va iboralar. Afsuski, bu erda juda kam narsa qilish mumkin, ammo juda muhim statistikani to'plashda istiqbol bor.
Shu bilan birga, yuqorida tavsiflangan tahlil algoritmi deyarli o'zgarmaydi,satrlarni belgilarga ajratishda asosiy farq.
Biroq, belgilarda harflardan foydalanish bo'yicha kichik statistikani to'plashdan boshlaylik. Dan 33 rus tilining harflari noaniq tamsayı yozishda faqat 20 ishlatiladi, ularni yaxshi harflar deb ataymiz:
avdeiklmnoprsttschshyya
Qolgan 13, o'z navbatida, yomon harflar deb ataladi. Belgining maksimal hajmi 12 ta belgidir (13 ta kvadrillion hisob bilan). Ushbu qiymatdan kattaroq uzunliklar kesilishi kerak.
Chiziqlar va nishonlarni taqqoslash uchun, men uni koddagi Levenstein nomi deb atagan bo'lsam-da, Wagner-Fisher algoritmidan foydalanishga qaror qildim. Tahririyat buyrug'i kerak emas, shuning uchun men algoritmning xotiradan tejamli versiyasini amalga oshirdim. Shuni tan olish kerakki, ushbu algoritmni amalga oshirish parserning o'ziga qaraganda ancha murakkab vazifa edi.
Kichik o'quv dasturi: Levenstein masofasi-Vagner-Fisher algoritmining maxsus usuli, belgilarni kiritish, olib tashlash va almashtirish qiymati statik bo'lsa. Bizning vazifamizda bunday emas. Shubhasiz, agar biz substrat ichida yomon xat bilan uchrashsak, uni yaxshi bilan almashtirish kerak, lekin yaxshilikni yomon bilan almashtirish juda istalmagan. Umuman aytganda, bu mumkin emas, lekin vaziyat muayyan vazifaga bog'liq.
Belgilarni kiritish, olib tashlash va almashtirish xarajatlarini tavsiflash uchun men bunday jadvalni yaratdim: tarozi bilan jadvalga havola. Uch n (qavat, barmoq, ship) usuli bilan to'ldirilgan bo'lsa-da, lekin OCR statistikasi asosida ma'lumotlar bilan to'ldirsangiz, raqamlarni aniqlash sifatini sezilarli darajada yaxshilashingiz mumkin. Kutubxona kodida NumeralLevenshteinData resurs fayli mavjud.Ctrl+A, Ctrl + C va Ctrl + V bilan o'xshash jadvaldagi ma'lumotlarni kiritishingiz mumkin bo'lgan txt.
Agar matnda noaniq belgilar mavjud bo'lsa, masalan, nol bo'lsa, unda uning kiritish qiymati jadvaldan maksimal qiymatga teng bo'ladi va uni olib tashlash va almashtirish narxi minimaldir, shuning uchun algoritm "o" harfi bilan nolni almashtirishga tayyor bo'ladi va agar tesseract ning uchinchi versiyasidan foydalansangiz, jadvalga nol qo'shib, uni "o"harfi bilan almashtirish uchun minimal narxni belgilash mantiqan.
Shunday qilib, biz tayyorlagan Wagner-Fisher algoritmi uchun ma'lumotlar, keling, belgilar bo'yicha satrlarni ajratish algoritmiga o'zgartirish kiritaylik. Buning uchun har bir belgi qo'shimcha tahlilga duch kelamiz, ammo bundan oldin biz quyidagi xususiyatlar haqida ma'lumotni kengaytiramiz: