Формат на файловете с данни на kbedic



Правописен речник   |   Install phpMyAdmin Ubuntu   |   Ma4ovete dnes   |   Ma4ove dnes


Този документ описва формата на данните на KBE Dictionary. Става въпрос за файловете en_bg.dat и bg_en.dat, които се разпространяват с речника. Също така се описва и метода за достъп до данните, защото формата на данните е предвиден за работа с този метод.

I. Формат на данните

  1. Данните във файла са записани в "чист" текст и се използва преобразуване Cp1251 или известно още като Windows Cyrillic. Има едно малко изключение от термина "чист" текст (вж. т.3).
  2. За разделител за НОВ РЕД се използва Unix/Linux разделителя за нов ред. Това е '\n' (само байтът 10).
  3. Файлът започва с '\0' и завършва с '\0' (байта 0). За разделител между отделните ЕЛЕМЕНТИ отново се използва същият символ.
  4. ЕЛЕМЕНТ представлява ДУМА + НОВ РЕД + ПРЕВОД. Като под ПРЕВОД се разбира преводът на съответната ДУМА. Значи форматът на файла е следният:
    \0ДУМА\nПРЕВОД\0ДУМА\nПРЕВОД\0ДУМА\nПРЕВОД\0 ... \0ДУМА\nПРЕВОД\0
    
  5. Под ДУМА се разбира думите, които излизат в лявата част на KBE Dictionary. По ДУМИТЕ се осъществява търсене в базата. ДУМИТЕ се състоят от главни букви от съответната азбука и символите " ", "'", "-" (интервал, единична кавичка, която се използва като апостроф и тире). В бъдещи версии на базата данни ДУМИТЕ могат да съдържат и други символи, но за сега могат да съдържат само споменатите по-горе символи. Няколко примера за думи:
  6. ПРЕВОДЪТ може да съдържа всякакви символи без символа за разделяне на ЕЛЕМЕНТИ (вж. т.3). ПРЕВОДЪТ може да има един или повече редове разделени със разделителя за НОВ РЕД (вж. т.2).
  7. ЕЛЕМЕНТИТЕ (думите) са подредени (сортирани) по съдържанието на ДУМИТЕ. При сравнението са премахнати всички символи, които не са букви от съответната азбука. Тоест при сравнение за определяне на номера на ЕЛЕМЕНТА (позицията в базата) на ДУМИТЕ "ABLE-BODIED" и "A-BOMB" са използвани не самите думи, а следните низове "ABLEBODIED" и "ABOMB".

II. Данни за текущата база

  1. English->Bulgarian (engbul.dat)
  2. Bulgarian->English (buleng.dat)

III. Метод за достъп до данните

Форматът и подреждането на данните са съобразени да работят с Unix/Linux ОС, С/С++ низове (стрингове) и двоично търсене. Именно двоичното търсене е в основата на бързодействието на KBE Dictionary. Основнният проблем при реализирането на този алгоритъм е, че ЕЛЕМЕНТИТЕ са с различна (нефиксирана) дължина. Коато определяме средата намираме средата на файла, а не средния елемент. И от там трябва да се придвижим напред по файла докато намерим началото на най-близкият елемент и да извършим сравнение с него, за да определим следващият интервал, който ще претърсваме. В случай когато намереният елемент е крайният елемент в интервала, трябва да се се върнем назад и да намерим началото на елемента в който сме попаднали и да използваме него за сравнение. Сравнението извършвано между въведената от потребителя дума и ДУМИТЕ в базата се извършва отново по съдържание. От двете думи се изтриват всички символи, които не са букви от съответната азбука и тогава се извършва сравнението.

За по-подробно описание и реализация на алгоритъма погледнете файла Database.cpp. Коментарът към изходния код в този файл е доста добър.