Заглавие: Алгоритъм за автоматична редакция на поезия Версия: 1.0 09.03.2004 13:13 Лог на промените: <празен> Автор(и): Калин Ненов Доп. източници: Борислав Кръстев - "Граматика за всички" (Наука и изкуство, 1992) Вход: Стихотворна творба на български език Изход: Редактирана версия на входящата творба: - коригирани правописни неточности ~ (незадължително) редактирана ритмическа стъпка ~ (незадължително) редактирана римна структура
Необходими бази данни: А. Правописен речник на съвременния български език, с всички граматически форми на думите (или правила за създаването им), ударения и морфологична принадлежност (част на речта + съответни атрибути: род, число, време и пр.) Б. Речник на синонимните гнезда, вкл. синонимни фрази и контекстови синоними В. Речник на римните гнезда (групи от взаиморимуващи се думи или фрази) Г. Набор от правила за граматически изменения на текст - виж 0.9.1. за примери Заб0.0. С цел опростяване на алгоритъма, и входната, и изходната редакция са във формат plain text. Заб0.1. Официалните версии на всички бази данни (наричани "централни бази" или ЦБ за кратко) се съхраняват на сървър, поддържан от Сдружение "Буквите" /* =) --К */. Заб0.1.1. Централните бази могат да бъдат изтегляни: - безплатно от потребители с некомерсиални цели - с предплатена първоначална цена и абонамент за комерсиално ползване. Заб0.1.2. ЦБ се осъвременяват редовно, както от специално назначени редактори от човешки тип (наричан Редактори за кратко), така и от индивидуалните потребители - виж Заб0.3. Заб0.2. >>>NB!<<< Не е задължително нито една от изброените бази данни първоначално да е пълна - всеки потребител ще разполага с възможността да допълва речниците в своето персонално копие на програмата (наричани "лични бази" или ЛБ за кратко), ръчно или чрез изтегляне на най-новите версии на ЦБ. Заб0.3. Всеки регистриран в Сдружение "Буквите" /* =)^2 --К */ потребител има възможност да осъвременява ЦБ - виж стъпка 4.2. за подробности. Заб0.4. >>>NB!<<< Поради сложността на българската граматика на този етап алгоритъмът не включва граматически корекции. /* Сами ще си оправяте членовете и запетаите, значи. :P --Калин */ /*********************************************************/ Заб0.5. Общи онтологични особености на базите данни и антропоидната периферия: 0.5.0. Всеки елемент (дума/фраза в БД А, синонимно гнездо в БД Б, римно гнездо в БД В, правило в БД Г) има атрибут "ключ", който го определя еднозначно и се използва за разграничаването му от всички останали елементи. (Например: низът, представляващ думата/фразата в А; низът, представляващ заглавния елемент в псевдонимното, респективно римното гнездо в Б и В - виж първо NB към Заб0.7.; низът, представляващ правилото в Г). Атрибутът се изчислява автоматично при създаването на нов елемент, преизчислява се при редакцията на елемента и не може да бъде променян директно. >>>NB!<<< При елементите на БД Б и В, трябва да се внимава за синонимни/римни гнезда, които имат различни ключове, а съдържат взаимопокриващи се думи или фрази (т.е. създадени са от двама или повече потребители независимо един от друг). Вероятно всяко синонимно гнездо трябва да бъде автоматично сверявано със съществуващите син. гнезда, които съдържат поне един от елементите му, и резултатите да бъдат представяни на Редактор; при наличие на адекватни правила за автоматично произношение на думите (виж NB към 0.8.9.), римните гнезда могат да бъдат коригирани и обогатявани и без намесата на Редактор. --Калин 0.5.1. Всеки елемент има атрибут "дата" /* препоръчително с точност поне един час --K */, който се използва при осъвременяване на централните или личните бази. Атрибутът получава нова стойност всеки път, когато елементът или специфичен негов атрибут (напр. "статус" - виж 0.5.3.) бъде променен. Не може да бъде променян директно. 0.5.2. Всеки елемент в централните бази има атрибут "въвел", който съдържа псевдонима на потребителя, който го е добавил, и се използва при осъвременяване на централните или личните бази <необходим за личните? --К> и от Автоматичната система за разправа с досадници (виж 0.5.17.). Създава се автоматично при добавяне на елемент от потребителска лична база или Редактор. Не може да бъде променян директно, освен със съгласието на целия Редакторски колектив. 0.5.3. Лични бази (ЛБ) 0.5.3.1. Всеки елемент в личните бази съдържа атрибут "статус", който приема следните стойности: - "добавен": елементът е в употреба, вече е бил добавен към съответната централна база (СЦБ) и подлежи на редакция или изтриване от нея - "постоянен": елементът е в употреба, вече е бил добавен към съответната централна база (СЦБ) и не подлежи на изтриване от нея (но може да бъде редактиран) - "нов": елементът е в употреба и е маркиран от потребителя за добавяне към СЦБ - "личен": елементът е в употреба и няма да бъде добавян към СЦБ - "затриван": елементът се използва, но е бил маркиран от поне един потребител за изтриване в СЦБ - "затрит": елементът не се използва, вече е бил изтрит от СЦБ и не подлежи на възстановяване освен по решение на Редакторския колектив (виж 0.5.3.2.4.1.) - "изтрит": елементът не се използва и е маркиран от потребителя за изтриване от СЦБ - "покрит": елементът не се използва, но потребителят не го е маркирал за изтриване от СЦБ 0.5.3.2. Добавяне на елементи в ЛБ по време на редакция 0.5.3.2.1. Всички нови елементи (под "нови елементи" се разбират елементи, чийто ключ не съвпада с нито един ключ на съществуващ елемент от СЦБ), създадени от потребителя по време на редакция, получават статус "нов" (при желание да бъдат добавени към ЦБ) или "личен" (при липса на прежното желание). 0.5.3.2.2. Ако по време на редакция потребителят пожелае да добави елемент, който вече съществува и има статус "добавен" или "постоянен", дава му се възможност да редактира въпросния елемент или да се откаже. 0.5.3.2.2.1. При избор на редакция, редактираният елемент получава статус "нов". 0.5.3.2.3. Ако по време на редакция потребителят пожелае да добави елемент, който вече съществува и има статус "нов", "личен", "затриван", "изтрит" или "покрит", дава му се възможност да редактира въпросния елемент или да се откаже. 0.5.3.2.3.1. При избор на редакция, потребителят има право да избере нов статус за редактирания елемент измежду "нов", "личен", "изтрит" или "покрит". 0.5.3.2.4. Ако по време на редакция потребителят пожелае да добави елемент, който вече съществува и има статус "затрит", дава му се възможност да промени статуса на въпросният елемент на "личен" или да се откаже. 0.5.3.2.4.1. Ако потребителят >>>твърдо<<< вярва, че въпросният елемент трябва да бъде възстановен в СЦБ, дава му се възможност да изпрати ел. съобщение с аргументите си до Редакторския колектив. >>>NB!<<< за 0.5.2.3.2-4. Програмата разпознава вече съществуващи елементи и при маркирането им извежда опция "Редактирай" вместо "Въведи". 0.5.3.3. Изтриване на елементи по време на редакция 0.5.3.3.1. Ако нежеланият елемент е със статус "добавен", той получава статус "изтрит" или "покрит" според желанието на потребителя. 0.5.3.3.2. Ако нежеланият елемент е със статус "постоянен", той получава статус "покрит". 0.5.3.3.2.1 Ако потребителят >>>твърдо<<< вярва, че въпросният елемент трябва да бъде маркиран като "затрит" в СЦБ, дава му се възможност да изпрати ел. съобщение с аргументите си до Редакторския колектив. 0.5.3.3.3. Ако нежеланият елемент е със статус "нов", "личен" или "покрит", той получава статус "покрит". 0.5.3.3.4. Ако нежеланият елемент е със статус "изтрит" или "покрит", той не променя статуса си. 0.5.3.3.5. Ако нежеланият елемент е със статус "затриван", той получава статус "изтрит". 0.5.3.4. Промяна на съществуващи елементи по време на редакция или директно в лична база: Статусът на редактирания елемент се променя, както следва: - всички -> "нов" | "личен" | "покрит" (по желание на потребителя) 0.5.3.5. Потребителят има възможност да променя статуса на избрани елементи направо в личните си бази. Разрешени са следните промени: - "добавен" | "постоянен" -> "покрит" /* (| "изтрит"? - НЕ! заради "изтрит" -> "добавен"; само по време на редакция) --Калин */ - "нов" -> "личен" | "покрит" - "личен" -> "нов" | "покрит" - "затриван" -> "нов" | "личен" | "изтрит" | "покрит" - "затрит" -> "личен" - "изтрит" -> "покрит" | "нов" | "личен" >>>NB!<<< "изтрит" -> "добавен" само с undo по време на редакция --Калин - "покрит" -> "нов" | "личен" /* | "изтрит"? - НЕ! пак заради "изтрит" -> "добавен" --Калин */ 0.5.3.6. Добавяне на елементи при изтегляне на нови версии на ЦБ (сравни с 0.5.4.6) 0.5.3.6.1. Всички елементи от ЦБ със статус "постоянен", "добавен", "затрит" или "затриван" , които не фигурират в съответната ЛБ (СЛБ) на потребителя, се добавят към СЛБ и автоматично получават статуса си от ЦБ. 0.5.3.6.2. Елементи от ЛБ със статус "постоянен", "добавен", "затрит" или "затриван" биват осъвременени откъм съдържание и статус когато и само ако статусът им в ЦБ е "постоянен", "добавен", "затрит" или "затриван" и стойността на атрибут "дата" в ЦБ надхвърля съответната стойност в ЛБ. 0.5.3.6.3. Елементи от ЛБ със статус "нов", "личен" и "покрит" не се осъвременяват. 0.5.3.6.4. Елементи от ЛБ със статус "изтрит" получават статус "затриван", ако статусът им в ЦБ е станал "затриван". 0.5.3.7. Осъвременяване на ЦБ от страна на потребителя - виж 0.5.4.7. /*****************/ 0.5.4. Всеки елемент в централните бази съдържа атрибут "статус", който приема следните стойности: - "постоянен": елементът е в употреба, включва се в потребителски заявки за изтегляне на съответната централна база (СЦБ) и не подлежи на изтриване (бил е единодушно одобрен от Редакторския колектив), но може да бъде редактиран - "добавен": елементът е в употреба, включва се в потребителски заявки за изтегляне на СЦБ и не е единодушно одобрен от Редакторския колектив - "вътрешен": елементът е в употреба (напр. от онлайн версията на програмата), но не е достъпен за потребители - "затриван": елементът се използва и се включва в потреб. заявки, но е бил маркиран от поне един потребител за изтриване в СЦБ; в такъв случай с допълнителен атрибут "брой" се отбелязва броя на индивидуалните потребители, които са го маркирали за изтриване - "затрит": елементът не се използва, няма да бъде възстановен в СЦБ без намесата на Редакторския колектив и е маркиран за включване в заявки за осъвременяване на ЛБ - "покрит": елементът не се използва (напр. от онлайн версията на програмата) и не се включва в заявки за осъвременяване на ЛБ /*****************/ 0.5.4.1. Въвеждане на елемент в ЦБ от Редактор 0.5.4.1.1. Всички нови елементи, въведени от Редактор, получават статус "добавен" (при желание да бъдат достъпни за потребителите) или "вътрешен" (при липса на прежното желание). 0.5.4.1.1.1. Ако въпросните нови елементи са единодушно одобрени от Редакторския колектив (РК), те се въвеждат със статус "постоянен". 0.5.4.1.2. Ако Редактор пожелае да добави елемент, който вече съществува и има статус "добавен", "вътрешен" или "покрит", дава му се възможност да редактира въпросния елемент или да се откаже. 0.5.4.1.2.1. При редакция, редактираният елемент получава статус "добавен", "вътрешен" или "покрит", по избор на Редактора. 0.5.4.1.3. Ако Редактор пожелае да добави елемент, който вече съществува и има статус "постоянен" или "затрит", дава му се възможност да редактира въпросния елемент или да се откаже. 0.5.4.1.3.1. При редакция, редактираният елемент се праща на останалите Редактори за вземане на решение дали промяната ще бъде единодушно приета. 0.5.4.1.4. Ако Редактор пожелае да добави елемент, който вече съществува и има статус "затриван", дава му се възможност да редактира въпросния елемент или да се откаже. 0.5.4.1.4.1. При редакция, редактираният елемент получава статус "добавен" или (само със съгласието на целия РК) "постоянен", "вътрешен", "затрит" или "покрит". >>>NB!<<< за 0.5.4.1.2.-4. Програмата разпознава вече съществуващи елементи и при маркирането им извежда опция "Редактирай" вместо "Въведи". /*****************/ 0.5.4.2. Всички решения, свързани с каквито и да е промени в елемент с текущ статус "постоянен" или "затрит" или с промяна на статуса на елемент на "постоянен" или "затрит" задължително изискват единодушно становище на РК. 0.5.4.3. Редакторите не могат да променят статуса на елемент на "затриван" или да променят стойността на атрибута "брой" на елемент със статус "затриван". Такива промени се осъществяват автоматично от системата. /*****************/ 0.5.4.4. Промени на съществуващи елементи в ЦБ 0.5.4.4.1. Ако Редактор редактира самостоятелно елементи от определена ЦБ, има право да промени статуса им, както следва: - "постоянен" | "затрит": без право на редакция - "добавен" | "затриван" -> "добавен" - "вътрешен" | "покрит" -> "добавен" | "вътрешен" | "покрит" 0.5.4.4.2. С единодушно одобрение на РК са възможни редакции на елемент с произволен статус и следните съпътстващи промени на статус: - произволен статус -> "постоянен" | "добавен" | "вътрешен" | "затрит" | "покрит" (всички без "затриван") 0.5.4.5. Разрешени са следните допълнителни промени на статус: 0.5.4.5.1. С единодушно одобрение на РК са възможни следните промени на статус: - произволен статус -> "постоянен" | "добавен" | "вътрешен" | "затрит" | "покрит" (всички без "затриван") 0.5.4.5.2. Промени без необходима намеса на РК: - "вътрешен" -> "добавен" | "покрит" - "затриван" -> "добавен" - "покрит" -> "добавен" | "вътрешен" /*****************/ 0.5.4.6. Изтегляне на ЦБ от потребители (сравни с 0.5.3.6) - при получаване на потребителска заявка за осъвременяване на ЛБ, в пакета с нови елементи, който ще бъде пратен на потребителя, се включват: 0.5.4.6.1. Всички елементи със статус "постоянен", "добавен", "затриван" или "затрит" от съответните ЦБ (СЦБ), които не фигурират в ЛБ. 0.5.4.6.2. Елементите от СЦБ със статус "постоянен", "добавен", "затриван" или "затрит", които в СЛБ имат статус "постоянен", "добавен", "затриван" или "затрит" и по-малка стойност за дата. 0.5.4.6.3. Елементите от СЦБ със статус "постоянен", "добавен", "затриван" или "затрит", които в СЛБ имат статус "изтрит" и по-малка стойност за дата. 0.5.4.6.4. Елементите от СЦБ със статус "вътрешен" или "покрит" не се включват. /*****************/ 0.5.4.7. Осъвременяване на ЦБ от потребители 0.5.4.7.1. При получаване на заявка за осъвременяване на ЦБ от потребителски ЛБ, СЦБ проверява дали на въпросния потребител е разрешено да осъвременява ЦБ (чрез АСРД - виж 0.5.17.3.3.). Ако е така, от ЛБ на потребителя се събират: 0.5.4.7.1.1. Всички елементи със статус "нов". 0.5.4.7.1.1.1. Ако в СЦБ няма такъв елемент, той се прибавя със статус "добавен" и стойност на "въвел", съответстваща на потребителя, създал новия елемент. 0.5.4.7.1.1.2. Ако в СЦБ съществува такъв елемент и статусът му е: 0.5.4.7.1.1.2.1. "постоянен", "вътрешен", "затрит" или "покрит", в _специалния лог_ (виж 0.5.13.1.1.) се записва пълна информация за съществуващия и за новопредложения елемент, без да се правят промени в ЦБ. 0.5.4.7.1.1.2.1.1. Ако СЕ има статус "постоянен" или "затрит", АСРД прави проверка в _потенциалния лог_ и евентуално редактира _досадническия лог_ - виж 0.5.17.1.1., 0.5.17.2.1. <рейтинг +2 --К> 0.5.4.7.1.1.2.2. "добавен", статусът се запазва и се сравняват атрибутите "въвел". 0.5.4.7.1.1.2.2.1. При идентични стойности се сравняват датите на двата елемента; новопредложеният елемент (НЕ) замества съществуващия (СЕ), ако датата на НЕ е строго по-голяма. Ако датата на НЕ не надхвърля датата на СЕ, съдържанието на СЕ се запазва непроменено. 0.5.4.7.1.1.2.2.2. Ако стойностите на "въвел" се различават, сравняват се съдържанията на СЕ и НЕ. 0.5.4.7.1.1.2.2.2.1. Ако са идентични, СЕ остава непроменен. 0.5.4.7.1.1.2.2.2.2. Ако се различават, събитието се отбелязва в _специалния лог_ (аналогично на 0.5.4.7.1.1.2.1; виж 0.5.13.1.2.). 0.5.4.7.1.1.2.3. "затриван", чрез АСРД (виж 0.5.17.3.1.) се проверява дали потребителят вече е предлагал същия елемент за "добавяне/от-триване". 0.5.4.7.1.1.2.3.1. Ако да, АСРД добавя въпросния потребител в _досадническия лог_ с начален рейтинг X <2 --К>, респективно увеличава рейтинга му с X <2 --К> (виж 0.5.17.2.4.); програмата пренебрегва НЕ. 0.5.4.7.1.1.2.3.2. Ако не, сравняват се съдържанията на СЕ и НЕ. 0.5.4.7.1.1.2.3.2.1. Ако са идентични, намалява се с единица стойността на "брой" за СЕ. 0.5.4.7.1.1.2.3.2.1.1. Ако "брой" е паднало до нула, статусът на СЕ се променя на "добавен; за "въвел" се взема псевдонимът на потребителя, изпратил НЕ. 0.5.4.7.1.1.2.3.2.1.2. АСРД отбелязва събитието в _потенциалния лог_ (виж 0.5.17.1.2.) 0.5.4.7.1.1.2.3.2.2. Ако СЕ и НЕ се различават по съдържание, събитието се отбелязва в _специалния лог_ (аналогично на 0.5.4.7.1.1.2.1; виж 0.5.13.1.3.). 0.5.4.7.1.2. Всички елементи със статус "изтрит". 0.5.4.7.1.2.1. Ако в СЦБ такъв елемент не съществува или съществува със статус "постоянен", "вътрешен", "затрит" или "покрит", в _специалния лог_ (виж 0.5.13.1.1. и 0.5.13.1.1.1.) се записва пълна информация за съществуващия и за новопредложения елемент, без да се правят промени в ЦБ. 0.5.4.7.1.2.1.1. Ако СЕ има статус "постоянен" или "затрит", АСРД се задейства - виж 0.5.17.1.1., 0.5.17.2.1. <рейтинг +2 --К> 0.5.4.7.1.2.2. Ако елементът съществува и има статус "добавен", се сравняват стойностите на "въвел" за СЕ и НЕ. 0.5.4.7.1.2.2.1. Ако двете стойности съвпадат, се сравняват датите на СЕ и НЕ. Ако НЕ е по-нов от СЕ, СЕ бива изтрит >>>като елемент<<< (т.е. се премахва изцяло, не просто променя статуса) от съответната ЦБ. В противен случай не се предприема нищо. 0.5.4.7.1.2.2.2. Ако двете стойности не съвпадат, се сравняват съдържанията на СЕ и НЕ. 0.5.4.7.1.2.2.2.1. Ако съвпадат, статуса на СЕ се променя на "затриван", стойността на "брой" се инициализира на "1", стойността на "въвел" се променя на псевдонима на потребителя, изпратил НЕ. + АСРД отбелязва събитието в _потенциалния лог_ - виж 0.5.17.1.3. 0.5.4.7.1.2.2.2.2. Ако СЕ и НЕ се различават по съдържание, събитието се отбелязва в _специалния лог_ (анал. на 0.5.4.7.1.2.1.; виж 0.5.13.1.2.). 0.5.4.7.1.2.3. Ако елементът съществува и има статус "затриван", чрез АСРД (виж 0.5.17.3.3.) се проверява дали потребителят вече е предлагал същия елемент за "затриване". 0.5.4.7.1.2.3.1. Ако да, АСРД добавя въпросния потребител в _досадническия лог_ с начален рейтинг X <2 --К>, респективно увеличава рейтинга му с X <2 --К> (виж 0.5.17.2.3); програмата пренебрегва НЕ. 0.5.4.7.1.2.3.2. Ако не, се сравняват съдържанията на СЕ и НЕ. 0.5.4.7.1.2.3.2.1. Ако съвпадат, стойността на "брой" за СЕ се увеличава с 1. + АСРД отбелязва в _потенциалния лог_ пълна информация за събитието - виж 0.5.17.1.4. 0.5.4.7.1.2.3.2.2. Ако СЕ и НЕ се различават по съдържание, събитието се отбелязва в _специалния лог_ (анал. на 0.5.4.7.1.2.1.; виж 0.5.13.1.3.) /*****************/ 0.5.5. Право на потребителите да осъвременяват базите 0.5.5.1. Първоначално потребителите могат да добавят елементи към централните бази без ограничения. 0.5.5.2. Определен потребител може да загуби правото си да осъвременява една или повече от централните бази: 0.5.5.2.1. по единодушно решение на Редакторския колектив 0.5.5.2.2. в резултат на Автоматичната система за разправяне с досадници (АСРД) - виж 0.5.17.3.3. 0.5.5.3. Всяко от горните решения подлежи на преразглеждане от страна на Редакторския колектив (РК) след изпращане на писмено възражение, в което се излагат (обосновано и грамотно) доводите на засегнатия потребител. Всяко преразгледано решение изисква единодупно становище от РК. 0.5.6. Всеки потребител може да трие безпрепятствено елементи < = редове --К> от личните си бази. /*****************/ 0.5.7. Процедура за маркиране на елемент от ЦБ като "затрит" - статусът на елемент в ЦБ се променя на "затрит": 0.5.7.1. С единодушно решение на Редакторския колектив. Р ешението може да дойде: 0.5.7.1.1. По предложение на Редактор или потребител. 0.5.7.1.2. По предложение на програмата - когато над X <предлагам 50 --К> процента от текущите потребители са отбелязали "затриван" елемент от ЦБ като "изтрит" в личните си бази (процентът се определя от съотношението на стойността "брой" в атрибута за статус "затриван" към настоящия брой потребители), РК бива уведомен с автоматично съобщение. 0.5.7.2. С единодушно решение <...хъхъхъ... --К> на потребителите - ако Y <предлагам 90 --К> процента от тях са отбелязали "затриван" елемент като "изтрит", елементът автоматично става "затрит" в СЦБ. /*********************************************************/ 0.5.13. _Специалният лог_ съхранява информация за събития, които се нуждаят от Редакторска намеса. 0.5.13.1. В _лога_ се отразяват всички подробности (дата, потребител, действие, съдържание на новопредложения елемент НЕ), свързани със следните събития: 0.5.13.1.1. В ЦБ съществува елемент (СЕ) със статус "постоянен", "вътрешен", "затрит" или "покрит", който има същия ключ като НЕ (със статус "нов" - виж 0.5.4.7.1.1.2.1. - или "изтрит" - виж 0.5.4.7.1.2.1.) 0.5.13.1.1.1. В ЦБ не съществува елемент СЕ, който да има същия ключ като НЕ със статус "изтрит" (виж 0.5.4.7.1.2.1.) 0.5.13.1.2. В ЦБ съществува елемент (СЕ) със статус "добавен", чийто атрибут "въвел" И чието съдържание се различават от "въвел" и съответно съдържанието на НЕ със статус "нов" (виж 0.5.4.7.1.1.2.2.2.2.) или "изтрит" (виж 0.5.4.7.1.2.2.2.2.) 0.5.13.1.3. В ЦБ съществува елемент (СЕ) с атрибут "затриван", който има същия ключ като НЕ, ала се различава по съдържание от него; НЕ има статут "нов" (виж 0.5.4.7.1.1.2.3.2.2.) или "изтрит" (виж 0.5.4.7.1.2.3.2.2.). 0.5.13.2. _Логът_ автоматично се праща на всички членове на РК през определени интервали от време <предлагам 24 часа --К>. При необходимост, РК се събира и внася изменения в ЦБ (или натоварва свой член с това). /*********************************************************/ 0.5.17. Автоматична система за разправа с досадници (АСРД): съхранява информация за потребители, които са прекалили със заявките за добавяне и/или изтриване на елементи от ЦБ, и им осигурява липса на достъп до въпросните бази (една или повече). 0.5.17.1. В _потенциалния лог_ се съхраняват всички >>>еднократни<<< събития (с дата, псевдоним на потребителя, вид на действието - списъкът следва - и съдържание на предложения от потребителя елемент (НЕ)), свързани с: 0.5.17.1.1. изпращане на НЕ със статус "нов" или "изтрит", който съществува в ЦБ със статус "постоянен" или "затрит" (виж 0.5.4.7.1.1.2.1.1. и 0.5.4.7.1.2.1.1.) 0.5.17.1.2. изпращане на НЕ със статус "нов", който 1) съществува в ЦБ със статус "затриван"; и 2) НЕ и СЕ се различават по стойността си за "въвел", но не се различават по съдържание (виж 0.5.4.7.1.1.2.3.2.1.2.) 0.5.17.1.3. изпращане на НЕ със статус "изтрит", който 1) съществува в ЦБ със статус "добавен"; и 2) НЕ и СЕ се различават по стойността си за "въвел" И са еднакви по съдържание (виж 0.5.4.7.1.2.2.2.1.) 0.5.17.1.4. изпращане на НЕ със статус "изтрит", който 1) съществува в ЦБ със статус "затриван"; и 2) НЕ и СЕ се различават по стойността си за "въвел" И са еднакви по съдържание (виж 0.5.4.7.1.2.3.2.1.) 0.5.17.1.9. изпращане на неразпознаваем елемент <aka кракеруване --К> ... 0.5.17.2. В _досадническия лог_ се съхраняват всички събития (отново с пълна информация): 0.5.17.2.1. идентични (с изкл. на датата и НЕ) на някое събитие от тип 0.5.17.1.1., 0.5.17.1.4 или 0.5.17.1.9, записано в _потенциалния лог_ 0.5.17.2.2. идентични (с изкл. на датата) на някое събитие от тип 0.5.17.1.2. или 0.5.17.1.3, записано в _потенциалния лог_ 0.5.17.2.3. представляващи изпращане на НЕ със статус "изтрит", който 1) съществува в ЦБ със статус "затриван"; и 2) НЕ и СЕ имат една и съща стойност за "въвел" (виж 0.5.4.7.1.2.3.1.) 0.5.17.2.4. представляващи изпращане на НЕ със статус "нов", който 1) съществува в ЦБ със статус "затриван"; 2) НЕ и СЕ имат еднакво съдържание; 3) "въвел" на СЕ фигурира в опит да се "добави" елемент с идентично съдържание, отбелязан в _потенциалния лог_ (от 0.5.17.1.2.; виж 0.5.4.7.1.1.2.3.1.) 0.5.17.3. В _Списъка_ са изброени имената и текущите рейтинги на досадниците. 0.5.17.3.1. Всяко събитие в _досадническия лог_ води до повишаване на рейтинга на съответния досадник с 1 или повече точки. 0.5.17.3.2. Ако някой досадник натрупа рейтинг от X <предлагам 10 --К> точки, изпраща му се автоматично предупреждение, че "заради такива и такива действия (+ извадка от _досадническия лог_) ще Ви бъде отнето правото да осъвременявате ЦБ". 0.5.17.3.3. Ако досадник натрупа рейтинг от kX <предлагам 20 --К> точки, автоматично се преустановява правото му да осъвременява ЦБ (виж 0.5.4.7.1.). 0.5.17.4. По единодушно съгласие на Редакторския колектив (РК), от _Списъка_ могат да бъдат изтривани имена или намалявани рейтинги. РК обаче няма право да променя двата _лога_. /*********************************************************/ Заб0.6 Специфични онтологични и implementation особености на база данни А: речник на българските думи 0.6.1. Поради сложните правила за формообразуване, на този етап всяка граматическа форма на думата присъства като отделен елемент. /* ??? УЖАСНО главоболие при създаването на синонимни и римни гнезда --Калин. */ Пр.: За глагола "виждам" съществуват следните самостоятелни елементи: - виждам; виждаш; вижда; виждаме; виждате; виждат; - (да/ще) видя_1; видиш; види; видим; видите; видят; - видях; видя_2; видя_3 (>>>NB<<<различават се по морфологични атрибути, следователно ключовете им трябва да са различни - виж 0.5.0 --К>); видяхме; видяхте; видяха; - виждах; виждаше_1; виждаше_2; виждахме; виждахте; виждаха ... Заб.0.6.1.1. >>>NB<<< Дори рудиментарни правила за формообразуване биха свили речниковата база с няколко порядъка (и съответно опростили топологията на бази Б и В). Пр.: "виждам" - зададени атрибути на елемента: 1) част на речта: глагол; изменение (тип на формообразуването): правилно 2) сегашна основа : "вижда" (+ задава правопис); ударение на сричка 1 >>>NB<<< 3л., ед.ч., сег. вр - най-кратка форма + дава окончание, което е необходимо за формообразуването >>>NB<<< ударението е необходимо за стъпковата и (незадължително) римната редакция 3) минала основа: "видя" (+ задава правопис); ударение на сричка 1 4) (незадължително, за синонимни замени - виж База Б: синоними) стилистична окраска: неутрален -> Програмата използва правилата за формообразуване при правилен глагол (виж Заб.0.6.6.2.5.). Заб.0.6.1.2. Правила за извеждане на транскрипция (необходими за автоматично обогатяване на римните гнезда - виж 0.8.9. - и проверка на рими): I. Гласни: буквите 'а', 'е', 'и', 'о', 'у', 'ъ'. 1. Всички ударени гласни и неударените 'е', 'и' се произнасят като (звуците) -а-, -е-, -и-, -о-, -у-, -ъ-. 1.1. Изключение прави 'а' в крайна сричка на глагол ("чета", "перат") - произнася се -ъ-. 2.1. Неударените гласни 'а', 'ъ' се произнасят като -аъ- (редуцирано/потъмнено а). 2.2. Неударените гласни 'о', 'у' се произнасят като -оу- (редуцирано/потъмнено о). 3. "уи" ("уиски", "уикенд"), "уо" ("уокмен") се произнасят -w--и-, -w--о-; в случая "у" обозначава полугласния звук -w-, заимстван от английския. II. Буквите 'я', 'ю' се четат: 1. В началото на дума и след гласна: -й--а-, -й--у- (в ударена сричка) или -й--аъ-, -й--оу- (в неударена). 1.1. Изключение е 'я' в крайна сричка на глагол ("копая", "нехаят"): -й--ъ-. 2. След съгласна: -'--а-, -'--у (ударена сричка), респ. -'--аъ-, -'--оу- (неударена), където -'- отбелязва мека предходна съгласна (виж III.2.2.). 2.1. Изключение е 'я' в крайна сричка на глагол ("вървя", "грухтят"): -'--ъ-. III. Съгласни: буквите 'б', 'в', 'г', 'д', 'ж', 'з', 'й', 'к', 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь'. Заб. В българския парламент е внесено предложение за премахването на буквата 'ь' и заместването и с 'й', с цел опростяване на бълг. правопис. 1. Произнасят се като твърдите звуци -б-, -в-, -г-, -д-, -ж-, -з-, (няма), -к-, -л-, -м-, -н-, -п-, -р-, -с-, -т-, -ф-, -х-, -ц-, -ч-, -ш-, -ш--т-, (няма), когато се намират: 1.1. Пред гласна буква (виж I.) Заб1.1. Повечето изброени звуци се смекчават до известна степен пред 'е' и 'и', но не достатъчно, за да бъдат заместени от меките си съответствия - виж 2. 1.2. Пред друга съгласна, различна от 'ь' 1.3. В края на думата. Заб1.2. 'й' винаги се произнася меко - виж 2. Заб1.3. 'ь' няма самостоятелно произношение - виж 2.2. Заб1.4. Буквосъчетанията "дз" и "дж" съответстват на звуците -дз- и -дж-. Заб1.5. Буквата 'щ' съответства на двата звука -ш--т-. 2. Произнасят се като меките звуци -б'-, -в'-, -г'-, -д'-, (няма), -з'-, -й-, -к'-, -л'-, -м'-, -н'-, -п'-, -р'-, -с'-, -т'-, -ф'-, -х'-, -ц'-, (няма), (няма), -ш--т'-, (няма), когато се намират: 2.1. Пред 'я', 'ю'. В такъв случай съчетанието "<буква>я", респ. "<буква>ю", се произнася -<звук>'--а/аъ-, респ. -<звук>'--о/оу- - виж II.2. за пълни правила. 2.2. Пред 'ь'. В такъв случай съчетанието "<буква>ь" се произнася -<звук>'-. Заб2.2. 'ж', 'ш', 'ч' винаги се произнасят твърдо. Заб2.3. 'ь' няма самостоятелно произношение - виж 2.2. Заб2.4. В този случай буквосъчетанието "дз" съответства на звука -дз'-. "дж" винаги се произнася твърдо - виж Заб1.4. Заб2.5. Буквата 'щ' съответства на двата звука -ш--т'-. 3. Звучните съгласни -б-, -в-, -г-, -д-, -ж-, -дж-, -з-, -дз- и -х_зв-(и съответните меки варианти - виж 2.) се произнасят, когато: 3.1. са изписани като 'б', 'в', 'г', 'д', 'ж', "дж", 'з', "дз" и 'х' и се намират: 3.1.1. пред гласна (виж I.), в същата или в непосредствено следващата дума. Заб3.1.1.1. 'х' пред гласна е беззвучно -х- - виж 4.1.1. 3.1.2. пред друга звучна съгласна, в същата или в непосредствено следващата дума. 3.2. са изписани като 'п', 'ф', 'к', 'т', 'ш', 'ч', 'с', 'ц', 'х' и се намират пред звучна съгласна, в същата или в непосредствено следващата дума. Заб3.2.1. Съществуват изключения на това правило (наречено уподобяване или асимилация); оставяме прилагането им по преценка на потребителя. Заб3.1 В бълг. правопис няма буква за звучното -х- (-х_зв-), но то може да бъде чуто в думи като "хмел", "хвощ" и във фрази като "смачках ги". 4. Беззвучните съгласни -п-, -ф-, -г-, -т-, -ш-, -ч-, -с-, -ц- и -х-(и съответните меки варианти - виж 2.) се произнасят, когато: 4.1. са изписани като 'п', 'ф', 'к', 'т', 'ш', 'ч', 'с', 'ц' и 'х' и се намират: 4.1.1. пред гласна (виж I.), в същата или в непосредствено следващата дума. 4.1.2. пред друга беззвучна съгласна, в същата или в непосредствено следващата дума. 4.2. са изписани като 'б', 'в', 'г', 'д', 'ж', "дж", 'з', "дз" и се намират пред беззвучна съгласна, в същата или в непосредствено следващата дума, или на края на смислово цяла фраза (обикновено отбелязвана с препинателен знак за край на изречение, нов ред или запетая) Заб4.2.1. Съществуват изключения на това правило (наречено уподобяване или асимилация); оставяме прилагането им по преценка на потребителя. Заб4.2.2. Обеззвучаването на звучни съгласни понякога изисква намесата на потребителя - например в "Мярнах кораб." 'б' задължително се произнася -п-, тъй като е в края на смисловата фраза, докато в "Кораб минава", е по-скоро -б-, според правило 3.1.2. 5. Изпадане на съгласни звукове 5.1. В края на думите: буквените съчетания "ст", "зд", "жд" и буквата "щ" <ОЩЕ??? --К> се свеждат до -с-, -с-, -ш-, -ш-. 5.2. В средата на думите: - "вств" -> -с--т--в- - "стн" -> -с--н-; "щн" -> -ш--н- - "тт" -> -т-; "щт" -> -ш--т- - ... >>>NB<<< Правилата от 5. трябва да се прилагат преди всички други правила, свързани с произнасяне на съгласни; веднъж приложени, не подлежат на повече промени. >>>NB<<< За автоматично намиране на римни двойки в този случай вероятно е достатъчно изписването на думите, тъй като произношението им се подчинява на едни и същи правила. 0.6.2. Всички дублети ("обици" и "обеци"), вкл. думи с повече от едно възможно ударение ("ч>е<ло" и "чел>о<"), и всички непълни омоними (омоними, които се различават в поне една от грам. си форми - "мед, -ът" и "мед, -та") присъстват като отделни речникови елементи. >>>NB<<< За да бъдат разграничавани (т.е. да имат различни ключове), вероятно се нуждаят от допълнителен индекс в края на думата или сходно --Калин. Заб.0.6.2.1. Всички дублети и всички думи с повече от едно книжовно ударение автоматично образуват постоянно синонимно гнездо (виж 0.7.0.2.) 0.6.3. При думите без ударение, освен липсата на ударение се отбелязва (за целите на стъпковия анализ и редакция - 2., 3.) дали са: 0.6.3.1. Енклитики (при изговор се присъединяват към предишната дума): - форми на спомагателния гл. "съм": "ти си", "бързал бях" - някои частици, като "ли", "де", "ле", "бе", "ма": "разбийш ли", "аре бе" - кратки форми на личните местоимения "ме", "те", "го", "я", "ни", "ви", "ги", "ми", "ти", "му", "й" ("и" с ударение): "разбра ме", "отвърна ми" - кратки форми на притежателните местоимения "ми", "ти", "му", "й" ("и" с ударение), "ни", "ви", "им": "идеята ми" - кратки форми на възвратните местоимения "се" и "си": "мъча се да си спомня" Заб0.6.3.1.1. Както се вижда от последния пример, понякога енклитиките застават преди думата, с която се сливат при изговор ("...си спомня"). >>>NB<<< Възможна проверка: потърси глаголна форма непосредствено от двете страни на енклитиката и при определяне на произношение присъедини енклитиката към нея --Калин. 0.6.3.2. Проклитики (винаги стоят пред думата, с която се произнасят слято): - едносрични предлози и предлози без гласни: "в теб", "пред мен" - кратки съюзи (с <= 2 срички): "за да дойдеш", "или аз" - частиците "не", "ще" Заб.0.6.3.1. Частиците за сравнителна и превъзходна степен "по-" и "най-" имат самостоятелно ударение. 0.6.5. Рудиментарни правила за автоматично разпознаване на срички - необходими при стъпкова и римна редакция: 0.6.5.1. По гласните - всяка гласна (а + я, е, и, о, у + ю, ъ) определя една сричка. Заб.0.6.5.1.1. Предлозите "в" и "с" са с дължина нула срички. Заб.0.6.5.1.2. Виж Заб.0.6.1.2.I.3. за изключения, свързани с "у"/-w-. /*****************/ 0.6.6. Морфологична информация - необходима за определянето на синонимните гнезда и /* вероятно --К*/ за образуване на грам. форми на определена дума - виж Заб0.6.1.1. 0.6.6.1. Елементите притежават атрибут "чнр" (част на речта), който приема следните стойности: - "същ" (съществително име) - "прл" (прилагателно име) - "прч" (причастие) - "чсл" (числително име) - "мст" (местоимение) - "гл" (глагол) - "дпр" (деепричастие) - "нар" (наречие) - "прд" (предлог) - "сз" (съюз) - "чст" (частица) - "мжм" (междуметие) - "фр" (фраза) 0.6.6.2. В зависимост от стойността на "част на речта", всеки елемент има следните доп. атрибути: 0.6.6.2.1. "същ": 0.6.6.2.1.1. "р" (род) - приема стойности "м", "ж", "с", "-". 0.6.6.2.1.1.1. Рудиментарни правила за авт. определяне (и проверка) на "род": 1. "м": - когато думата завършва на съгласен звук (виж Заб0.6.1.2.III.) >>>NB<<< Провери за изключения от женски род в 2. - при следните думи: "баща", "войвода", "владика"; "съдия", "бояджия"...; "татко", "дядо", "чичо"; "аташе"; всички имена на месеци 2. "ж": - когато думата завършва на 'а' или 'я' >>>NB<<< Провери за изключения от мъжки род в 1. - думите "вечер", "пролет", "младост", ... >>>NB<<< Правило? Всички думи, които завършват на "-ост" и се състоят от поне пет букви: "злост", "гадост"... --Калин 3. "с": - когато думата завършва на 'о', 'е', 'и' или 'ю' >>>NB<<< Провери за изключения от мъжки род в 1. 4. "-" (неясен род) - думи без ед. число: "финанси", "очила", "обуща", "въглища"... 0.6.6.2.1.2. "ч" (число) - приема стойности "е", "м". 0.6.6.2.1.2.1. На този етап няма автоматични правила за определяне и образуване на единствено или множествено число поради прекалено големия брой грам. правила и изключения в бълг. език (вкл. промени в ударението). 0.6.6.2.1.2.2. За същ. имена с род "м" и число "м" съществува податрибут "форма" със стойности "обикн." и "бройна". Втората стойност се задава при употреба на бройната форма на съответното множествено число, напр. "три опита" - сравни "опити". 0.6.6.2.1.3. "член" (членуваност) - приема стойности "+" (за членувано същ.), "-"(за нечленувано). 0.6.6.2.1.3.1. На този етап няма автоматични правила за определяне и образуване на членувана форма поради прекалено големия брой грам. правила и изключения в бълг. език (вкл. промяна на ударението). 0.6.6.2.1.3.2. За същ. имена с род "м" и член "+" съществува податрибут "пълен" със стойности "п" (за пълен член) и "к" (за кратък), с тенденция за отпадане на "п" (и съответно податрибута "пълен"). 0.6.6.2.1.4. "зв" (звателна форма) - приема стойности "+" (за същ. в звателна форма), "-". 0.6.6.2.1.4.1. На този етап няма автоматични правила за определяне и образуване на звателна форма поради прекалено големия брой грам. правила и изключения в бълг. език (вкл. промяна на ударението). Заб0.6.6.2.1.1. Допълнителни същ. имена могат да се образуват автоматично от глаголи - виж Заб.0.6.6.2.6.5.10. 0.6.6.2.2. "прл": 0.6.6.2.2.1. "рч" (род-число) - приема стойности "м", "ж", "с", "мн". 0.6.6.2.2.1.1. Рудиментарни правила за авт. определяне (и проверка) на "рч": 1. "м" - когато думата завършва на съгласен звук (виж Заб0.6.1.2.III.) Заб. Прил. имена, завършващи на "ски", могат да бъдат "м" или "мн" - оставят се на преценката на потребителя. --Калин 2. "ж" - когато думата завършва на 'а' или 'я' 3. "с" - когато думата завършва на 'о' или 'е' 4. "мн" - когато думата завършва на 'и' -> Виж заб. към 1 --К 0.6.6.2.2.3. "член" (членуваност) - приема стойности "+" (за членувано прил.), "-"(за нечленувано). 0.6.6.2.2.3.1. Рудиментарни правила за авт. образуване на пълен член - според стойността на "рч": 1. при "м", се проверява последната буква на прил. име: 1.1. Ако е 'и', директно се прибавя "я", респ. "ят" за пълен член. 1.2. Ако е различна от 'и', се прибавя "ия", респ. "ият". 2. при "ж", се прибавя "та". 3. при "с", се прибавя "то". 4. при "мн", се прибавя "те". + Автоматичната проверка за членуваност е сходна. 0.6.6.2.2.3.2. За прил. имена с род-число "м" и член "+" съществува податрибут "пълен" със стойности "п" (за пълен член) и "к" (за кратък), с тенденция за отпадане на "п" (и съответно податрибута "пълен"). 0.6.6.2.3. "прч": притежава атрибути "рч" и "член", идентични на прил. имена (виж 0.6.6.2.2.1.-3.), и доп. атрибут: 0.6.6.2.3.4. "тип" със стойности "сег" (сегашно деятелно - "пишещ"), "мдс" (минало деятелно свършено - "писал"), "мдн" (мин. деят. несвършено - "пишел") или "мст" (минало страдателно - "писан"). Заб0.6.6.2.3.4.1. причастия от тип "мдн" нямат членувана форма ("член" винаги е "-"). Заб0.6.6.2.3.1. Причастия могат да бъдат автоматично образувани от съответните глаголи - виж Заб.0.6.6.2.6.5. 0.6.6.2.4. "чсл" - притежават основен атрибут "вид" със стойности "б" (бройни) и "р" (редни): 0.6.6.2.4.1. Бройни числителни - имат податрибути: 0.6.6.2.4.1.1. "ф" (форма) със стойности "о" (обикновена) - "един", "два", "три", ... - и "мл" (мъжколична) - "двама", "трима", ... 0.6.6.2.4.1.2. "член" (форма) - "+" или "-" Заб0.6.6.2.4.1.2.1. Правила за образуване и определяне на членувана форма - според формата 1. "о" - добави "те". 1.1. Изключения: "едно" - виж Заб0.6.6.2.4.1.3.; "два" - прибави "та". 2. "мл" - добави "та". Заб0.6.6.2.4.1.1. Няколко бройни числ. имат умалителни производни: "двенки/двечки", "тринки/трички", "четирки"; при тях стойността на форма винаги е "о" -> доп. податрибут "спец"?" --Калин Заб0.6.6.2.4.1.2. Следните бройни числ. имат приблизителни (апроксимативни) форми: "десетина", "стотина"; при тях стойността на форма винаги е "о", при членуване се добавя "та" -> доп. податрибут "спец"?" --Калин Заб0.6.6.2.4.1.3. "едно" винаги е във форма "о", скланя се като прил. име и има съответните атрибути - виж 0.6.6.2.2. Заб0.6.6.2.4.1.4. "два", "две" имат доп. атрибут "р" (род) - съответно "м" (мъжки) и "жс" (женски или среден). Заб0.6.6.2.4.1.5. "хиляда" е идентично на същ. име от ж.р. и има съответните атрибути - виж 0.6.6.2.1. Заб0.6.6.2.4.1.6. "милион", "милиард" са идентични на същ. имена от м.р. и имат съответните атрибути (вкл. атрибут "форма" със стойности "обикн." и "бройна" - виж 0.6.6.2.1.) 0.6.6.2.4.1. Редни числителни - имат същите податрибути като прил. имена - виж 0.6.6.2.2. 0.6.6.2.5. "мст" - основен атрибут "тип", чиито стойности определят податрибутите на елемента. 0.6.6.2.5.1. "лчн" - лични местоимения ("аз", "тебе", "му", ...). Имат следните податрибути: 0.6.6.2.5.1.1. "л" (лице) - приема стойности "1" (първо), "2" (второ), "3" (трето). 0.6.6.2.5.1.2. "ч" (число) - приема стойности "е" (единствено) и "м" (множествено). 0.6.6.2.5.1.3. "р" (род) - допълнителен податрибут за лични местоимения в 3л. ед.ч.; приема стойности "м", "ж" и "с". 0.6.6.2.5.1.4. "п" (падеж) - приема стойности "им" (именителен: "аз", "ти", ...), "вин" (винителен: "мен/мене", "ме", "теб/-е", "те", "него", "го", ...) и "дат" (дателен: "мене", "ми", "тебе", "ти", "нему", "му", ...). 0.6.6.2.5.2. "прит" - притежателни местоимения ("техен", "нейно", "им", ...). Имат следните податрибути: 0.6.6.2.5.2.1. "л" (лице) - приема стойности "1" (първо), "2" (второ), "3" (трето). 0.6.6.2.5.2.2. "рч" (род-число) - приема стойности "м", "ж", "с", "мн". 0.6.6.2.5.2.3. "член" (членуваност) - приема стойности "+" (за членувана дълга форма: "неговият", "твойта", ...), "-" (за нечленувана дълга форма: "мое", ...), "н" (за кратките форми "ми", "ти" , "му", "й", "ни", "ви", "им", които не се членуват). 0.6.6.2.5.2.3.1. За прит. мест. с род-число "м" и член "+" съществува податрибут "пълен" със стойности "п" (за пълен член) и "к" (за кратък), с тенденция за отпадане на "п" (и съответно податрибута "пълен"). 0.6.6.2.5.3. "взвр" - възвратни местоимения ("себе", "си", "свои", ...). Основният им податрибут е "подтип" и приема следните стойности: 0.6.6.2.5.3.1. "лчн" (лични възвр. мест.) - имат податрибут "п" (падеж), със стойности "вин" (винителен: "себе", "себе си", "се") и "дат" (дателен: "себе", "себе си", "си"). >>>NB<<< "себе си" се третира като неделима лексикална единица от три срички, с ударение на първата. --Калин 0.6.6.2.5.3.2. "прит" (притежателни възвр. мест.) - имат следните податрибути: 0.6.6.2.5.3.2.1. "рч" (род-число) - приема стойности "м", "ж", "с", "мн", "-" (за кратката форма "си"). 0.6.6.2.5.3.2.2. "член" (членуваност) - приема стойности "+" ("своята", ...), "-" ("свой", ...), "н" (за кратката форма "си", която не се членува). 0.6.6.2.5.3.2.2.1. За прит. възвр. мест. с род-число "м" и член "+" съществува податрибут "пълен" със стойности "п" (за пълен член) и "к" (за кратък), с тенденция за отпадане на "п" (и съответно податрибута "пълен"). 0.6.6.2.5.4. "пкз" - показателни местоимения ("този", "такава", "инакви", ...). Основният им податрибут е "подтип" и приема следните стойности: 0.6.6.2.5.4.1. "лп" (показ. мест. за лица и предмети) - имат податрибут "рч" (род-число), със стойности "м" ("този", "оня", ...) , "ж" ("тая", "онази", ...), "с" ("това", "онуй", ...) , "мн" ("тия", "онези", ...). 0.6.6.2.5.4.2. "прзн" (показ. мест. за признаци) - имат податрибут "рч" (род-число), със стойности "м" ("такъв", ...) , "ж" ("онакава", ...), "с" ("инакво", ...) , "мн" ("толчави", ...). 0.6.6.2.5.4.3. "кол" (показ. мест. за количество: "толкова", "толкоз") - нямат податрибути. 0.6.6.2.5.5. "впр" - въпросителни местоимения ("кой", "какви", "чие", ...). Основният им податрибут е "подтип" и приема следните стойности: 0.6.6.2.5.5.1. "лп" (въпр. мест. за лица и предмети) - имат податрибут "рч" (род-число), със стойности "м" ("кой", "кого", "кому") , "ж", "с", "мн". >>>NB<<< "кой" се изменя и според падежа - "кого" във винителен, "кому" в дателен, но не виждам причина за разграничаването на трите форми с податрибут. --Калин 0.6.6.2.5.5.2. "прзн" (въпр. мест. за признаци) - имат податрибут "рч" (род-число), със стойности "м" ("какъв", "колчав") , "ж", "с", "мн". 0.6.6.2.5.5.3. "прит" (въпр. мест. за притежание) - имат податрибут "рч" (род-число), със стойности "м" ("чий") , "ж", "с", "мн". 0.6.6.2.5.5.4. "кол" (въпр. мест. за количество: "колко", "колцина") - нямат податрибути. 0.6.6.2.5.6. "отн" - относителни местоимения ("който", "каквито", "чието", ...). Основният им податрибут е "подтип" и приема следните стойности: 0.6.6.2.5.6.1. "лп" (отн. мест. за лица и предмети) - имат податрибут "рч" (род-число), със стойности "м" ("който", "когото", "комуто") , "ж", "с", "мн". >>>NB<<< "който" се изменя и според падежа - "когото" във винителен, "комуто" в дателен, но не виждам причина за разграничаването на трите форми с податрибут. --Калин 0.6.6.2.5.6.2. "прзн" (отн. мест. за признаци) - имат податрибут "рч" (род-число), със стойности "м" ("какъвто"), "ж", "с", "мн". 0.6.6.2.5.6.3. "прит" (отн. мест. за притежание) - имат податрибут "рч" (род-число), със стойности "м" ("чийто"), "ж", "с", "мн". 0.6.6.2.5.7. "неопр" - неопределителни местоимения ("някой", "някакви", "нечие", ...). Основният им податрибут е "подтип" и приема следните стойности: 0.6.6.2.5.7.1. "лп" (неопр. мест. за лица и предмети) - имат податрибут "рч" (род-число), със стойности "м" ("някой", "някого", "някому") , "ж", "с", "мн". >>>NB<<< "някой" се изменя и според падежа - "някого" във винителен, "някому" в дателен, но не виждам причина за разграничаването на трите форми с податрибут. --Калин 0.6.6.2.5.7.2. "прзн" (неопр.. мест. за признаци) - имат податрибут "рч" (род-число), със стойности "м" ("някакъв"), "ж", "с", "мн". 0.6.6.2.5.7.3. "прит" (неопр. мест. за притежание) - имат податрибут "рч" (род-число), със стойности "м" ("нечий"), "ж", "с", "мн". 0.6.6.2.5.7.4. "кол" (неопр. мест. за количество: "няколко", "неколцина") - нямат податрибути. 0.6.6.2.5.8. "отр" - отрицателни местоимения ("никой", "никакви", "ничие", ...). Основният им податрибут е "подтип" и приема следните стойности: 0.6.6.2.5.8.1. "лп" (неопр. мест. за лица и предмети) - имат податрибут "рч" (род-число), със стойности "м" ("никой", "никого", "никому") , "ж", "с", "мн". >>>NB<<< "никой" се изменя и според падежа - "никого" във винителен, "никому" в дателен, но не виждам причина за разграничаването на трите форми с податрибут. --Калин 0.6.6.2.5.8.2. "прзн" (неопр.. мест. за признаци) - имат податрибут "рч" (род-число), със стойности "м" ("никакъв"), "ж", "с", "мн". 0.6.6.2.5.8.3. "прит" (неопр. мест. за притежание) - имат податрибут "рч" (род-число), със стойности "м" ("ничий"), "ж", "с", "мн". 0.6.6.2.5.8.4. "кол" (неопр. мест. за количество: "николко") - нямат податрибути. 0.6.6.2.5.9. "обобщ" - обобщителни местоимения ("всеки", "всякакви", ...). Основният им податрибут е "подтип" и приема следните стойности: 0.6.6.2.5.9.1. "лп" (неопр. мест. за лица и предмети) - имат податрибут "рч" (род-число), със стойности "м" ("всеки/всякой", "всекиго/всякого", "всекиму/всякому") , "ж", "с", "мн". >>>NB<<< "всеки/всякой" се изменя и според падежа - "все-/всякого" във винителен, "все-/всякому" в дателен, но не виждам причина за разграничаването на трите форми с податрибут. --Калин 0.6.6.2.5.9.2. "прзн" (неопр.. мест. за признаци) - имат податрибут "рч" (род-число), със стойности "м" ("всякакъв"), "ж", "с", "мн". 0.6.6.2.5.9.3. "кол" (неопр. мест. за количество) - имат податрибут "рч" (род-число), със стойности "м" ("всичкия/-т"), "ж", "с", "мн". 0.6.6.2.5.9.3.1. За обобщ. мест. с род-число "м" съществува податрибут "пълен" със стойности "п" (за пълен член) и "к" (за кратък), с тенденция за отпадане на "п" (и съответно податрибута "пълен"). 0.6.6.2.5.9.3.2. Нечленуваните форми в ж. и ср.р. и мн.ч. не се отличават смислово от членуваните (напр. "всички" и "всичките" са равностойни), затова не е необходимо въвеждането на доп. податрибут за членуваност. Заб0.6.6.2.5.1. За кратките местоимения без ударения ("ме", "я", "им", "си", ...) виж Заб0.6.6.2.9.1. 0.6.6.2.6. "гл": 0.6.6.2.6.1. "вз" (възвратност) - приема стойности "-", "е", "и". /* Необходим за откриване на енклитики - виж 0.6.3.1 --Калин */ 0.6.6.2.6.1.1. "-" означава невъзвратен глагол. 0.6.6.2.6.1.2. "е" означава възвратен глагол с частицата "се": "шегувам се", "(да) се разберем". 0.6.6.2.6.1.3. "и" означава възвратен глагол с частицата "си": "мисля си", "(да) си изясним". 0.6.6.2.6.2. "вид" - приема стойности "св", "несв", "-". 0.6.6.2.6.2.1. "св" означава свършен вид: "ще кажа", "тръгнах". 0.6.6.2.6.2.1.1. При автоматично образуване на грам. форми ползват несвършената и миналата основа - виж Заб.0.6.6.2.6.0.2., 3. 0.6.6.2.6.2.2. "несв" означава несвършен вид: "казвам", "тръгвах". 0.6.6.2.6.2.2.1. При автоматично образуване на грам. форми ползва свършената основа - виж Заб.0.6.6.2.6.0.1. 0.6.6.2.6.2.3. "-" означава неопределен/двойнствен вид: всички глаголи, завършващи на "-ира": "блокирам", "нервирам". >>>NB<<< При синонимни замествания потребителят трябва да определи вида. --Калин 0.6.6.2.6.3. "л" (лице) - приема стойности "1" (първо), "2" (второ), "3" (трето). Заб0.6.6.2.6.3.1. Може да се определи или образува автоматично за правилни глаголи (виж Заб.0.6.6.2.6.2.) според спрежението (при вид "несв") - виж 0.6.6.2.6.2.2. - или разряда (при вид "св") - виж 0.6.6.2.6.2.1. 0.6.6.2.6.4. "ч" (число) - приема стойности "е" (единствено) и "м" (множествено). Заб0.6.6.2.6.4.1. Може да се определи или образува автоматично за правилни глаголи (виж Заб.0.6.6.2.6.2.) според спрежението (при вид "несв") - виж 0.6.6.2.6.2.2. - или разряда (при вид "св") - виж 0.6.6.2.6.2.1. Заб0.6.6.2.6.4.2. Някои глаголи имат само мн. ч.: "насядаме", "налягаме", ... 0.6.6.2.6.5. "накл" (наклонение) - приема стойности "из" (изявително) и "пов" (повелително). Заб.0.6.6.2.6.5.1. В бълг. съществуват общо 4 наклонения; условното и преизказното се образуват с форми на глагола "съм" и минали деятелни причастия (свършени или несв.), следователно не ползват допълнителни грам. форми и за целите на алгоритъма не изискват специфично разграничаване. Заб.0.6.6.2.6.0. За целите на алгоритъма: 1. "несвършена основа" на глагола се нарича грам. форма в 3л., ед.ч., сег.вр. на глагол от несвършен вид. 2. "свършена основа" на глагола се нарича грам. форма в 3л., ед.ч., сег.вр. на глагол от свършен вид. 2. "минала основа" на глагола се нарича формата в 3л., ед.ч., мин.св.вр. >>> Възможно обединяване на св. и мин. основа? --Калин Заб.0.6.6.2.6.1. Допълнителен атрибут "спрж" (спрежение) - определя се автоматично при проверка на несвършената и свършената основа /* Служи за авт. образуване на глаголни форми, всички видове деепричастия - виж Заб.0.6.6.2.6.5.10. - и отглаголни съществителни - виж Заб.0.6.6.2.6.5.11. --Калин */ и получава стойност: 1. "1" - когато основата завършва на 'е'. 2. "2" - когато основата завършва на 'и'. 3. "3" - когато основата завършва на 'а' или 'я'. Заб.0.6.6.2.6.2. Доп. атрибут "рзрд" (разряд) - определя се автоматично при проверка на миналата основа /* Служи за авт. образуване на глаголни форми --К*/ и получава стойност: 1. "1" - когато основата завършва на 'е': "чете", "рече" 2. "2" - когато основата завършва на 'и': "пи", "наби" 3. "3" - когато основата завършва на 'а': "тръгна", "игра" 4. "4" - когато основата завършва на 'я': "спря", "бля" 5. "5" - когато основата завършва на 'у': "чу", "обу" 6. "6" - когато основата завършва на 'ю': "плю" Заб.0.6.6.2.6.3. Допълнителен атрибут "изм" (изменение) /* нужен при автоматично образуване на грам. форми --К */ с възможни стойности: 1. "п" (правилно) - дадената глаголна форма е образувана според набора от правила в Заб.0.6.6.2.6.5. и може да послужи за образуването на други форми на същия глагол. 2. "н" (неправилно) - формата не може да послужи за авт. образуване на други форми (напр. "съм"). Заб.0.6.6.2.6.5. Рудиментарни правила за образуване на грам. форми на глагола, причастия (0.6.6.2.3.) и отглаголни съществителни (0.6.6.2.1.) - приложими само за правилни глаголи (виж Заб.0.6.6.2.6.3.) 1. Несвършени гл. форми в сег. вр. и бъд. вр. - използва се несвършената основа. Изменят се според стойността на "спрж". 1.1. При спрежение "1" - премахни крайното "е" и добави на негово място "а", "еш", "е", "ем", "ете" и "ат", 1.2. При спрежение "2" - премахни крайното "и" и добави на негово място "я", "иш", "и", "им", "ите", "ят", 1.3. При спрежение "3" - добави към крайното "а|я" "м", "ш", "", "ме", "те", "т", за да получиш 1л.,ед.ч., 2л.,ед.ч., 3л.,ед.ч., 1л.,мн.ч, 2л.,мн.ч., и 3л.,мн.ч. на сегашните несвършени форми. >>>NB<<< Ударението запазва мястото си. За получаване на съответните бъдещи форми се прибавя проклитиката "ще". 2. Гл. форми в мин. несв. вр. - използва се несвършената основа. Изменят се според стойността на "спрж". 2.1. При спрежение "1" или "2" - премахни крайното "е", респ. "и", и провери дали ударението пада върху последната сричка от основата. 2.1.1. Ако да ("чете", "крещи"), добави "ях", "еше", "еше", "яхме", "яхте", "яха", 2.1.2. Ако не ("пише", "борави"), добави "ех", "еше", "еше", "ехме", "ехте", "еха", 2.2. При спрежение "3" - добави към крайното "а|я" "х", "ше", "ше", "хме", "хте", "ха", за да получиш 1л.,ед.ч., 2л.,ед.ч., 3л.,ед.ч., 1л.,мн.ч, 2л.,мн.ч., и 3л.,мн.ч. на миналите несвършени форми. >>>NB<<< Ударението запазва мястото си. 3. Свършени гл. форми в сег. вр. и бъд. вр. - използва се свършената основа. Изменят се според стойността на "спрж". 3.1. При спрежение "1" - аналогично на 1.1.1. 3.2. При спрежение "2" - анал. на 1.1.2. 3.3. При спрежение "3" - анал. на 1.1.3. >>>NB<<< Ударението запазва мястото си. За получаване на съответните бъдещи форми се прибавя проклитиката "ще". >>>NB<<< Примери за неправилни изменения (само при спрежение 1): - 'ч' -> 'к': "рече" - "река" - 'ж' -> 'г': "може" - "мога" - 'е' -> 'я': "дене" - "дяна" - скъсяване на основа: "даде" - "дам" ... 4. Гл. форми в мин. св. вр. - използва се миналата основа. Изменят се според стойността на "рзрд". 4.1. При разряд "1" - премахни крайното "е" и добави "ох", "е", "е", "охме", "охте", "оха", 4.2. При разряд "2", "3", "4", "5" или "6" - добави към основата "х", "", "", "хме", "хте", "ха", за да получиш 1л.,ед.ч., 2л.,ед.ч., 3л.,ед.ч., 1л.,мн.ч, 2л.,мн.ч., и 3л.,мн.ч. на миналите свършени форми. >>>NB<<< Ударението запазва мястото си или се премества на последната сричка от основата (двете форми са книжовни дублети); преместването е позволено само ако глаголът няма представки. -> Доп. база данни с възможни представки при глаголи? --Калин >>>NB<<< Примери за неправилни изменения: - 'ч' -> 'к': "рече" - "рекох" - 'е' -> 'я': "облече" - "облякох" ... >>> Заб. за 3. и 4. Формите със спрежение "3", респ. разряд "3"/"4", са почти идентични със съответните несвършените форми със спрежение "3" (изкл. правят миналите форми за 2 и 3л., ед.ч.); граматически "свършени" ги прави представката (напр. "из-" в "извика") -> с цената на малка допълнителна база от такива представки ("из-", "за-", "по-", ...) можем да сведем 3.3. и част от 4.2. (при рзрд "3" или "4") до 1.3. (+ глаголи като "почете", от 3.1. -> "чете", 1.1.; "загърми", от 3.2. -> "гърми", 1.2.) 5. Повелително наклонение, >>>NB<<< специални форми в 2л., ед. и мн. ч. - използват се несвършената и свършената основа. Образува се според стойността на "спрж" и предпоследната буква в основите. 5.1. При спрежение "1": 5.1.1. и предпоследна гласна (виж Заб.0.6.1.2.I., II.) в основата ("пее", "ридае", "крие", "плюе") - изтрий "е" и прибави "й", респ. "йте"; ударението запазва мястото си. 5.1.2. и предпоследна съгласна в основата ("чете", "пише") - за 2л., ед.ч., изтрий "е" и прибави "и"; ударението пада на прибавеното "и"; за 2л., мн. ч., прибави "те" и премести ударението на крайното "е" от основата. 5.2. При спрежение "2" - за 2л., ед.ч. няма фонетична промяна; ударението се премества на крайното "и"; за 2л.,мн.ч., изтрий крайното "и" и прибави "ете", с ударение на предпоследното 'е'. 5.3. При спрежение "3" - добави "й", респ. "йте" към основата; ударението запазва мястото си. 6. Сегашни деятелни причастия - използва се несвършената основа. Образуват се според стойността на "спрж". 6.1. При спрежение "1" или "2" - премахни крайното "е", респ. "и", и провери дали ударението пада върху последната сричка от основата. 6.1.1. Ако да ("чете", "крещи"), добави "ащ, аща, ащо, ащи" (след 'ж', 'ч', 'ш') или "ящ, яща, ящо, ящи" (след друг съгласен - виж Заб.0.6.1.2.III), с ударение върху добавената сричка. 6.1.2. Ако не ("пише", "борави"), добави "ещ,-а,-о,-и"; ударението запазва първоначалната си позиция. 6.2. При спрежение "3" - добави към основата "щ,-а,-о,-и"; ударението се запазва. 7. Мин. св. деят. причастия - използва се миналата основа. Образуват се според стойността на "рзрд". 7.1. При разряд "1" - (общ случай) премахни крайното "е" и добави "ъл, ла, ло, ли". >>>NB<<< Много изключения - сравни неправилни изменения в 4. + чете -> чел, дойдох -> дошъл, дадох -> дал 7.2. При разряд "2", "3", "4", "5" или "6" - добави към основата "л, ла, ло, ли". >>>NB<<< ятов преглас: при добавяне на "ли", непосредствено предшестващо 'я' се превръща в 'е'. Ударението запазва мястото си. 8. Мин. несв. деят. причастия - използва се 1л.,ед.ч., мин. несв. вр. на съответната форма на глагола - виж 2.; крайното "х" се заменя с "л, ла, ло, ли", всичко останало се запазва. >>>NB<<< Ятов преглас: при добавяне на "ли", непосредствено предшестващо 'я' се превръща в 'е'. 9. Мин. страд. причастия - използва се миналата основа. Образуват се основно според стойността на "рзрд". 9.0. Ако основата е едносрична ("пи", "взе", "пя", ...) или глаголът е образуван от такава основа с представки ("изпи", "обвзе", "запя", ...) , добави "т,-а,-о,-и" -> За пореден път: нужда от глаголообразуващи представки --Калин 9.1. При разряд "1", добави "н,-а,-о,-и". 9.2. При разряд "2", изтрий крайното 'и' и добави "ен,-а,-о,-и". 9.3. При разряд "3": 9.3.1. Ако основата завършва на "на", добави "т,-а,-о,-и". 9.3.2. В противен случай добави "н,-а,-о,-и". 9.4. При разряд "4", добави "н,-а,-о,-и". 9.5. При разряд "5" и "6", добави "т,-а,-о,-и". >>>NB<<< Ятов преглас: при добавяне на "н/ти", непосредствено предшестващо 'я' се превръща в 'е'. Ударението запазва мястото си. Заб9.1. Съществуват книжовни дублетни форми: "нагрят" - "нагрян", "изпят" - "изпян", ... 10. Деепричастия - използва се несвършената основа на глагола. Образуват се според спрежението: 10.1. При спрежение "1" и "3", към основата се добавя "йки". 10.2. При спрежение "2" , крайното 'и' се изтрива и към основата се добавя "ейки". 11. Отглаголни съществителни с окончание "-не" - образуват се според стойността на "спрж". 11.1. При спрежение "1" се използва: 11.1.1. несвършената основа - добави "не" ("чете" - "четене"). 11.1.2. миналата основа - добави "не" ("писа" - "писане"). >>>NB<<< За момента правило за избор между 1.1. и 1.2. се търси - вероятно трябва да се добави атрибут, който да определя избора. --Калин 11.2. При спрежение "2" - премахни крайното "и" и добави "ене". 11.3. При спрежение "3" - добави "не". >>>NB<<< Ударението запазва мястото си. 0.6.6.2.7. "дпр": нямат податрибути. 0.6.6.2.8. "нар": Като неизменяеми части на речта, местоименията нямат морфологични атрибути. Въвеждането на атрибут "вид", който отразява смисловата им употреба, може да позволи автоматичното създаване на контекстови синонимни гнезда (виж 0.7.0.3.). Примерни стойности за "вид": - "нчн" (наречия за начин): "така", "иначе", "другояче", ... - "врм" (наречия за време): "днес", "сега", "нощес", "веднага", ... - "мяс" (наречия за място): "горе", "вляво", "назад", "там", ... - "кол" (наречия за количество): "много", "често", "веднъж", "двукратно", ... 0.6.6.2.9. "прд": Нямат морфологични атрибути. Заб0.6.6.2.9.1. Предлозите без ударение (едносрични и "в", "с") се отбелязват или със специален атрибут "уд", чиито възможни стойности са "п" (проклитика) или "е" (енклитика), или с директно отбелязване в кодирането на елемента /* implementation особеност на ударението --К */ - виж 0.6.3. Всички предлози без ударение са проклитики. 0.6.6.2.10. "сз": Нямат атрибути. Заб0.6.6.2.10.1. Съюзите без ударение (едносрични и "или") се отбелязват сходно на предлозите без ударение - виж Заб0.6.6.2.9.1. Всички съюзи без ударение са проклитики. 0.6.6.2.11. "чст": Нямат атрибути. Заб0.6.6.2.10.1. За частиците без ударение ("да", "не", "ще", ...) виж Заб0.6.6.2.9.1. Такива частици могат да бъдат енклитики ("ли", "де", "бе", ...) или проклитики ("да", "не", "ще"). 0.6.6.2.12. "мжм": Нямат атрибути. 0.6.6.2.13. "фр": Фразите са всички последователности от думи, които образуват една неделима смислова единица. Основният им податрибут е "тип", със следните възможни стойности: 0.6.6.2.13.1. "същ" (напр. "лека жена", "лека кола"): Притежават същите податрибути като същ. имена - виж 0.6.6.2.1. 0.6.6.2.13.2. "гл" (напр. "дигам гири", "хвърлям си думите на вятъра"): Притежават същите податрибути като глаголите - виж 0.6.6.2.6. 0.6.6.2.13.3. "нар" (напр. "горе-долу", "в никакъв случай"): Притежават същите податрибути като наречията - виж 0.6.6.2.8. 0.6.6.2.13.4. "прд" (напр. "въз основа на", "по случай"): Нямат податрибути. 0.6.6.2.13.5. "сз" (напр. "при условие че", "ето защо"): Нямат податрибути. 0.6.6.2.13.6. "мжм" (напр. "да му се не види/знае"): Нямат податрибути. 0.6.7. Допълнителен атрибут "окр" (окраска) определя дали определен елемент има специфична стилистична окраска /* може да се използва при създаването на постоянни и контекстови син. гнезда --К */. 0.6.7.1. Примерни стойности: - "о" (обикновен): липсва стилистичен оттенък - "умал" (умалителен), "увел" (увеличителен) - "вулг", "гр" (груб), "жарг", "разг" - "книж" (книжовен), "поет", "арх" (архаичен), "ост" (остарял), "науч" (употребяван в науката), "лит" (литературен термин), ... 0.6.8. Допълнително поле "заб", в което могат да се отбележат морфологични, стилистични и др. особености на елемента, неотразени в останалите атрибути. /*********************************************************/ Заб0.7. Специфични онтологични и implementation особености на база данни Б: речник на синонимните гнезда (СГ) 0.7.0. Специфична терминология: 0.7.0.1. лексикална единица (ЛЕ): дума или фраза, която присъства като самостоятелен елемент в база данни А 0.7.0.2. постоянно СГ (ПСГ): съдържа ЛЕ, които са взаимозаменяеми независимо от контекста (напр. "месечина" и "луна") 0.7.0.3. контекстово СГ (КСГ): съдържа ЛЕ, които са взаимозаменяеми само в определен контекст (напр. "месец" и "луна" <-> "месец" и "тридесет дни"; "патриотизъм" и "национализъм") >>>NB<<< Подходяща структура за имплементацията на синонимно гнездо е set/множество със заглавна ЛЕ, която съдържа pointers/указатели към всички останали ЛЕ в гнездото; тази заглавна ЛЕ (със съответната добавка на индекс, ако въпросната ЛЕ служи като заглавна ЛЕ в повече от едно СГ) служи като ключ, разграничаващ СГ от всички останали СГ - виж 0.5.0. Останалите ЛЕ от гнездото съдържат единичен указател към заглавната ЛЕ. --Калин >>>NB<<< Класификация на указателите - всеки указател съдържа атрибут "вид" с една от следните стойности: - "член, постоянен": указател от заглавна ЛЕ към незаглавна ЛЕ в същото постоянно СГ; множеството от всички ЛЕ, сочени от такива указатели, дава един елемент в база данни Б от тип "ПСГ" - "член, контекстов": указател от заглавна ЛЕ към незаглавна ЛЕ в същото контекстово СГ; множеството от всички ЛЕ, сочени от такива указатели, дава един елемент в база данни Б от тип "КСГ" >>>NB<<< От горните дефиниции на елемент в БД Б следва, че ако използваме една и съща ЛЕ за заглавна в повече от едно ПСГ или КСГ, тя трябва да бъде разграничавана от себе си чрез индекс или сходно - "корен, постоянен": указател от незаглавна ЛЕ към заглавната ЛЕ в съответното постоянно СГ; всяка ЛЕ (вкл. ЛЕ, които служат за заглавни в определено СГ) съдържа по един такъв указател за всяко ПСГ, в което принадлежи - "корен, контекстов": указател от незаглавна ЛЕ към заглавната ЛЕ в съответното контекстово СГ; всяка ЛЕ (вкл. ЛЕ, които служат за заглавни в определено СГ) съдържа по един такъв указател за всяко КСГ, в което принадлежи 0.7.1. По време на изпълнение на алгоритъма (виж 3.4.), всички ЛЕ в ПСГ се заменят без допитване до потребителя. 0.7.2. За ЛЕ, които принадлежат към едно КСГ, винаги се извежда въпрос към потребителя (от типа на "Синоними ли са тук X и Y?"), с възможни отговори: 0.7.2.1. "Не, само този път" - алгоритъмът не извършва замяна; при следващо попадане на същите контекстови синоними отново задава горният въпрос. 0.7.2.2. "Не, никога в тази творба" - алгоритъмът не извършва замяна и отбелязва цялото КСГ, на което принадлежат двете ЛЕ, като несинонимно в рамките на редактирания текст; при следващо попадане на същите ЛЕ ги пренебрегва. 0.7.2.3. "Да, само този път" - алгоритъмът извършва замяна; при следващо попадане на същите контекстови синоними отново задава горният въпрос. 0.7.2.4. "Да, винаги в тази творба" - алгоритъмът извършва замяна и отбелязва цялото КСГ, на което принадлежат двете ЛЕ, като ПСГ в рамките на редактирания текст; при следващо попадане на същите ЛЕ или ЛЕ от същото СГ ги заменя без допитване до потребителя. Заб0.7.2.1. Повечето многозначни думи ("глава", "език", ...) не могат да участват в ПСГ именно поради многозначието си; такива думи участват в по няколко КСГ. 0.7.3. В синонимните бази се допуска присъствието на "делими фрази" (например "тридесет дни" като контекстов синоним на "месец"), съставени от няколко независими ЛЕ от база А. За разлика от "неделимите" фрази от 0.6.6.2.13., веднъж заместени по време на редакция, делимите фрази могат да бъдат възприемани като последователност от самостоятелни ЛЕ и всяка от изграждащите ги ЛЕ да бъде замествана по отделно (например "тридесет дни" последователно става "трийсет дни" -> "трийсет деня"). >>> Допълнителен атрибут или тип към 0.6.6.1.? --К 0.7.9. Морфологични ограничения на СГ - задължителни (и проверявани при редакция и създаване на СГ) са следните условия: 0.7.9.1. Всички ЛЕ в едно СГ са еднакви части на речта (виж 0.6.6.1.) или са произволна комбинация от: 0.7.9.1.1. същ. имена, прил. имена, причастия от типове "сег", "мдс" и "мст" (виж 0.6.6.2.3.4.), и фрази от тип "същ" (виж 0.6.6.2.13.1.). 0.7.9.1.2. глаголи и фрази от тип "гл" (виж 0.6.6.2.13.2.). 0.7.9.1.3. наречия и фрази от тип "нар" (виж 0.6.6.2.13.3.). 0.7.9.2. ЛЕ в една СГ, които са еднакви части на речта или принадлежат към случаите 0.7.9.1.1.-3. задължително имат еднакви морфологични атрибути. 0.7.9.2.1. За същ. имена и фрази от тип "същ", това са "р", "ч", "член" и "зв" (виж 0.6.6.2.1.) 0.7.9.2.2. За прил. имена това са "рч" и "член" (виж 0.6.6.2.2.) 0.7.9.2.3. За причастия това са "рч", "член" и "тип" (виж 0.6.6.2.3.) 0.7.9.2.4. За числ. имена това са "тип" и (са бройни) "член" или (за редни) съответните податрибути (виж 0.6.6.2.4.) 0.7.9.2.5. За мест. това са "тип" и всички съответни податрибути (виж 0.6.6.2.5.) 0.7.9.2.6. За глаголи и фрази от тип "гл", това са "вид", "л", "ч" и "накл" (виж 0.6.6.2.6.) 0.7.9.2.8. За наречия и фрази от тип "нар", това е (евентуално) "вид" (виж 0.6.6.2.8.) /*********************************************************/ Заб0.8. Специфични онтологични и implementation особености на база данни В: речник на римните гнезда (РГ) 0.8.0. Специфична терминология: 0.8.0.1. лексикална единица (ЛЕ) - равнозначна на 0.7.0.1. >>>NB<<< Както при СГ, подходяща структура за имплементацията на РГ е set със заглавна ЛЕ, която съдържа pointers/указатели към всички останали ЛЕ в гнездото; тази заглавна ЛЕ (със съответната добавка на индекс, ако въпросната ЛЕ служи като заглавна ЛЕ в повече от едно СГ - напр. при омографи?) служи като ключ, разграничаващ СГ от всички останали СГ - виж 0.5.0. Останалите ЛЕ от гнездото съдържат единичен указател към заглавната ЛЕ. --Калин >>>NB<<< Класификация на указателите - всеки указател съдържа атрибут "вид" с една от следните стойности: - "член": указател от заглавна ЛЕ към незаглавна ЛЕ в същото РГ; множеството от всички ЛЕ, сочени от такива указатели, дава един елемент в база данни В >>>NB<<< От горните дефиниции на елемент в БД В следва, че ако използваме една и съща ЛЕ за заглавна в повече от едно РГ, тя трябва да бъде разграничавана от себе си чрез индекс или сходно - "корен": указател от незаглавна ЛЕ към заглавната ЛЕ в съответното РГ; обикновена всяка ЛЕ принадлежи само към едно РГ и съответно съдържа само един такъв указател; изключение са омографите >>>NB<<< В зависимост от implementation на ударението, омографите може би ще се възприемат като различни ЛЕ и второто условие ще отпадне --Калин 0.8.1. По време на изпълнение на алгоритъма, всички ЛЕ, маркирани от потребителя като римни (виж 2.3.В. и 3.4.), първо се заместват според правилата в бази данни Б и Г и после се проверяват за римуваност, т.е. принадлежност към едно и също РГ. 0.8.9. Морфологични ограничения на СГ - няма. Римите могат да бъдат произволни части на речта, с произволни морфологични атрибути. >>>NB<<< За намиране на по-нестандартни рими, които не могат да се впишат в определено РГ (напр. една дума, която се римува с няколко: "ананас" и "а на вас") трябва да се създадат правила за римуващи се групи от звуци (сравни Заб.0.6.1.2.) - напр. всички думи или звукосъчетания, които завършват на -а--в--аъ-(ударението е на предпоследното -а-), образуват автоматично РГ. --Калин /*********************************************************/ Заб0.9. Специфични онтологични и implementation особености на база данни Г: правила за грам. промени в текста 0.9.1. Правилата биват няколко осн. типа: 0.9.1.1. Добавяне - в редактираната част се прибавя нова ЛЕ: напр. лично местоимение ("аз", "ний", ...), предлог в началото на смислова фраза ("а", "и", "та", ...), междуметие ("ами", "шуей", ...), повторение ("добре, добре", "аз, аз го казах", ...). 0.9.1.2. Изпускане - от редактираната част се изтрива определена ЛЕ - сравни с 0.9.1.1. за примери. 0.9.1.3. Инверсия - две съседни ЛЕ в редактираната част сменят местата си: напр. същ. име и прил. име/числ. име/ местоимение - притежателно, неопределително, отрицателно или обобщително ("мои Герои" <-> "Герои мои"; "последен бой" <-> "бой последен"; ...); глагол и наречие/същ. име/прил. име/числ. име/ местоимение ("той рече" <-> "рече той"; "вървях първи" <-> "първи вървях"; "викна гневно" <-> "гневно викна"); възвратен глагол и частицата "се/си" ("загледах се" <-> "се загледах"). 0.9.2. На този етап, употребата на правило от БД Г винаги изисква потвърждение от потребителя. Възможно е да се включат опции, сходни с изброените в 0.7.2. /*********************************************************/ /* Начало на същинския алгоритъм */ 1. Правописна корекция 1.0. Попитай потребителя дали желае да изтегли най-новите версии на централните бази данни. При положителен отговор, действай според указанията в 0.5.3.6. 1.1. Провери текста за правописни грешки. Заб.1.1.1. Под "правописна грешка" се разбира буквосъчетание/символен низ, който не присъства като елемент в лична БД А на потребителя и не може да бъде образуван автоматично от присъстващ елемент (виж раздел 0.6.6.2. за правила за авт. формообразуване). 1.1.А. При откриване на грешка, маркирай я, изведи списък с близкоизписвани съществуващи елементи в лична БД А /* >>>NB<<< необходим алгоритъм за откриване на близкоизписвани низове - ще откраднем готов --К */ и дай на потребителя следните възможности: А. "Поправи веднъж" - Потребителят избира правилната ЛЕ от списъка или я въвежда ръчно. При следващо попадане на същата грешка, повтори 1.1. Б. "Поправи всички" - Потребителят избира правилната ЛЕ от списъка или я въвежда ръчно. При следващо попадане на същата грешка, поправи я автоматично с избраната от потребителя ЛЕ. В. "Зарежи веднъж" - Отбележи маркирания низ като правилен само този път. При следващо попадане на същия низ, повтори 1.1. Г. "Зарежи всички" - Отбележи маркирания низ като правилен в рамките на редактираната творба. При следващо попадане на същия низ, пренебрегни го. Д. "Добави" - Изведи прозорец с полета за добавяне на новия низ към лична база А - виж 0.5.3.2. Д.1. Допълнителна опция "Добави към централната база" - отбележи елемента като "нов" и след приключване на редакцията (виж 4.) действай според описаното в 0.5.3.7. /*********************************************************/ 2. Стилистична редакция - включва стъпкова и/или римна редакция 2.1. Изведи избор за редакция на стъпковата и/или римната структура. 2.1.А. Ако потребителят не избере нито една от двете възможности, премини на 4.; иначе продължи. 2.1.Б. Ако е избрана стъпкова редакция, сканирай творбата според ударенията, зададени в елементите на лична база А, и според правилата за автоматично разпознаване на срички в 0.6.5. Представи ударените срички с "у", неударените - с "н". Запази всички нови редове и пунктуацията при изобразяване на стъпковата структура. Заб.2.1.Б.1. Отбележи всички непознати низове, останали след стъпка 1., с последователност от "х" (срички с неизвестно ударение). За да определиш броя на сричките в непознатите низове, използвай правилата в 0.6.5. Пример 1: Хич не ме поглеждай, кукло черновежда... -> след сканинг: унннун, унхххх... ("черновежда" не присъства в лична база А на въпросния потребител) Пример 2: Ще да пия напук врагу, напук и вам, патриоти! Аз веч нямам мило, драго, а вий... вий сте идиоти! -> след сканинг: ннуннуун, нунуннун! ууунун,ун, ну...ууннун! 2.1.В. Ако е избрана римна редакция, сканирай последните думи във всеки ред /* Последните пет срички достатъчни ли са? --К */ за разпознаваеми елементи от лична база В. Отбележи всички елементи, принадлежащи към едно римно гнездо (РГ), с една и съща буква (А, Б, В, ..., АА, АБ, АВ, ...). Пример 1 - типичен петредов лимерик: А А Б Б А Пример 2: "Убийца нощ" (http://bukvite.com/poem.php?docid=5886); резултатът от сканинга е следният: А Б В Б Г 5 Б Д Б Е Б 10 Ж Б З Б И 15 Б Й Б К Л 20 М Б Н Л А 25 О П Р /* "преоблича" и "закичва" в едно римно гнездо ли са? --К */ А Р 30 С Т У Ф Х 35 Ц Б Ф Ф Ч 40 /* Не претендирам за изцяло верен сканинг... нали затова искаме да автоматизираме процеса --Калин */ 2.1.В.1. Ако срещнеш непознати ЛЕ/сричкови последователности, дай възможност на потребителя да ги добави към лична база В - виж 0.5.3.2. 2.3. Представи на потребителя резултатите от стъпковия и/или римния сканинг (поотделно), в по две версии - настояща, която не може да се редактира, и желана, която потребителят може да промени, така че да отговаря на желаната крайна стъпкова и/или римна структура; първоначално желаната е копие на настоящата. В отделна, трета версия, представи пълния текст на творбата - потребителят има право да маркира определени елементи в него, които да се запазят по време на редакцията в стъпка 3. - виж 2.3.Г. /* или вътрешни римни двойки - виж NB към 2.3.В.1 --К */ 2.3.А. Ако потребителят не внесе никакви промени в коя да е от желаните версии (стъпкова и/или римна), премини на 4. 2.3.Б. Особености на стъпковите редакции, внесени от потребителя: 2.3.Б.1. Освен задължително ударени ("у") и неударени ("н") срички, потребителят може да отбелязва и срички с произволно ударение ("п"). По време на замените в стъпка 3., те могат да бъдат заемани както от ударени, така и от неударени срички. 2.3.В. Особености на римните редакции, внесени от потебителя: 2.3.В.1. Дай възможност на потребителя да отбележи желани вътрешни рими в допълнение към крайните рими. Напр. сканираната настояща римна структура А Б А Б потребителят може да промени така: ВА ВБ А Б (желана вътрешна рима от неупотребявано досега римно гнездо в първи и втори ред) >>>NB<<< Как да определим къде точно в реда да бъдат вътрешните римувани двойки? Допълнителен атрибут "условие" със стойности "начало" (римата е в първата дума/първата една трета от реда), "среда" (в средната трета от реда), "край" (в крайната трета/самия край; по подразбиране?)? --Калин >>> Или: Потребителят маркира директно в творбата думи, които трябва да образуват римна двойка; при последвалите синонимни замени алгоритъмът се съобразява с относителното им място в реда и се стреми да го запази. 2.3.Г. Допълнителни условия на потребителя - примери: 1. Задължителни думи, фрази или отделни букви - по време на редакция трябва да бъдат съхранени. Определен низ (една или повече букви, дума или цяла фраза) могат да бъдат маркирани като: А. "неизменни" - по време на редакция запазват относителното си място в редактираната част (броят предхождащи букви, съответно - за дума или фраза - думи остава равен на първоначалния във всеки един междинен вариант). Б. "задължителни" - по време на редакция задължително присъстват във всеки междинен вариант, но могат да бъдат премествани от алгоритъма. За всяка задължителна буква или ЛЕ, потребителят маркира границите, в които тя може да бъде размествана (напр. няколко съседни реда или първите три думи от реда; областта по подразбиране е един отделен ред от творбата). Примери: П1. Потребителят joanna_vas маркира думата "нощ" като "задължителна" в рамките на ред 1 и на съседни редове 25 и 26, 29 и 30 в "Убийца нощ". -> В процеса на редакция думата "нощ" ще присъства три пъти във всеки междинен вариант, в границите на зададените редове. П2. Акростих: Потребителят маркира първите букви на всеки ред като "неизменни". -> В процеса на редакция самите начални думи може да се променят, но първите им букви се запазват. П3. Асонанс, алитерация: Потребителят вкарва "Гарванът грачи грозно, злокобно" и маркира всички "р", "ч" и "з" като "задължителни" -> По време на редакцията, алгоритъмът ще се придържа към ЛЕ, които съдържат маркираните звуци. 2. Пасажи, които се възприемат като самостоятелен блок за редактиране: По подразбиране всеки ред в творбата се редактира отделно и независимо от останалите (с изключение на римните замествания, при които се сравняват опр. брой срички от един ред с опр. брой срички от друг). Ако потребителят иска даден блок да се различава от графическия ред - напр. да се състои от ред и половина, цяла строфа или само няколко думи - в тази стъпка той маркира границите му. /*********************************************************/ 3. Същинска редакция 3.1. Накарай потребителя да въведе стойност iter за броя на междинните варианти, преди да бъдат представени оконч. резултати /* съответства на дълбочината на изгражданото search tree; препоръчвам ограничаване на входящата стойност между 1 и 10, или в зависимост от дължината на редактирания текст --К */, както и стойност res за максималния брой на представените окончателни резултати /* препоръчвам 2-5 --К */ >>>NB<<< Дълги текстове за редакция създават огромни search trees - ако дължината на даден текст е повече от Z /* 1000 --К */ знака, алг. препоръчва на потребителя разделянето му на няколко, независими една от друга части. ---> Или проблемът може да се елиминира, ако се помнят само промените, а не цялостните променени варианти? --К 3.2. Използвай коригираната в стъпка 1. версия на редактираната творба за корен на search tree. 3.3. Започни да правиш замени според правилата, описани в 3.4, в продължение на iter цикъла. По време на всеки цикъл прави само една замяна в цялата творба, съобразявайки се с блоковете (обикн. един ред, но виж 2.3.Г.2.) и желаната стъпкова и/или римна структура. Внимание: В рамките на един блок (например първия) се правят _всички_ възможни замени от 3.4. Всяка променена версия се записва /* цялостно или само като промяна от предишната? --К */ като ново листо в search tree. Накрая на всеки цикъл, дълбочината на search tree се увеличава с едно, до достигане на iter. 3.4. Правила за замени: 3.4.1. Преди всичко се съобразявай с всички ограничения, определени от потребителя в 2.3.Г. 3.4.2. Използвайки синонимни гнезда от лична база Б, замествай един синоним с друг, така че новият вариант на редактирания блок да има по-малко стъпкови различия от желания окончателен вариант, отколкото настоящият; и/или маркираните като римна двойка думи/фрази да започнат да се римуват след замяната (не винаги възможно; но веднъж римувани, те следва да не се заместват повече или да се заместват само когато новата ЛЕ принадлежи на същото римно гнездо). 3.4.2.А. Ако в замяната участват синоними от постоянно СГ, не е нужно да търсиш разрешение от потребителя. 3.4.2.Б. Ако в замяната участват синоними от контекстово СГ, поискай разрешение от потребителя - виж 0.7.2. 3.4.3. Използвай правилата от лична база Г, като за всяко промяна искай потвърждение от потребителя - виж Заб.0.9. 3.5. На края на iter-те цикъла, подреди всички междинни варианти от последното ниво на search tree според удачността им. (>>>NB<<< Трябва да се измисли оценяваща функция за удачност, която включва близост на междинния вариант с желания краен стъпков и/или римен вариант и спазване на условията, зададени в 2.3.Г.) 3.6. Представи първите res варианта на потребителя. 3.6.А. Ако потребителят е доволен от някой от тях, премини на 4. 3.6.Б. В противен случай накарай потребителя да си избере най-удачния междинен вариант и се върни на 3.1. /*********************************************************/ 4. Крайна фаза: Редактираната версия удовлетворява потребителя. 4.1. Дай възможност на потребителя да запише оконч. редакция във файл. /* или директно да я качи в Буквите =) --К */ 4.2. Ако потребителят е създал нови елементи в някоя от личните си бази по време на редакцията, попитай го дали желае да осъвремени съответните централни бази. При положителен отговор, действай според указанията в 0.5.3.7. /* край на същинския алгоритъм */ /*********************************************************/ 9. Разни 9.13. Пример за GIGO: Вход: Аз зелен прозорецът вървя Изход: Иха, тревен джамът крача ---> включва правило за изпускане на лични местоимения, правило за вмъкване на междуметия, 2 потвърдени от потребителя замени на контекстови синоними ("зелен" <-> "тревен", "прозорец" <-> "джам"); резултатът е перфектен хорей
… Стигнахте ли дотук? Изтекоха ли ви очите? Умът?
Е… отморете се. 😀