|
Форум
|
Manowar |
05.07.04, 13:46 |
|
Стоп слова - как их определить? |
|
Подскажите пожалуйста каким образом можно программно определить слова, распознаваемые RCO как стоп-слова? Сейчас я перед передачей строки поиска в запрос ручками вырезаю все слова с длиной < 4. Можно ли каким-то образом оптимизировать это и удалять из запроса действительно только стоп слова? |
|
|
Плешко Владимир |
05.07.04, 14:26 |
|
re: Стоп слова - как их определить? |
|
Укажите, пожалуйста, о каком продукте идет речь: RCO for Oracle или RCO for Backoffice. |
|
|
Manowar |
05.07.04, 14:29 |
|
re: re: Стоп слова - как их определить? |
|
>Укажите, пожалуйста, о каком продукте идет речь: RCO for Oracle или RCO for Backoffice. RCO for BackOffice. Поиск ведется по данным в SQL Server. |
|
|
Плешко Владимир |
05.07.04, 17:47 |
|
re: re: re: Стоп слова - как их определить? |
|
Сразу короткий ответ: готовыми средствами mssearch или mssql - нельзя.
Теперь длинный ответ:
В разделе документации "Редактирование списка стоп-слов" приведена информация по расположению и редактированию списка стоп-слов. Все слова запроса, входящие в этот список, mssearch молча уничтожает.
Более того, если в листе дерева запроса (предикат CONTAINS) оказались только стоп-слова, mssearch выдаст ошибку "A clause of the query contained only ignored words.". Напрашивается вариант, ловить ошибку на этапе отображения и выводить, что ничего не найдено. Так делают довольно часто.
Самый простой способ избежать этой ошибки - использовать предикат FREETEXT. Минусы - поиск всегда будет идти со связкой ИЛИ. Этот и следующий варианты - для ленивых.
Еще способ - очистить файл стоп-слов (noise.rus). Тогда стоп-слова не будут удаляться из запроса и из индекса. На небольших объмах (до 10 тыс документов) вы это не заметите. Работать будет, но это не очень спортивно.
Если подходить к проблеме основательно, то стоило бы написать com-объект или xp_... для mssql, который бы через реестр находил бы список стоп-слов для заданного языка, загружал бы его, разбирал бы запрос, реализуя язык запросов вида (+, -, "" как в поисковых машинах) или принимал бы доп. параметр (и, или, фраза), или принимал бы запрос на языке mssearch (oledb диалект, что используется в mssql), корректно бы его преобразовывал, удаляя ветви, состоящие целиком из стоп-слов, да еще бы выдавал в качестве побочного эффекта стоп-слова, удаленные из запроса, и тогда такому объекту цены бы не было, в смылсе благодарности от пользователей (http://www.sql.ru/forum/actualtopics.aspx?search=noise&submit=%CD%E0%E9%F2%E8&bid=1).
К слову, в Oracle так и сделано - ветки, состоящие целиком из стоп-слов, удаляются. Хотя и там нельзя получить информамию, какие слова были удалены из запроса.
Если ms в очередной версии своего поиска не решит эту проблему, поставим себе в план. |
|
|
|
|
|
| |