OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 17 Июнь, 2019 06:40

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Проблема с поисковом алгоритмом
СообщениеДобавлено: Воскресенье, 20 Май, 2012 14:04 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2336
Обнаружил проблему в bb1.6rc6, при поиске по русскому тексту не работают опции "с начала слова" "с конца слова" в поисковой форме :( не подскажите как полечить, может кто-то с этим разбирался? При поиске по английскому тексту английских запросов все хорошо работает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 20 Май, 2012 14:25 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
Может быть тут. Попробуйте добавить ELSIF RusLetter(ch) THEN RETURN FALSE.
Код:
   PROCEDURE LeftTerminator (ch: CHAR): BOOLEAN;
   BEGIN
      IF ch < 100X THEN
         CASE ch OF
            viewcode, tab, line, para, " ",
            "(", "[", "{", "=",
            hyphen, softhyphen: RETURN TRUE
         ELSE RETURN FALSE
         END
      ELSE RETURN TRUE
      END
   END LeftTerminator;

   PROCEDURE RightTerminator (ch: CHAR): BOOLEAN;
   BEGIN
      IF ch < 100X THEN
         CASE ch OF
            0X, viewcode, tab, line, para, " ",
            "!", "(", ")", ",", ".", ":", ";", "?", "[", "]", "{", "}",
            hyphen, softhyphen: RETURN TRUE
         ELSE RETURN FALSE
         END
      ELSE RETURN TRUE
      END
   END RightTerminator;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 20 Май, 2012 15:20 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2336
Спасибо! Получилось! Добавил фикс в Красноярскую сборку, и привожу тут.
Код:
PROCEDURE RusLetter(ch: CHAR): BOOLEAN;
BEGIN
   IF ((ORD(ch) >= 1040) & (ORD(ch) <= 1103)) OR (ORD(ch) = 1105) OR (ORD(ch) = 1117) THEN
      RETURN TRUE
   ELSE
      RETURN FALSE
   END
END RusLetter;

PROCEDURE LeftTerminator (ch: CHAR): BOOLEAN;
BEGIN
   IF ch < 100X THEN
      CASE ch OF
         viewcode, tab, line, para, " ",
         "(", "[", "{", "=",
         hyphen, softhyphen: RETURN TRUE
      ELSE RETURN FALSE
      END
   ELSIF RusLetter(ch) THEN RETURN FALSE
   ELSE RETURN TRUE
   END
END LeftTerminator;

PROCEDURE RightTerminator (ch: CHAR): BOOLEAN;
BEGIN
   IF ch < 100X THEN
      CASE ch OF
         0X, viewcode, tab, line, para, " ",
         "!", "(", ")", ",", ".", ":", ";", "?", "[", "]", "{", "}",
         hyphen, softhyphen: RETURN TRUE
      ELSE RETURN FALSE         
      END
   ELSIF RusLetter(ch) THEN RETURN FALSE
   ELSE RETURN TRUE
   END
END RightTerminator;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 20 Май, 2012 16:40 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
x, y IN {0, 1}. IF x = 1 THEN y := 1 ELSE y := 0 END <=> y := x
Код:
   PROCEDURE CyrLetter* (ch: CHAR): BOOLEAN;
   BEGIN
      RETURN (ch = 0401X) OR (ch = 0451X)   (* Ё | ё *)
         OR (0410X <= ch) & (ch <= 042FX)   (* А..Я *)
         OR (0430X <= ch) & (ch <= 044FX)   (* а..я *)
   END CyrLetter;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 20 Май, 2012 21:39 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2336
Спасибо, исправил.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Июль, 2013 18:16 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2336
Вот такой код не привязан к языку. Так сейчас сделано в Красноярской сборке. Работает со всякими умляутными буквами также хорошо, как и с русскими.
Код:
   PROCEDURE LeftTerminator (ch: CHAR): BOOLEAN;
   BEGIN
      CASE ch OF
         viewcode, tab, line, para, " ",
         "(", "[", "{", "=",
         hyphen, softhyphen: RETURN TRUE
      ELSE
         RETURN FALSE
      END
   END LeftTerminator;

   PROCEDURE RightTerminator (ch: CHAR): BOOLEAN;
   BEGIN
      CASE ch OF
         0X, viewcode, tab, line, para, " ",
         "!", "(", ")", ",", ".", ":", ";", "?", "[", "]", "{", "}",
         hyphen, softhyphen: RETURN TRUE
      ELSE
         RETURN FALSE         
      END
   END RightTerminator;


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

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


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

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


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

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB