Александър Иванов
cream в режим „expert“
Конкорданс
Конкорданс е извадка от текста, обхващаща дума или израз заедно с определен ляв и десен контекст. Ето пример:
*cream В РЕЖИМ "ЕКСПЕРТ"* *РЕЖИМ "ЕКСПЕРТ"* И ЗАМЕСТВАНЕ В РЕЖИМ "ЕКСПЕРТ"* върху vim, като режимът "Експерт" дава достъп до възможностите *РЕЖИМ "ЕКСПЕРТ"* да преминете в режим "експерт", трябва да натиснете Esc.
Тук е представено началото на конкорданс, в който е изведен изразът „експерт“ от моя текст (навярно след това съм го редактирал — това е само пример!) с ляв и десен контекст от четири думи. Където контекстът е по-кратък, той е „отрязан“ от началото или края на абзаца.
Филолозите обичат конкорданси — те им напомнят чекмеджетата с фишове „ексцерпиран материал“ и им носят удовлетворяващото усещане за много свършена работа. Освен това от конкордансите те си вадят примери и правят впечатляващи приложения. Затова информатиците пишат програми за конкорданси от десетилетия.
Тук просто няма как да не се сетя, че SIL (Summer Institute of Linguistics) разпространяваше програмен пакет с име The Linguist's Shoebox — помните ли кутиите от обувки, в които си събирахме фишовете? (Програмата вече не се поддържа.)
Ако обаче се позамислим, лесно ще видим безсмислието на подобна извадка от текста.
Първо, с най обикновено търсене из текста можем да видим същата информация. Ако си поиграете с регулярните изрази, може да получите и оцветяване на контекста, например така:
/\([^ ]\+\_s\{,1}\)\{,5}експерт\(\_s\{,1}[^ ]\+\)\{,5}
(Това сигурно може да се измисли и по-умно… Опитайте!)
Второ, като направите конкорданс, губите количествената информация за явлението — от конкорданса единствено може да научите колко пъти в текста се е срещнал изразът (в примера — „експерт“). Но това може да научите и със заместване чрез флага n. А тази сума, дори да я представите в проценти (например спрямо всички лекси в текста), не дава достатъчно информация за математикостатистическото разпределение на явлението.
Както и да е.
За най-простия начин да направим конкорданс аз споменах в раздела Командата g (global):
— Изчистете някой регистър, например x (qxq).
— Съберете в него всички редове (абзаци), в които се среща „експерт“:
:g/\<експерт\>/ y X
— Създайте нов текстов буфер (:new) и препишете в него съдържанието на регистър x ("xp).
— Запишете го като нов файл.
Недостатъкът на този подход е, че контекстът е доста голям — обхваща целия абзац. Ако търсите някаква по-съществена глотометрична характеристика, например търсите съюзи или предлози, или представки/наставки, вероятно ще препишете просто целия текст…
Вторият подход е да търсим шаблон с определен контекст, като този, който вече посочих. Тук обаче има техническа трудност — командата global обработва цели редове (абзаци), а ние искаме да съхраняваме само маркирания текст. Затова ще трябва да използваме функцията CopyMatches, за която стана дума в раздела Макроезик. Заредете функцията от файла CopyMatches.vim:
:so CopyMatches.vim
Изградете си правилно шаблон за търсене (функцията работи с последния шаблон за търсене, тоест взема го от регистъра "/) и когато сте доволни от търсенето, стартирайте функцията:
:CopyMatches
Сега отворете нов буфер и копирайте в него резултата ("+p). Функцията CopyMatches „събира“ резултата в регистъра "+, тоест, той е достъпен и от всяка друга програма.
Остава малко да подредите редовете и ето че имате прекрасно приложение към вашия труд:
*cream В РЕЖИМ "ЕКСПЕРТ"* *РЕЖИМ "ЕКСПЕРТ"* И ЗАМЕСТВАНЕ В РЕЖИМ "ЕКСПЕРТ"* върху vim, като режимът "Експерт" дава достъп до възможностите *РЕЖИМ "ЕКСПЕРТ"* да преминете в режим "експерт", трябва да натиснете Esc. В режим "експерт" вие придобивате достъп до С преминаването към режим "експерт", вие влизате в т. Когато минавате към режим "експерт" убедете се, че сте Кирилските букви в режим "експерт" или нищо не правят, малки букви в режим "експерт" е значеща. cream многократно. В режима "експерт" клавиша v в режим "експерт", курсорът се променя така, си го в режима "експерт" чрез Ctrl+v. Разбира се, в режима "експерт" има още повече възможности: В режим "експерт" има лесен начин да vim (тоест, в режим "експерт") може да изпълните всяка И ЗАМЕСТВАНЕ В РЕЖИМ "ЕКСПЕРТ"* две действия в режима "експерт" са несравнимо по-големи.
и т. н. Оцветете търсеното и го отпечатайте цветно, за да е по-впечатляващо.
Подреждането е малко досадна работа. То сигурно също може да се автоматизира в cream, но не се досещам как да стане, а и не ми се занимава с това. Ако някой знае или има идеи, да пише. А аз само ще подскажа — във всеки програмен език тази работа е пипкава и досадна, но елементарна.
Понякога информатиците определят контекста не в брой думи, а в брой знакове. Шаблонът в такъв случай е по-прост, например:
/.\{,30}експерт.\{,30}
Контекстът е от 30 символа вляво и вдясно (ако ги има в абзаца). По подобен начин е решен и въпросът с контекста в NLTK.
Накрая искам да добавя, че когато през 60-те години е правен фреквентният речник и глотометричният архив в Софийския университет, студентите са фиширали думите с още две думи ляв контекст и с две думи десен контекст. Янакиев е установил, че това е достатъчно за сваляне на омографията и е минимизирал работата на студентите си.