| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Поиск совпадений в тексте со списком записей |
| Автор: Akella 21.5.2009, 13:18 |
| Есть таблица в базе. Там, примерно, сотня записей. Может быть и больше, значительно больше. Таблица районов города, чтобы имели представление. Есть текстовое объявление типа "куплю дом ил квартиру" и т.д. Нужно определить в тексте объявления район города. Пытался строить регулярные выражения по списку районов: (район1|район2|район3|районN) но регулярка получается на столько огромной, что парсер просто не справляется и программа виснет. Какие могут быть оптимальные обходные пути? |
| Автор: Alexeis 21.5.2009, 13:35 |
| Akella, попробуй отсортировать районы в алфавитном порядке и искать совпадения бинарным поиском в отсортированном массиве. Или же добавить их в THashedStringList. Сам текст разбить на слова и искать слова в THashedStringList при помощи IndexOf(). |
| Автор: Akella 21.5.2009, 13:37 |
| Разбивать на слова не получится. Как разбивать на слова? Ведь есть районы из двух слов. П.Поле или П. Поле. |
| Автор: Akella 21.5.2009, 14:04 |
| Ну допустим, что разделитель можно использовать только пробел. А как правильно работать с тем, что искомое выражение может быть из двух слов: пр. Ленина, пр.Ленина, П.Поле, Хол. Гора, Х Гора и т.д. С пробелами и без. Если нет пробела, то пр.Ленина, П.Поле сразу можно определить... а такие: Хол. Гора или Х Гора ?? |
| Автор: Akella 21.5.2009, 14:23 |
| Блин, регулярки работают даже с большим списком. Я поспешил создать тему. Я не заметил, что динамически построенное регулярку оказалось два подряд символа ||, а это очень резко снижает производительность и увеличивает количество совпадений. |
| Автор: Frees 21.5.2009, 14:24 |
| а если разбить на слова по рпзделителям ' .,;!?' и искать последовательность слов, искомую фразу сперва тоже разбить на слова и искать эту последовательность слов IndexOf от первого слова искомой строки потом IndexOf + 1 и сравнить со 2 словом из искомой строки и так перебрать все слова в искомой строке Добавлено через 1 минуту и 10 секунд Регулярки всетаки рулят)) |
| Автор: Akella 21.5.2009, 16:40 |
| http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%90%D1%85%D0%BE_%E2%80%94_%D0%9A%D0%BE%D1%80%D0%B0%D1%81%D0%B8%D0%BA Добавлено через 1 минуту и 31 секунду Дело ещё в том, что регулярку можно хранить в файле. И для каждого пользователя использовать можно свою регуляргу. |