hammster написа:Искам да попитам
dd защо не работят опциите "Генерирай коригиран файл" и "Генерирай коригиран OCR файл" в IDI-то, и каква е разликата между тях? Спомням си, че във версия 1.4 се генерираше файл с всички направени правописни корекции, като най-отдолу се изписваше общият брой на корекциите. Сега във файла AUTO_ххххххххххх.txt има само последната коригирана дума, а AUTOLOG_ххххххххххх.txt е празен! Дали пък аз не бъркам някъде?

"Генерирай коригиран файл" и "Генерирай коригиран OCR файл" работят по следния начин:
1. Стартираш чакъра.
2. Активираш една от опциите,
преди да си отворил файл.
3. Отваряш текстов файл от менюто (или чрез влачене и пускане в десния панел) и изчакваш няколко секунди да свърши проверката.
4. Поглеждаш в папката на файла, който си отворил, за да откриеш автоматично генериран файл с префикс съответно за двете опции "AUTO_" или "ORC_".
Опцията
"Генерирай коригиран файл" се мъчи да оправи автоматично всички грешки като замени непознатите думи с първото предложение от списъка с предложения за корекции, който виждаш в левия панел. Тази опция е експериментална и на този етап не върши никаква работа, тъй като понякога заменя и верни думи, въпреки че съм сложил ограничения на замяната, например да не се заменят думите с главни букви и някои други рискови случаи. Имам идея в бъдеще да прецизирам алгоритъма на замяна, но засега опцията не трябва да се ползва за нищо друго освен за тестове.
Опцията
"Генерирай коригиран OCR файл" може да се ползва при текстове, в които има огромно количество смесен текст (понякога хиляда и повече думи), резултат от лошо OCR разпознаване. Под смесен текст разбирай текст, в който кирилски букви погрешно са заменени със съответните латински, които изглеждат еднакво или почти еднакво. За да се избегне нежелано конвертиране на правилни думи се спазват следните 2 правила:
1. Ако в дадена дума се открие дори една латинска буква, която няма кирилско съответствие, се приема че цялата дума е правилно написана и тя не се пипа, дори ако други латински букви в нея могат да се конвертират по таблицата по-долу).
2. Английски думи, в които е възможно всички букви да се заменят с бг съответствия по таблицата по-долу (напр. английската "appearance" -> и кирилската "арреагапсе"), не се пипат, ако фигурират в специално съставения за целта "забранителен списък" от подобни английски думи (файлът "b_ocrskip.txt"). Ако една дума е съставена изцяло от латински букви, които могат да се заменят, но не фигурира в забранителния списък, програмата я конвертира, напр. латинската "ce" става българската "се", латинската "camo" става българската "само" и т.н. Дори ако полученото при конвертирането българско съответсвие не е позната на програмата българска дума (липсва в слофовормения бг списък), конвертирането се извършва, тъй като почти винаги става дума за различни собствени имена, съкращения и прочие стрингове, които липсват в слофовормения списък, но обикновено са верни думи.
Ето част от кода, която показва кои латински букви с кои български се заменят (вътрешно програмата работи с ASCII версии на UTF-8 думите, ако входният файл е UTF-8 ):
Код: Избиране на всичко
for( p = t1_fixed; *p != 0; p++ ) {
if( *p == 0x61 ) *p = 0xE0; //'а' latin - 'a' cyrillic
else if( *p == 0x41 ) *p = 0xC0; //A А
else if( *p == 0x65 ) *p = 0xE5; //e e
else if( *p == 0x45 ) *p = 0xC5; //E Е
else if( *p == 0x6F ) *p = 0xEE; //o o
else if( *p == 0x4F ) *p = 0xCE; //O О
else if( *p == 0x62 ) *p = 0xE2; //b в
else if( *p == 0x42 ) *p = 0xC2; //В В
else if( *p == 0x63 ) *p = 0xF1; //c c
else if( *p == 0x43 ) *p = 0xD1; //C С
else if( *p == 0x48 ) *p = 0xCD; //H Н
else if( *p == 0x72 ) *p = 0xE3; //г r
else if( *p == 0x75 ) *p = 0xE8; //u и
else if( *p == 0x55 ) *p = 0xC8; //U И
else if( *p == 0x6B ) *p = 0xEA; //k k
else if( *p == 0x4B ) *p = 0xCA; //K К
else if( *p == 0x6D ) *p = 0xF2; //m т
else if( *p == 0x4D ) *p = 0xCC; //M М
else if( *p == 0x6E ) *p = 0xEF; //n п
else if( *p == 0x70 ) *p = 0xF0; //p p
else if( *p == 0x50 ) *p = 0xD0; //P Р
else if( *p == 0x54 ) *p = 0xD2; //T Т
else if( *p == 0x78 ) *p = 0xF5; //x x
else if( *p == 0x58 ) *p = 0xD5; //X Х
else if( *p == 0x79 ) *p = 0xF3; //y у
else if( *p == 0x59 ) *p = 0xD3; //Y У
// else if( *p == 0x36 ) *p = 0xE1; //б 6
else if( ascii_latin[ *p ] ) { //latin char without a bg match, so use the original t1 without replacing any chars
fg = 1;
break;
}
}