Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поиск похожих строк / 25 сообщений из 27, страница 1 из 2
03.03.2006, 12:06
    #33579530
Петров Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Думал, что это FAQ, но мало чего нашел.

Кто как делает - поделитесь.

Есть задача - найти в таблице строку похожую на заданную (она из другой
таблицы берется)
Окончательное решение о похожести принимает пользователь, но ввсе-таки
хотелось бы максимально облегчить ему задачу:
- вывести список имеющихся похожих строк
- указать ту, которая более всего похожа
- позволить, все же выбрать из расширяющегося множества (все менее и менее
похожих) вплоть до всех.

Пока ничего не придумал, кроме вычленения и проверки на совпадение
нескольких подстрок из начала и из конца, но результат не устраивает - много
мусора и "наиболее похожий вариант" указать невозможно.

Подкинте идею, пожалуйста.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.03.2006, 12:31
    #33579641
mir
mir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
...
Рейтинг: 0 / 0
03.03.2006, 13:24
    #33579863
Петров Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Спасибо, пойду - застрелюсь :-)


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.03.2006, 14:11
    #33580105
Shoora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
А че, думал все так просто? Запросик с лайком написал и вот тебе строчки на любос языке, отсортированные по релевантнисть? :))
...
Рейтинг: 0 / 0
03.03.2006, 14:23
    #33580178
Петров Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Не, я не думал, что все так просто.
Но я и не думал, что кусок из ядра Яндекса придется вставлять в программку,
которая улицы с КЛАДР'ом сверяет. :-o


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.03.2006, 15:17
    #33580427
Shoora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Ну с яндексом это ты переборщил, но если требуется адекватный нечеткий полнотекстовый поиск, то без морфологического анализа не обойтись.
...
Рейтинг: 0 / 0
03.03.2006, 15:23
    #33580460
Shoora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Хотя стоп. КЛАДР, говоришь? Так там небось все в одном падеже и порядок слов соблюдается, тогда можно попробовать замутить без морфомодуля, только по лайку долго будет работать. Индексатор простенький можно написать, а дальше дело техники.
...
Рейтинг: 0 / 0
03.03.2006, 15:37
    #33580520
Петров Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Что значит адекватный?
Собственно это, на самом деле, в некотором роде система поддержки принятия
решений с задачей оценки релевантности строк.
Морфология тут, вроде не причем, но без Яндекса - точно никуда :-).


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.03.2006, 15:43
    #33580558
Петров Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Работало оно до меня ЛАЙКом долго и неточно, поэтому задача и возникла. А
порядок слов... лучше не вспоминать как издеваются над улицами.
Хотел уж написать нормально, чтобы в новую базу, с КЛАДРом связанную
переносить.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.03.2006, 16:05
    #33580677
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Oracle text не поможет?
...
Рейтинг: 0 / 0
03.03.2006, 16:08
    #33580697
Shoora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Тогда так. Вот примерная схемка бд поисковой системки картинка
Алгоритм такой :
Пишешь индексатор - хоть на php, хоть на перле, хоть любом языке, какой знаешь.
Он пробегает по полю string в Your_table и парсит его словам, исключая то, что перечислено в таблице stopword (типо предлоги и что еще хочешь (мусор по вашему мнению) - для русского и английского типичные могу скинуть по мылу). Все уникальные слова заносит в dictionary и заполняет x_dict2tab - собственно индексную таблицу, кстати offset - это номер слова в строке.

При поиске - пишешь поисковый алгоритм. Он парсит запрос пользователя, исключая stopwords. Если народ коверкает названия, создайте еще табличку mistakes, в которой перечислите исковерканные слова и свяжите ее с diktionary (такая база набирается со временем). Ну и каждое значимое слово в запросе пользователя ищешь в dictionary, узнаешь их did's, после чего изобретаешь алгоритм релевантного поиска с x_dict2tab - по совпадению или порядку следования.
...
Рейтинг: 0 / 0
03.03.2006, 16:28
    #33580788
Shoora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Картинку не так вставил...
...
Рейтинг: 0 / 0
03.03.2006, 16:31
    #33580800
Петров Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
to Shoora:
Такая схема частично уже и есть, а вот алгоритм релевантного поиска - самое
интересное. Я его и изобретаю.
Спасибо.

to ModelR:
Не хотелось бы прикручивать то, чем раньше не пользовался, а что это сильно
может помочь?


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
06.03.2006, 10:09
    #33583258
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Да, как раз для создания индексов по словам и поиска по вхождениям слов.
Если не нужны русские словоформы, то вполне достаточно.
...
Рейтинг: 0 / 0
15.03.2006, 16:25
    #33603013
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Посмотри здесь - тыНц
...
Рейтинг: 0 / 0
15.03.2006, 17:22
    #33603186
Leonid Boitsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Ну, блин, Вы загнули. Да и в Яндексе я уже не работаю, больше :-) Но по части сравнения предложений (адресов) действительно так просто проблема не решится. Я бы предложил следующий план действий
1) Какой-нибудь простейший датамайнинг, чтобы выявить-составить словарь основных сокращений-синонимов
2) Написать не очень сложную утилитку, которая сравнивает предложения. О том, как это делается написано http://itman.narod.ru/ir/faq/fzfaq.html. Слова можно сравнивать тем же Левенштейном, очень сильно "наказывая" за расхождение в начале и очень несильно за расхождение в конце. Это частично компенсирует отсутствие морфологии. Получите значения похожести для всех пар слов. Дальше можно делать примерно так, как описано. Можно поступить кондовее, просто посчитать количество общих слов, у которых похожесть выше некоторго заданного порога. Гарантирую, что со словарем синонимов-сокращений для сравнения адресов будет очень неплохо работать.

Петров Алексей
Не, я не думал, что все так просто.
Но я и не думал, что кусок из ядра Яндекса придется вставлять в программку,
которая улицы с КЛАДР'ом сверяет. :-o


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
15.03.2006, 17:36
    #33603225
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Петров АлексейНо я и не думал, что кусок из ядра Яндекса придется вставлять в программку,
которая улицы с КЛАДР'ом сверяет. :-o

В одном из проектов сталкивался с подобной задачей, правда все решилось через "вумен-интерфейс" сели девочки и для почти 1000 клиентов перебили адреса ;). Но если что-нибудь получится сообщите. Возможно опять такая проблема всплывет.
...
Рейтинг: 0 / 0
15.03.2006, 18:17
    #33603365
Leonid Boitsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Кстати, по поводу девочек. В свое время данная задача у нашего клиента была решена еще более простым способом. В качестве метрики похожести просто количество общих слов в адресах считалось (то есть даже всякие скоращения не учитывались) и ничего это помогло вычистить базу очень существенно. Процесс ручной чистки ускорился неимоверно.

----------------
http://itman.narod.ru/ir/index.html Sited devoted to information retrieval and fuzzy searching
...
Рейтинг: 0 / 0
15.03.2006, 19:02
    #33603471
Петров Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Сделал сечас так:

Из КЛАДРа выбираю простым селектом все улицы из населенного пункта. Если
нас.пункт еще не определен, то пользователь выбирает его из КЛАДРА. Потом
смотрим на название улицы, которое в старой базе и фильтруем непохожие
локально с помощью некой оценки похожести.
Т.е. показываем список оцененных выше определенного порога (если чего -
порог можно поднять или опустить). Пользователь выбирает истинный и в
специальной табличке фиксируется сопоставление. Если в следующий раз
встречается та же улица в том же нас.пункте - сопоставление происходит
автоматом.

Оценку выбрал такую:

Для каждого символа из эталонной строки ищу для каждой строки списка все его
вхождения.
Каждое вхождение каждого символа оценивается как:
1/exp(abs(<расстояние>)/2), где
1 = 1
exp - функция экспоненты
abs - абсолютное значение
<расстояние> - расстояние между одинаковыми символами в эталонной строке и
в оцениваемой строке.
Все оценки суммируются.
При значении порога прибл 6-7 отбирается от 3 до 10 похожих названий, из
которых легко выбрать.

Была еще идея - посчитать расстояния между одинаковыми символами и собрать
типа в гистограмму, выбрать максимальную частоту (сумму нескольких
максимальных) и сравнить с порогом. Но реализовывать не стал, ибо и то вроде
неплохо помогает.

Готов на вопросы ответить.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
16.03.2006, 10:23
    #33604310
STRELETS12
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Делал для кладра: (кладр хранится в виде дерева)
1. сделал словарь и связку словарь-кладр
2. в словарь добавил синонимы со ссылкой на словарь
3. для каждого слова из входящего адреса получаем список ПК из кладра
4. получаем декартово произведение, оставляем только те строки, где ПК идут по возрастанию.
5. оставляем строки с максимальным количеством непустых полей.
6. если осталась одна строка, то это то, что нужно
т.е. алгоритм похож на Т9 на телефонах
...
Рейтинг: 0 / 0
16.03.2006, 13:45
    #33605262
Shoora
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
авторДля каждого символа из эталонной строки ищу для каждой строки списка все его
вхождения.
Каждое вхождение каждого символа оценивается как:
1/exp(abs(<расстояние>)/2)

И это быстро работает? Хотя, конечно, в пределах одного населенного пункта улиц немного... А населенный пункт пользователь выбирает из списка?

Основная проблема - это найти нормальную форму слова.
Простое решение вот : тынц
...
Рейтинг: 0 / 0
16.03.2006, 14:46
    #33605545
Петров Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
>И это быстро работает? Хотя, конечно, в пределах одного населенного пункта
>улиц немного... А населенный пункт пользователь выбирает из > списка?
Сказать сколько улиц (проспектов, переулков) в населенном пункте под
названием Санкт-Петербург?
И тем не менее скорость фильтрации приемлимая - сопоставимая с временем
реакции пользователя

>Основная проблема - это найти нормальную форму слова.
Это опять морфология. Морфологии нету у меня. У меня ошибки при вводе.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
16.03.2006, 15:07
    #33605638
Петров Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
To Jimmy:
Спасибо за интересную ссылку, только поздно уже :-).


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
16.03.2006, 15:09
    #33605646
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
На здоровье :0)
...
Рейтинг: 0 / 0
22.03.2006, 12:06
    #33616718
Slider_spb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск похожих строк
Помниться, в одной базе наименования городов вводились ручками, а не выбирались из справочника, как это положено. Так вот, написание наименования города "Санкт-Петербург" было в 11 вариантах, я чуть не застрелился, когда все это в порядок приводил, пришлось писать полуавтоматическую тулзу для выявления таких вещей...
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поиск похожих строк / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]