Текущее время: Пн, июн 30 2025, 20:07

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Поиск по тексту
СообщениеДобавлено: Вс, окт 19 2014, 18:08 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, окт 22 2009, 12:41
Сообщения: 473
Коллеги, возникла довольно срочная задача: реализовать поиск по текстам (как пример - тексты для ОЗМ), которые храняться в STXH, STXL.
Сложность в том, что поиск должен быть нечетким - т.е. находить не точное соответвие к тому, что ввел пользователь, в выдавать максимально похожие варианты.
Кто-нибудь может что-нибудь посоветовать? Может быть даже можно использовать что-нибудь стандартное?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск по тексту
СообщениеДобавлено: Вс, окт 19 2014, 18:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
возможно есть какие-нибудь bi экстракторы, которые сливают всё в отдельное хранилище,
и там уже производится поиск

либо можно выгружать все тексты в открытую всем древовидную структуру на бесплатной страничке *.narod.ru,
и натравить на неё через мета тэги паука google

и ещё вариант, это написать самому, но это вероятно самый медленный способ, т.к.
оператор distance есть только в относительно новой версии sap_aba, а нативные функции бд
как utl_match.edit_distance_similarity не всегда проходят qa


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск по тексту
СообщениеДобавлено: Вс, окт 19 2014, 19:07 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
weise
Как мне кажется - родного инструмента нет.
Надо куда-то сливать данные.
А далее зависит от системы. Так-то у сап есть TREX, но т.к. я сам не пользовался - не могу сказать, что у них там с нечетким поиском
А вот в 7.4 на хане уже есть встроенная возможность в средстве поиска использовать нечеткий поиск. Наверное можно в этой версии и для своих алгоритмов вытащить механизм

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск по тексту
СообщениеДобавлено: Пн, окт 20 2014, 09:16 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
This engine is responsible for standard search functions such as the exact, error-tolerant, linguistic, Boolean, and phrase searches.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск по тексту
СообщениеДобавлено: Ср, ноя 12 2014, 15:27 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Сб, апр 07 2012, 00:43
Сообщения: 113
weise написал(а):
Коллеги, возникла довольно срочная задача: реализовать поиск по текстам (как пример - тексты для ОЗМ), которые храняться в STXH, STXL.
Сложность в том, что поиск должен быть нечетким - т.е. находить не точное соответвие к тому, что ввел пользователь, в выдавать максимально похожие варианты.
Кто-нибудь может что-нибудь посоветовать? Может быть даже можно использовать что-нибудь стандартное?


Сначала собрать все в таблицу со стрингами, а потом искать REGEX.
Нашел сложил в таблицу поиска, удалил
и снова пока ничего не найдено.

lv_regex = '<P_1>([^<]*)</P_1>'.
FIND REGEX lv_regex IN lv_str SUBMATCHES lv_result.

Например ищет любую строку между тегами <P_1> в стринге lv_str,
и возвращает найденое в lv_result

_________________
[Удалено Админом]


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск по тексту
СообщениеДобавлено: Ср, ноя 12 2014, 18:17 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
Делали похожую задачу, в плане поиска по текстам.

Похожесть строк можно определять через Расстояние Левенштейна (https://ru.wikipedia.org/wiki/Расстояние_Левенштейна).
Задается процент соответствия и образец.

В новом абапе даже есть встроенная функция distance для вычисления этих значений.
http://help.sap.com/abapdocu_731/en/abe ... ctions.htm

Нашел также готовую реализацию на ABAP
http://abap.kz/blog/74/user/inikolax

Пример использования данной функции из документации
Code:
REPORT demo_string_distance.

PARAMETERS: word     TYPE c LENGTH 30 DEFAULT 'CALL METHOD' OBLIGATORY,
             percent  TYPE i DEFAULT 50 OBLIGATORY.

CLASS demo DEFINITION.
   PUBLIC SECTION.
     CLASS-METHODS main.
ENDCLASS.

CLASS demo IMPLEMENTATION.
   METHOD main.
     DATA: index_tab TYPE REF TO cl_abap_docu=>man_index_tab,
           langu     TYPE sy-langu,
           dist      TYPE i,
           max       TYPE i,
           str1      TYPE string,
           str2      TYPE string,
           BEGIN OF result,
             dist TYPE i,
             text TYPE string,
           END OF result,
           result_tab LIKE SORTED TABLE OF result
                      WITH NON-UNIQUE KEY dist,
           output TYPE string.
     FIELD-SYMBOLS: <index_tab> TYPE         cl_abap_docu=>man_index_tab,
                    <index>     TYPE LINE OF cl_abap_docu=>man_index_tab.
     IF sy-langu <> 'D'.
       langu = 'E'.
     ELSE.
       langu = 'D'.
     ENDIF.
     index_tab = cl_abap_docu=>get_abap_index( langu ).
     ASSIGN index_tab->* TO <index_tab>.
     LOOP AT <index_tab> ASSIGNING <index>.
       str1 = to_upper( val = <index>-key1 ).
       str2 = to_upper( val = word ).
       IF strlen( str1 ) > strlen( str2 ).
         max = strlen( str1 ).
       ELSE.
         max = strlen( str2 ).
       ENDIF.
       max = ( 100 - percent  ) * max / 100 + 1.
       dist = distance( val1 = str1 val2 = str2 max = max ).
       IF dist < max.
         result-dist = dist.
         result-text = str1.
         INSERT result INTO TABLE result_tab.
       ENDIF.
     ENDLOOP.
     LOOP AT result_tab INTO result.
       output = |{ result-text WIDTH = 40 }({ result-dist })|.
       WRITE: /  output.
     ENDLOOP.
   ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
   demo=>main( ).

AT SELECTION-SCREEN ON percent.
   IF percent NOT BETWEEN 0 AND 100.
     MESSAGE 'Enter a value between 0 and 100' TYPE 'E'.
   ENDIF.

_________________
Поздравляю тебя, Шарик, ты - балбес!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск по тексту
СообщениеДобавлено: Ср, ноя 12 2014, 19:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1257
8051core и Endrews: я вот чисто для себя поинтересоваться хочу: а на работе ТЗ вы тоже по диагонали читаете? Проблема не в том как сравнить две строки. Проблема в том, что по начальным условиям данные лежат
1) в субд
2) в таблице STXL
Т.е. даже просто вытащить их на аппсервер - уже проблема.

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск по тексту
СообщениеДобавлено: Чт, ноя 13 2014, 10:51 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
Кодер А тут в принципе нет полного описания задачи.
Возможно первоначально можно отфильтровать ОЗМ по каким-то другим критериям, выполнять в первом приближении поиск по краткому тексту, группе и т.д. А дальше уже лезть в таблицу STXL. Предложенное выше один из вариантов решения, я согласен с тем, что он не самый удачный с точки зрения производительности и нагрузки на сервер. Но учетом срочности задачи он может оказаться самым быстрым для реализации. Так то конечно скорее всего TREX подойдет для этой цели, но тут появляется много вопросов: стоит ли у заказчика TREX сейчас, согласится ли он его вообще поставить ради поиска в 1-2 транзакциях.

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

_________________
Поздравляю тебя, Шарик, ты - балбес!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB