OberonCore https://forum.oberoncore.ru/ |
|
Проблема с поисковом алгоритмом https://forum.oberoncore.ru/viewtopic.php?f=131&t=3969 |
Страница 1 из 1 |
Автор: | Иван Денисов [ Воскресенье, 20 Май, 2012 14:04 ] |
Заголовок сообщения: | Проблема с поисковом алгоритмом |
Обнаружил проблему в bb1.6rc6, при поиске по русскому тексту не работают опции "с начала слова" "с конца слова" в поисковой форме не подскажите как полечить, может кто-то с этим разбирался? При поиске по английскому тексту английских запросов все хорошо работает. |
Автор: | Евгений Темиргалеев [ Воскресенье, 20 Май, 2012 14:25 ] |
Заголовок сообщения: | Re: Проблема с поисковом алгоритмом |
Может быть тут. Попробуйте добавить 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 ] |
Заголовок сообщения: | Re: Проблема с поисковом алгоритмом |
Спасибо! Получилось! Добавил фикс в Красноярскую сборку, и привожу тут. Код: 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 ] |
Заголовок сообщения: | Re: Проблема с поисковом алгоритмом |
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 ] |
Заголовок сообщения: | Re: Проблема с поисковом алгоритмом |
Спасибо, исправил. |
Автор: | Иван Денисов [ Четверг, 25 Июль, 2013 18:16 ] |
Заголовок сообщения: | Re: Проблема с поисковом алгоритмом |
Вот такой код не привязан к языку. Так сейчас сделано в Красноярской сборке. Работает со всякими умляутными буквами также хорошо, как и с русскими. Код: 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; |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |