![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Есть таблица в базе. Там, примерно, сотня записей. Может быть и больше, значительно больше. Таблица районов города, чтобы имели представление.
Есть текстовое объявление типа "куплю дом ил квартиру" и т.д. Нужно определить в тексте объявления район города. Пытался строить регулярные выражения по списку районов: (район1|район2|район3|районN) но регулярка получается на столько огромной, что парсер просто не справляется и программа виснет. Какие могут быть оптимальные обходные пути? Это сообщение отредактировал(а) Akella - 21.5.2009, 13:19 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Akella, попробуй отсортировать районы в алфавитном порядке и искать совпадения бинарным поиском в отсортированном массиве. Или же добавить их в THashedStringList. Сам текст разбить на слова и искать слова в THashedStringList при помощи IndexOf().
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Разбивать на слова не получится. Как разбивать на слова? Ведь есть районы из двух слов. П.Поле или П. Поле.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Ищи и так и так. Если есть из 3х то проверяй и сочетания из 3х слов. Регулярки это общее решение, грамотно построенное частное решение всегда быстрее общего. Разделители слова могут быть . : ; , ! ? пробел табуляция. Их на самом деле не так много. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Ну допустим, что разделитель можно использовать только пробел. А как правильно работать с тем, что искомое выражение может быть из двух слов: пр. Ленина, пр.Ленина, П.Поле, Хол. Гора, Х Гора и т.д. С пробелами и без.
Если нет пробела, то пр.Ленина, П.Поле сразу можно определить... а такие: Хол. Гора или Х Гора ?? |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Блин, регулярки работают даже с большим списком. Я поспешил создать тему. Я не заметил, что динамически построенное регулярку оказалось два подряд символа ||, а это очень резко снижает производительность и увеличивает количество совпадений.
|
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
а если
разбить на слова по рпзделителям ' .,;!?' и искать последовательность слов, искомую фразу сперва тоже разбить на слова и искать эту последовательность слов IndexOf от первого слова искомой строки потом IndexOf + 1 и сравнить со 2 словом из искомой строки и так перебрать все слова в искомой строке Добавлено через 1 минуту и 10 секунд Регулярки всетаки рулят)) -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Ахо — Корасик
Добавлено через 1 минуту и 31 секунду Дело ещё в том, что регулярку можно хранить в файле. И для каждого пользователя использовать можно свою регуляргу. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |