|
|
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Думал, что это FAQ, но мало чего нашел. Кто как делает - поделитесь. Есть задача - найти в таблице строку похожую на заданную (она из другой таблицы берется) Окончательное решение о похожести принимает пользователь, но ввсе-таки хотелось бы максимально облегчить ему задачу: - вывести список имеющихся похожих строк - указать ту, которая более всего похожа - позволить, все же выбрать из расширяющегося множества (все менее и менее похожих) вплоть до всех. Пока ничего не придумал, кроме вычленения и проверки на совпадение нескольких подстрок из начала и из конца, но результат не устраивает - много мусора и "наиболее похожий вариант" указать невозможно. Подкинте идею, пожалуйста. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 12:06 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Спасибо, пойду - застрелюсь :-) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 13:24 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
А че, думал все так просто? Запросик с лайком написал и вот тебе строчки на любос языке, отсортированные по релевантнисть? :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 14:11 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Не, я не думал, что все так просто. Но я и не думал, что кусок из ядра Яндекса придется вставлять в программку, которая улицы с КЛАДР'ом сверяет. :-o Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 14:23 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Ну с яндексом это ты переборщил, но если требуется адекватный нечеткий полнотекстовый поиск, то без морфологического анализа не обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 15:17 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Хотя стоп. КЛАДР, говоришь? Так там небось все в одном падеже и порядок слов соблюдается, тогда можно попробовать замутить без морфомодуля, только по лайку долго будет работать. Индексатор простенький можно написать, а дальше дело техники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 15:23 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Что значит адекватный? Собственно это, на самом деле, в некотором роде система поддержки принятия решений с задачей оценки релевантности строк. Морфология тут, вроде не причем, но без Яндекса - точно никуда :-). Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 15:37 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Работало оно до меня ЛАЙКом долго и неточно, поэтому задача и возникла. А порядок слов... лучше не вспоминать как издеваются над улицами. Хотел уж написать нормально, чтобы в новую базу, с КЛАДРом связанную переносить. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 15:43 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Oracle text не поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 16:05 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Тогда так. Вот примерная схемка бд поисковой системки картинка Алгоритм такой : Пишешь индексатор - хоть на php, хоть на перле, хоть любом языке, какой знаешь. Он пробегает по полю string в Your_table и парсит его словам, исключая то, что перечислено в таблице stopword (типо предлоги и что еще хочешь (мусор по вашему мнению) - для русского и английского типичные могу скинуть по мылу). Все уникальные слова заносит в dictionary и заполняет x_dict2tab - собственно индексную таблицу, кстати offset - это номер слова в строке. При поиске - пишешь поисковый алгоритм. Он парсит запрос пользователя, исключая stopwords. Если народ коверкает названия, создайте еще табличку mistakes, в которой перечислите исковерканные слова и свяжите ее с diktionary (такая база набирается со временем). Ну и каждое значимое слово в запросе пользователя ищешь в dictionary, узнаешь их did's, после чего изобретаешь алгоритм релевантного поиска с x_dict2tab - по совпадению или порядку следования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 16:08 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
to Shoora: Такая схема частично уже и есть, а вот алгоритм релевантного поиска - самое интересное. Я его и изобретаю. Спасибо. to ModelR: Не хотелось бы прикручивать то, чем раньше не пользовался, а что это сильно может помочь? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2006, 16:31 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Да, как раз для создания индексов по словам и поиска по вхождениям слов. Если не нужны русские словоформы, то вполне достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2006, 10:09 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Посмотри здесь - тыНц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 16:25 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Ну, блин, Вы загнули. Да и в Яндексе я уже не работаю, больше :-) Но по части сравнения предложений (адресов) действительно так просто проблема не решится. Я бы предложил следующий план действий 1) Какой-нибудь простейший датамайнинг, чтобы выявить-составить словарь основных сокращений-синонимов 2) Написать не очень сложную утилитку, которая сравнивает предложения. О том, как это делается написано http://itman.narod.ru/ir/faq/fzfaq.html. Слова можно сравнивать тем же Левенштейном, очень сильно "наказывая" за расхождение в начале и очень несильно за расхождение в конце. Это частично компенсирует отсутствие морфологии. Получите значения похожести для всех пар слов. Дальше можно делать примерно так, как описано. Можно поступить кондовее, просто посчитать количество общих слов, у которых похожесть выше некоторго заданного порога. Гарантирую, что со словарем синонимов-сокращений для сравнения адресов будет очень неплохо работать. Петров Алексей Не, я не думал, что все так просто. Но я и не думал, что кусок из ядра Яндекса придется вставлять в программку, которая улицы с КЛАДР'ом сверяет. :-o Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 17:22 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Петров АлексейНо я и не думал, что кусок из ядра Яндекса придется вставлять в программку, которая улицы с КЛАДР'ом сверяет. :-o В одном из проектов сталкивался с подобной задачей, правда все решилось через "вумен-интерфейс" сели девочки и для почти 1000 клиентов перебили адреса ;). Но если что-нибудь получится сообщите. Возможно опять такая проблема всплывет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 17:36 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Кстати, по поводу девочек. В свое время данная задача у нашего клиента была решена еще более простым способом. В качестве метрики похожести просто количество общих слов в адресах считалось (то есть даже всякие скоращения не учитывались) и ничего это помогло вычистить базу очень существенно. Процесс ручной чистки ускорился неимоверно. ---------------- http://itman.narod.ru/ir/index.html Sited devoted to information retrieval and fuzzy searching ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 18:17 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Сделал сечас так: Из КЛАДРа выбираю простым селектом все улицы из населенного пункта. Если нас.пункт еще не определен, то пользователь выбирает его из КЛАДРА. Потом смотрим на название улицы, которое в старой базе и фильтруем непохожие локально с помощью некой оценки похожести. Т.е. показываем список оцененных выше определенного порога (если чего - порог можно поднять или опустить). Пользователь выбирает истинный и в специальной табличке фиксируется сопоставление. Если в следующий раз встречается та же улица в том же нас.пункте - сопоставление происходит автоматом. Оценку выбрал такую: Для каждого символа из эталонной строки ищу для каждой строки списка все его вхождения. Каждое вхождение каждого символа оценивается как: 1/exp(abs(<расстояние>)/2), где 1 = 1 exp - функция экспоненты abs - абсолютное значение <расстояние> - расстояние между одинаковыми символами в эталонной строке и в оцениваемой строке. Все оценки суммируются. При значении порога прибл 6-7 отбирается от 3 до 10 похожих названий, из которых легко выбрать. Была еще идея - посчитать расстояния между одинаковыми символами и собрать типа в гистограмму, выбрать максимальную частоту (сумму нескольких максимальных) и сравнить с порогом. Но реализовывать не стал, ибо и то вроде неплохо помогает. Готов на вопросы ответить. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 19:02 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Делал для кладра: (кладр хранится в виде дерева) 1. сделал словарь и связку словарь-кладр 2. в словарь добавил синонимы со ссылкой на словарь 3. для каждого слова из входящего адреса получаем список ПК из кладра 4. получаем декартово произведение, оставляем только те строки, где ПК идут по возрастанию. 5. оставляем строки с максимальным количеством непустых полей. 6. если осталась одна строка, то это то, что нужно т.е. алгоритм похож на Т9 на телефонах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2006, 10:23 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
авторДля каждого символа из эталонной строки ищу для каждой строки списка все его вхождения. Каждое вхождение каждого символа оценивается как: 1/exp(abs(<расстояние>)/2) И это быстро работает? Хотя, конечно, в пределах одного населенного пункта улиц немного... А населенный пункт пользователь выбирает из списка? Основная проблема - это найти нормальную форму слова. Простое решение вот : тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2006, 13:45 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
>И это быстро работает? Хотя, конечно, в пределах одного населенного пункта >улиц немного... А населенный пункт пользователь выбирает из > списка? Сказать сколько улиц (проспектов, переулков) в населенном пункте под названием Санкт-Петербург? И тем не менее скорость фильтрации приемлимая - сопоставимая с временем реакции пользователя >Основная проблема - это найти нормальную форму слова. Это опять морфология. Морфологии нету у меня. У меня ошибки при вводе. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2006, 14:46 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
To Jimmy: Спасибо за интересную ссылку, только поздно уже :-). Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2006, 15:07 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
На здоровье :0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2006, 15:09 |
|
||
|
Поиск похожих строк
|
|||
|---|---|---|---|
|
#18+
Помниться, в одной базе наименования городов вводились ручками, а не выбирались из справочника, как это положено. Так вот, написание наименования города "Санкт-Петербург" было в 11 вариантах, я чуть не застрелился, когда все это в порядок приводил, пришлось писать полуавтоматическую тулзу для выявления таких вещей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2006, 12:06 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33580558&tid=1545356]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 516ms |

| 0 / 0 |
