Как узнать, что строка1 похожа на строка2?
От: punches  
Дата: 06.10.04 15:38
Оценка:
Здравствуйте!

Есть две строки и надо узнать: похожи они или нет с некоторой точностью. Нужно для того, чтобы определить, что слово хоть и с опечаткой, но нужно нам.

06.10.04 21:28: Перенесено модератором из '.NET' — TK
Re: Как узнать, что строка1 похожа на строка2?
От: HotDog Швейцария www.denebspace.com
Дата: 06.10.04 15:44
Оценка:
fuzzy search ?
... << RSDN@Home 1.1.4 @@subversion >>
Re: Как узнать, что строка1 похожа на строка2?
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 06.10.04 17:37
Оценка:
Здравствуйте, punches, Вы писали:

P>Есть две строки и надо узнать: похожи они или нет с некоторой точностью. Нужно для того, чтобы определить, что слово хоть и с опечаткой, но нужно нам.


Обсуждалось уже. Поищите по волшебным словам Metaphone и SoundEx
... << RSDN@Home 1.1.3 stable >>
Re: Как узнать, что строка1 похожа на строка2?
От: fAX Израиль  
Дата: 06.10.04 19:01
Оценка:
Здравствуйте, punches, Вы писали:

P>Здравствуйте!


P>Есть две строки и надо узнать: похожи они или нет с некоторой точностью. Нужно для того, чтобы определить, что слово хоть и с опечаткой, но нужно нам.


Пишу я здесь редко, но сейчас попробую вставить 5 копеек. Есть такая вещь — выравнивание последовательностей, используется для сравнения частей ДНК, например, но, безусловно, этим не ограничивается.

Почитать можно здесь

Не так давно лично сталкивался с подобной задачкой ( http://webcourse.cs.technion.ac.il/236703/Spring2004/hw/WCFiles/ex4.v1.02.html )
Есть мой вариант решения ( C++, template-based ).
Если интересно, могу прислать.
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re: Как узнать, что строка1 похожа на строка2?
От: korzhik Россия  
Дата: 06.10.04 19:08
Оценка:
Здравствуйте, punches, Вы писали:

P>Здравствуйте!


P>Есть две строки и надо узнать: похожи они или нет с некоторой точностью. Нужно для того, чтобы определить, что слово хоть и с опечаткой, но нужно нам.


посмотри здесь
Автор: c-smile
Дата: 25.09.04

метод neighbour_search
может поможет
Re: Как узнать, что строка1 похожа на строка2?
От: Dr.Gigabit  
Дата: 07.10.04 05:32
Оценка:
Здравствуйте, punches, Вы писали:

P>Здравствуйте!


P>Есть две строки и надо узнать: похожи они или нет с некоторой точностью. Нужно для того, чтобы определить, что слово хоть и с опечаткой, но нужно нам.


Ternary search tree, думаю, решит вашу проблему. В исходниках посмотрите или в гугле. Только из личного опыта могу сказать, что этого недостаточно на проверку очепяток (сам сейчас этим вопросом занимаюсь). Нужно с каким-то образцом сравнивать, верно? А где образец взять?
... << RSDN@Home 1.1.4 @@subversion >>
Re: Как узнать, что строка1 похожа на строка2?
От: Аноним  
Дата: 07.10.04 11:31
Оценка:
Как самый грубый вариант — убрать из строки гласные и сравнивать. Очень во многих задачах оказывается, что этот немудрящий вариант с небольшими изменениями (скажем пополнить список Й и Ь, сравнение длины, сберегание первой буквы и т.п.) дает вполне корректный результат.

Скажем такая задача: есть БД с Ф И О и есть некий случайный текст — нужно выявить присутсвие людей из базы в тексте, невзирая на падеж — тут вышеизложенное — надежная метода сравнения строк.



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Как узнать, что строка1 похожа на строка2?
От: Dr.Gigabit  
Дата: 08.10.04 05:41
Оценка:
Здравствуйте, Fagim, Вы писали:

F>Как самый грубый вариант — убрать из строки гласные и сравнивать. Очень во многих задачах оказывается, что этот немудрящий вариант с небольшими изменениями (скажем пополнить список Й и Ь, сравнение длины, сберегание первой буквы и т.п.) дает вполне корректный результат.


F>Скажем такая задача: есть БД с Ф И О и есть некий случайный текст — нужно выявить присутсвие людей из базы в тексте, невзирая на падеж — тут вышеизложенное — надежная метода сравнения строк.


Да, но для поиска по словарю, думаю, это не совсем то.
Пример: vanish, vanished, vanishing... Префиксы, суффиксы — вот проблема, т.к. хранить все комбинации, получаемые при добавлении к корню слова
приставок и суффиксов нереально.
... << RSDN@Home 1.1.4 @@subversion >>
Re: Как узнать, что строка1 похожа на строка2?
От: punches  
Дата: 08.10.04 12:09
Оценка:
Мне, к счастью, не нажо проверять орфографию . Задача ограничивается сравнением с существующей базой имен клиентов компании.

Всем спасибо за советы!

Я, кажется, нашел подходящий способ решения: буду использовать алгоритм Левентшейна.
Re[2]: Как узнать, что строка1 похожа на строка2?
От: fAX Израиль  
Дата: 08.10.04 20:11
Оценка:
Здравствуйте, punches, Вы писали:

P>Я, кажется, нашел подходящий способ решения: буду использовать алгоритм Левентшейна.

Левенштейн, вроде, только метрику придумал... Причём она является частным случаем того, что привёл я.
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re: Как узнать, что строка1 похожа на строка2?
От: xtile  
Дата: 12.10.04 14:33
Оценка:
Здравствуйте, punches, Вы писали:

P>Здравствуйте!


P>Есть две строки и надо узнать: похожи они или нет с некоторой точностью. Нужно для того, чтобы определить, что слово хоть и с опечаткой, но нужно нам.


Можно так:

введем функцию расстояния между 2мя строками — минимальное количество элементарных действий, которые нужно произвести над строкой 1 для получения строки 2.

Как правило, элементарными действиями считают: удаление символа, вставка символа, изменение символа, перестановка двух соседних символов.

Иногда последнее действие исключают. Также можно действиям назначать меру значимости — вес.

После этого задача решается методом динамического программирования.


Когда найдено расстояние между строками, функцию похожести можно вычислить так: f = 1 — distance(a, b)/max(strlen(a), strlen(b)).


Есть еще одна реализация в виде исходника, встретил как-то в фидо лет 7 назад. К сожалению, подходящего официального алгоритма для нее найти не удалось.

Если интересуют исходники, могу выслать.
Re[2]: Как узнать, что строка1 похожа на строка2?
От: punches  
Дата: 13.10.04 09:09
Оценка:
Здравствуйте, xtile, Вы писали:

X>Здравствуйте, punches, Вы писали:


P>>Здравствуйте!


P>>Есть две строки и надо узнать: похожи они или нет с некоторой точностью. Нужно для того, чтобы определить, что слово хоть и с опечаткой, но нужно нам.


X>Можно так:


X>введем функцию расстояния между 2мя строками — минимальное количество элементарных действий, которые нужно произвести над строкой 1 для получения строки 2.


X>Как правило, элементарными действиями считают: удаление символа, вставка символа, изменение символа, перестановка двух соседних символов.


На сколько я понимаю, алгоритм Левенштейна что-то такое и делает.

X>Когда найдено расстояние между строками, функцию похожести можно вычислить так: f = 1 — distance(a, b)/max(strlen(a), strlen(b)).


Спасибо за формулу
Re[3]: ххы... префиксы, суффиксы
От: xtile  
Дата: 13.10.04 15:20
Оценка:
F>>Скажем такая задача: есть БД с Ф И О и есть некий случайный текст — нужно выявить присутсвие людей из базы в тексте, невзирая на падеж — тут вышеизложенное — надежная метода сравнения строк.

DG>Да, но для поиска по словарю, думаю, это не совсем то.

DG>Пример: vanish, vanished, vanishing... Префиксы, суффиксы — вот проблема, т.к. хранить все комбинации, получаемые при добавлении к корню слова
DG>приставок и суффиксов нереально.


Здесь нечетким поиском и неточным сравнением не обойтись, нужны морфологические энжины.
Re[4]: ххы... префиксы, суффиксы
От: Dr.Gigabit  
Дата: 13.10.04 21:00
Оценка:
Здравствуйте, xtile, Вы писали:

F>>>Скажем такая задача: есть БД с Ф И О и есть некий случайный текст — нужно выявить присутсвие людей из базы в тексте, невзирая на падеж — тут вышеизложенное — надежная метода сравнения строк.


DG>>Да, но для поиска по словарю, думаю, это не совсем то.

DG>>Пример: vanish, vanished, vanishing... Префиксы, суффиксы — вот проблема, т.к. хранить все комбинации, получаемые при добавлении к корню слова
DG>>приставок и суффиксов нереально.


X>Здесь нечетким поиском и неточным сравнением не обойтись, нужны морфологические энжины.


Угу...В частности можно заюзать вот это
... << RSDN@Home 1.1.4 @@subversion >>
Re[2]: Как узнать, что строка1 похожа на строка2?
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 15.10.04 13:38
Оценка:
Здравствуйте, fAX, Вы писали:

fAX>Если интересно, могу прислать.


Дико интересно. Пришли пожалуйста. Он до ума доведен? Если да, то какая лицензия и все такое... Спасибо.
Алексей Кирдин
Re[3]: Как узнать, что строка1 похожа на строка2?
От: fAX Израиль  
Дата: 15.10.04 16:02
Оценка:
Здравствуйте, Kaa, Вы писали:

Kaa>Дико интересно. Пришли пожалуйста. Он до ума доведен? Если да, то какая лицензия и все такое... Спасибо.

Доведён. По крайней мере, получил за функциональность полный балл
Нет проблем. Только я не вижу, как их выложить на этом сайте
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re[3]: Как узнать, что строка1 похожа на строка2?
От: fAX Израиль  
Дата: 15.10.04 16:06
Оценка:
Здравствуйте, Kaa, Вы писали:

fAX>>Если интересно, могу прислать.

Kaa>Дико интересно. Пришли пожалуйста. Он до ума доведен? Если да, то какая лицензия и все такое... Спасибо.
Я отправил на почту. Лизензия — GPL. Если понравится — можете выложить на этом сайте; я не нашёл как (наверняка, плохо искал).
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.