Текущее время: Вс, июн 29 2025, 23:17

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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