Программирование >>  Oracle 

1 ... 281 282 283 [ 284 ] 285 286 287 ... 469


interMedia 1265

interMedia Text 1

learning 1

TOKEN TEXT TOKEN TYPE

powerfulness 1

simplicity 1

Выполняя запрос к таблице DR$I, соответствующей индексу MYTEXT IDX, мы можем оценить, какая часть информации обработана компонентом interMedia Text при синхронизации индекса.

Во-перв1х, обратите внимание, что многие значения в столбце TOKEN TEXT целиком состоят из прописных букв. Это реальные слова из текста, переведенные в верхний регистр. При необходимости можно потребовать от компонента interMedia Text создавать индекс по словам с учетом регистра при выполнении оператора CREATE INDEX.

Обратите также внимание, что некоторые лексемы, для которых в столбце TOKEN TYPE находится значение 1, хранятся в смешанном регистре. Что еще важнее, ни в одной из строк таблицы MYTEXT нет слов simplicity и learning . Так откуда же взялись эти данные? При разбиении лексическим анализатором блока текста на английском языке на лексемы стандартным действием является добавление в индекс информации о тематике текста. Таким образом, каждая строка со значением TOKEN TYPE=1 - это тема, сгенерированная компонентом interMedia Text в процессе лингвистического анализа.

Наконец, нельзя не заметить отсутствия некоторых слов в этой таблице. Слова is и to не значатся среди лексем в таблице индекса, хотя и входили в исходные данные проиндексированной таблицы. Они являются стоп-словами (stopwords) и не включаются в индекс как лишняя информация. Эти слова часто многократно встречаются в большинстве текстов на английском и по сути являются шумом . Слова is, to и около 120 других входят в стандартный список стоп-слов (stoplist) для английского языка, который и используется по умолчанию при создании индекса. Корпорация Oracle включила в состав компонента interMedia Text стандартные списки стоп-слов более чем для 40 языков. Помните, что список стоп-слов использовать не обязательно, можно создавать и использовать собственные специализированные списки.

Хочу завершить этот раздел предупреждением. Хотя весьма интересно разобраться, как именно устроен компонент interMedia Text, особенно посмотреть, какие лексемы генерируются при создании индекса, не пгтайтесь создавать другие объекты базы данных, использующие внутренние структуры индекса. В частности, не создавайте представления для таблицы DR$MYTEXT IDX$I или триггеры по таблице DR$MYTEXT IDX$K. Структура реализации может измениться и скорее всего изменится уже в следующих версиях компонента.

Оператор ABOUT

С появлением оператора ABOUT в Oracle стало намного проще выполнять тематический анализ в запросах, да и точность результатов, выдаваемых по таким запросам, существенно увеличилась. Для текстов на английском языке оператор ABOUT обеспе-



1266

Глава 17

чивает поиск всех строк, соответствующих нормализованному представлению искомого понятия. Как я уже говорил, по умолчанию для текстов на английском языке информация о тематике включается в индекс. Эта информация о тематике текста в индексе будет использоваться для поиска других строк, в которых затрагиваются близкие понятия. Если почему-либо бтло решено не генерировать информацию о тематике текста при создании индекса, оператор ABOUT будет выполнять простой поиск соответствующих лексем.

JQL> select id fm mytext where contains(thetext, about(databases)) > 0; no rows selected

Как и ожидалось, в таблице нет строк, посвященных понятию databases . Ql> select id from mytext where contains(thetext,about(simply)) > 0; ID

Есть одна строка, связанная с понятием просто (simply). Если точнее, есть одна строка, содержащая понятия-синонимы нормализованной версии слова simply. Чтобы показать это, выполним:

SQL> select id from mytext where contains(thetext,simply ) > 0;

no rows selected

При удалении оператора ABOUT из запроса ни одна строка не возвращается - в столбец thetext не входит слово simply. Имеется, однако, одна строка, в которой используемые понятия соответствуют нормализованному корню слова simply.

Связанное со словом понятие - не то же самое, что лингвистический корень слова. Оператор получения основы (stem operator - $) компонента interMedia Text позволяет искать инфлекционные (inflectional) или производные формы слова. Таким образом, поиск по основе слова health может дать в результате документы, содержащие слово healthy. Поиск синонимов понятия health (здоровье) с помощью оператора ABOUT может также вернуть документы, содержащие слово wellness.

Оператор ABOUT очень легко включить в приложения для использования всей мощи средств генерации тематической информации и лингвистического анализа. Оператор ABOUT позволяет обеспечить в приложении не только поиск введенных пользователем слов, но и поиск связанных с ними понятий. Это действительно мощное средство.

Поиск в разделах

Последняя тема, которую я хочу подробно рассмотреть, - поиск в разделах. Раздела: обеспечивают избирательный доступ запроса к документу и могут существенно повысить точность запросов. Раздел может представлять собой не что иное, как заданную разработчиком последовательность символов, отмечающую начало и конец логической единицы в документе. Популярность стандартных языков разметки, таких как HTML и XML, позволяет продемонстрировать всю мощь средств поиска в разделах, предлагаемых компонентом interMedia Text.



interMedia 1267

Типичный документ содержит общеупотребительные логические элементы, образующие его структуру. У большинства документов есть название, может быть заголовок, может быть шаблонная информация, основной текст, содержание, предметный указатель, приложения и т.д. Все это - логические единицы, образующие структуру документа.

В качестве примера ситуации, когда необходим поиск в разделах документов, рассмотрим гипотетическое хранилище документов для Министерства обороны. Может понадобиться найти в хранилище документы, содержащие фразу Ракета Hellfire . Но может быть еще важнее найти документы, содержащие фразу Ракета Hellfire в заголовке документа или, например, в предметном указателе. Компонент interMedia Text позволяет разработчику приложения задать последовательность символов, выделяющую эти логические разделы структуры документа. Кроме того, компонент interMedia Text поддерживает поиск текста в заданных таким образом логических разделах.

В компоненте interMedia Text для задания логических единиц или группировки текста в документе используется понятие разделы . Набор идентификаторов разделов образует группу разделов, и именно группу разделов можно указать при создании индекса interMedia Text.

Язык разметки гипертекста (Hypertext Markup Language - HTML) тоже первоначально создавался как способ организации структуры документа, но быстро стал языком, частично описывающим структуру, а частично - внешний вид документа. Тем не менее в состав interMedia Text стандартно входят компоненты, позволяющие создать раздел логической структуры документа из каждого тега разметки, содержащегося в документе.

Аналогично, поддержка языка XML тоже встроена в компонент interMedia Text, начиная с версии Oracle 8.1.6. Для XML-документа можно легко (при желании - автоматически) задать разделы, соответствующие каждому заданному в нем XML-элементу.

Давайте сначала рассмотрим следующий пример документа на языке HTML:

SQL> create table my html docs

2 (id number primary key,

3 html text varchar2(4000) )

Table created.

SQL> insert into my html docs(id, html text)

2 values(1,

3 <html>

4 <titleX>racle Technology</title>

5 <body>This is about the wonderful marvels of 8i and 9i</body>

6 </html>)

1 row created. SQL> commit; Commit complete.

SQL> create index my html idx on my html docs(html text) 2 indextype is ctxsys.context



1 ... 281 282 283 [ 284 ] 285 286 287 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика