АЛГОРИТМИ И ПРОГРАМИ В ТЕКСТООБРАБОТКАТА

(дипломна работа, София, ФМИ, 1995 г.)

3.5.2. Функции, необходими за реализация на глобалните правила

Нека дефинираме следните две понятия чрез езика Си.

// Граница на определен елемент в текст (дума, изречение и т. н.)
struct border {
char* begin;
unsigned int offset;
} ;

// Стойност, която служи за представяне на понятията
// 'лъжа' и 'истина'.
enum boolean {false, true};

1. Определя границите на дума.

border find_word_border (char* current, unsigned int where);

Входни данни:

current   – указател към текущ елемент;

where     – флаг за посока на търсене спрямо current

(0 – в; 1 – пред; 2 – зад).

Изходни данни: граници на търсената дума.

2. Определя границите на препинателен знак.

border find_space_border (char* current, unsigned int where);

Входни данни:

current   – указател към текущ елемент;

where     – флаг за посока на търсене спрямо current

(0 – в; 1 – пред; 2 – зад).

Изходни данни: граници на търсения препинателен знак.

3. Открива границите на n-та дума.

border find_nth_word_border (char* current, int which, int where);

Входни данни:

current   – указател към текущ елемент;

which     – номер на търсената дума;

where     – посока (пред/зад).

Изходни данни: граници на n-тата дума.

4. Определя границите на n-ти препинателен знак.

border find_nth_space_border (char* current, int which, int where);

Входни данни:

current   – указател към текущ елемент;

which     – номер на търсения препинателен знак;

where     – посока (пред/зад).

Изходни данни: граници на n-тия препинателен знак.

5. Класифицира дума.

unsigned int classification (char* word);

Входни данни:

word                       – указател към въпросната дума.

Изходни данни: класификацията на думите – unsigned int.

(вж. т. 3.5.1)

6. Маркира съмнително място в текст.

void mark (int where);

Входни данни:

where                     – къде да направи маркирането.

Страничен ефект: в буфера се вмъква '@' на съответното място спрямо текущия елемент.

7. Определя броя на думите в съкращение.

unsigned int words_in_short (border sh);

Входни данни:

sh      – границите на анализираното съкращение.

Изходни данни: брой на думите, от което се състои съкращението – unsigned int.

8. Определя броя знакове в дума.

unsigned int length_word (char* begin);

Входни данни:

begin       – указател към началото на дума.

Изходни данни: брой знакове – unsigned int.

9. Установява принадлежност на дума към специфично множество.

boolean is_member (char* word, unsigned int set);

Входни данни:

word                       – указател към дума;

set                           – тип множество (вж. т. 3.4.1).

Изходни данни: true или false.

10. Определя броя на гласните в дума.

unsigned int volews_count (char* word);

Входни данни:

word            – указател към дума.

Изходни данни: брой гласни в думата – unsigned int.

11. Определя броя на знаковете до края (началото) на думата.

unsigned int from_count (char* current, int where);

Входни данни:

current   – указател към текущ елемент;

where        – посока на търсене.

Изходни данни: брой знакове – unsigned int.

12. Открива поддума.

border find_sub_word (char* current, int where);

Входни данни:

current   – указател към текущ елемент;

where     – посока на търсене (пред/зад).

Изходни данни: граници на поддума.

13. Открива префикс в дума.

border find_preffix (char* word);

Входни данни:

word           – указател към дума.

Изходни данни: граници на префикс в думата.

14. Открива суфикс в дума.

char* find_suffix (char* word);

Входни данни:

word           – указател към дума.

Изходни данни: граници на суфикса в думата.

Функциите 12, 13 и 14 могат да бъдат използвани само при наличието на съответните речници.

15. Сравнява две думи.

int compare (char* word_1, char* word_2);

Входни данни:

word_1   – указател към първа дума;

word_2   – указател към втора дума.

Изходни данни: число от тип int, което определя разликите между двете думи. При 0 няма разлика.

16. Търси конкретен знак в дума.

unsigned int find_char (char* word, char ch);

Входни данни:

word       – указател към дума;

ch           – знак.

Изходни данни: мястото на първото срещане на дадения знак в думата – unsigned int. Ако е -1, той не се среща.

17. Съчленява думи.

char* concatenate (char* word_1, char* word_2);

Входни данни:

word_1   – указател към първата дума;

word_2   – указател към втората дума.

Изходни данни: указател към създадената дума.

18. Определя n-ти знак на дума.

unsigned int find_nth_char (char* word, unsigned int n);

Входни данни:

word        – указател към думата;

n              – кой знак на думата.

Изходни данни: n-ти знак.

19. Търси дума в текст.

char* find_word (char* word, unsigned int where);

Входни данни:

word        – дума;

where      – посока на търсене (пред/зад).

Изходни данни: първото срещано място на думата в текста.

20. Определя броя думи в дадени граници на текст.

unsigned int word_count (char* begin, unsigned int offset);

Входни данни:

begin       – начало на текст;

offset     – край на текст (като отместване).

Изходни данни: число от тип unsigned int – брой на думите в този интервал.

21. Търси текст по шаблон в дадени граници.

char* find_shablon (char* begin, int offset, char* shablon);

Входни данни:

begin      – начало на текст;

offset      – край на текст;

shablon  – шаблон.

Изходни данни: указател към първото срещнато място на съвпадение на шаблона с конкретното съдържание на текста.

22. Определя дали текущата позиция се намира в заглавие.

boolean is_header (char* current, unsigned int what_type);

Входни данни:

current   – указател на текущ елемент;

what_type   – критерий за определяне на заглавие.

Изходни данни: true или false.

23. Определя дали едно число от текста (най-често година) е в границите на допустимия интервал.

boolean is_accessive (char* number);

Входни данни:

number   – указател към дума число.

Изходни данни: true или false.

24. Позиционира пред/след брой знакове в буфера.

boolean position_bytes (unsigned int bytes, unsigned int what_type);

Входни данни:

bytes                      – брой знакове;

what_type             – тип на отместването (пред/след).

Изходни данни: true или false в зависимост от изхода на операцията.

Страничен ефект: при успех текущият указател в буфера се пренасочва към съответното място в буфера.

25. Позиционира пред/след брой думи в буфера.

boolean position_words (unsigned int n_words, int what_type);

Входни данни:

n_words                – брой думи;

what_type             – тип на отместването (пред/след).

Изходни данни: true или false в зависимост от успеха на операцията.

Страничен ефект: при успех текущият указател в буфера се пренасочва към съответното място на дума в буфера.

26. Следи броя на отварящи/затварящи знакове.

boolean is_all_right (char* begin, unsigned int offset);

Входни данни:

begin      – начало на текст;

offset      – край на текст.

Изходни данни: true или false в зависимост от това дали броят на отварящи/затварящи знакове съвпада.

Страничен ефект: ако отговорът е false, то съмнителните места се маркират.

<< назад | отгоре | напред >>

Съдържание

0. Встъпление

1. Увод

2. Сричкопренасяне

2.1. Малко история

2.2. Правила за сричкопренасяне от 1983 г.

2.3. Метод на скандирането

2.4. Алгоритъм на сричкопренасянето по фонетичен и морфологичен принцип

2.4.1. Алгоритъм за откриване на морфема в дума

2.4.2. Алгоритъм за анализ на буква

2.4.3. Алгоритъм за анализ на дума

2.4.4. Алгоритъм за анализ на текст

2.4.5. Други възможности

3. Автоматизирано откриване и отстраняване на грешки в текст

3.1. Дефиниции и понятия

3.2. Често допускани грешки

3.3. Класификация на правилата

3.4. Примерна програмна реализация на локалните правила

3.4.1. Нови дефиниции, променливи, флагове и множества

3.4.2. Таблица на локалните правила

3.4.3. Функции, необходими за реализация на локалните правила

3.5. Глобални правила

3.5.1. Класификация на думите в текст на равнище знакове

3.5.2. Функции, необходими за реализация на глобалните правила

3.5.3. Функции и идеи, които предстоят да бъдат осъществени

4. Някои метрики в текстообработката

4.1. Текстови и шрифтови метрики

4.2. Сложност на текст

4.3. Професионализъм на предпечатната подготовка

4.3.1. Използване на възможностите на програмите чрез дефиниране на различни стилове

4.3.2. Премахване на излишното форматиране

4.3.3. Използване на възможностите за настройка на основните отношения между и в параграфите

5. Заключение

6. Литература

7. Приложениe

7.1. Списък на книгите, върху които са направени експерименти

7.2. Някои статистики и резултати от проведени изследвания