Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Oleg I. Khovayko                     2:5020/400     22 May 2001  19:41:07
 To : All
 Subject : Re: Поиск набора слов в тексте с помощью конечных автоматов
 -------------------------------------------------------------------------------- 
 
 
 Посмотрел я в исходник.
 Глюкоген ваш программописатель!
 
 Hачнем вот с чего:
 
 1.
   L : Byte;
   . . . 
   TranWord[i].L := Length( TranWord[i].S );
 
 Как видно из приведенного выше примера, если длина слова более 255 символов,
 все благополучно становится колом.
 
 2.
      BegChar                    = 'a';
      FinChar                    = 'z';
      . . . 
      Edge : array[BegChar..FinChar] of PNode;
      . . .     
     C := S[1];
     if Root^.Edge[C] = .......
 
 Hетрудно видеть, что если слово содержит какой-либо символ
 не из интервала "a..z" (например, "А" или цифра какая-нибудь),
 программа благополучно крашится из-за нарушения границ массивов.
 
 Ладно, надоело глюки искать! Может, там еще чего есть - лениво
 смотреть...
 
 Итак, что видно из исходника:
 Да, это действительно КА, представляющий собой закольцованое TRIE.
 Строится динамически, т.е. в соответствии с гипотезой  3 из моего 
 пред. письма. Единственная странность - это поярусное построение дерева
 (я бы строил методом вставки в дерево).
 
 Такая конструкция, как и все, базирующееся на TRIE, обладает 
 существенным недостатком - оно сильно жрет память, если есть
 длинные строки, различающиеся в самом начале, типа:
 3-methil-phentanil
 3,4-methil-phentanil
 При этом на каждый символ строки в памяти отьедается структура типа 
 TNode, которая кроме всего прочего, содержит массив указателей.
 Лечится эта проблема переходом на дерево с переменной связностью.
 
 > 
 > Что вы имеете в виду под "по набору слов статически ручками"?
 
 Если набор ключевых слов известен заранее, то КА можно сделать
 статическим, и прилинковать к программе. То есть не создавать
 дерево поиска каждый раз при старте программы, а иметь в теле программы 
 готовое. LEX, кстати, строит именно статический KA для заранее 
 заданного набора ключевых слов.
 
 > Это как? Меня как раз и интересует алгоритм построения автомата
 > по набору слов (а не по одному слову).
 
 Методом вставки в дерево. Процедура InPut из твоего примера.
 
 > 
 > > 2. Воспользоваться программой LEX, которая тебе по набору слов
 > > построит автомат и интерпретатор.
 > 
 > К сожалению, не знаю, о чем идет речь. Вы не могли бы конкретизировать,
 > что это за программа?
 
 Могу. LEX - это стандартный "генератор лексических анализаторов"
 из ОС UNIX.
 Есть сайт на русском языке на эту тему:
 http://yacc.chat.ru/
 
 > 
 > Вот эталонное (суддейское) решение, любезно предоставленное
 > мне после окончания олимпиады:
 
 Hеплохо, но с моей точки зрения, как-то кривовато.
 Целая куча лишних указателей "Fail" и еще какой-то байды.
 Я правда, сильно не разбирался - может, оно действительно
 зачем-то нужно, но я как-то всегда обходился без них,
 когда писал подобные вещи.
 Hапример, сканер операторов для TurboBasic-a для УК-HЦ...
 
 -- 
 #include <best/regards.hpp>
 Oleg I. KHOVAYKO  
 (301)435-5885 || WEB: http://olegh.spedia.net
 --- ifmail v.2.15dev5
  * Origin: National Center for Biotechnology Information (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Поиск набора слов в тексте с помощью конечных автоматов   Ihor Bobak   21 May 2001 20:41:20 
 Re: Поиск набора слов в тексте с помощью конечных автоматов   Oleg I. Khovayko   21 May 2001 22:04:23 
 Re: оHХЯЙ МЮАHПЮ ЯКHБ Б РЕЙЯРЕ Я ОHЛHЫЭЧ ЙHМЕВМШУ ЮБРHЛЮРHБ   Borodin Anatoly   21 May 2001 23:27:10 
 Re: Поиск набора слов в тексте с помощью конечных автоматов   Ihor Bobak   22 May 2001 11:37:58 
 Re: Поиск набора слов в тексте с помощью конечных автоматов   Oleg I. Khovayko   22 May 2001 19:41:07 
 Re: оHХЯЙ МЮАHПЮ ЯКHБ Б РЕЙЯРЕ Я ОHЛHЫЭЧ ЙHМЕВМШУ ЮБРHЛЮРHБ   Borodin Anatoly   22 May 2001 20:19:48 
 Поиск набора слов в тексте с помощью конечных автоматов   Aleksey V. Vaneev   22 May 2001 19:48:44 
Архивное /ru.algorithms/115223e4b8259.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional