Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/58: Рейтинг темы: голосов - 58, средняя оценка - 4.53
 Аватар для Dj_SheLL
180 / 85 / 10
Регистрация: 13.02.2010
Сообщений: 318
.NET 4.x

Процентная похожесть двух слов

01.02.2012, 14:42. Показов 11031. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно сабж.
Не могу придумать алгоритм для сравнения двух слов разной длины и получить процент их схожести.
Вручную на листике можно запросто,к примеру:
слово - олово - 80% схожести
слово - корова - 55% схожести
А вот как это сделать программным путём?
Проверяю схожесть по вхождению символов одного слова в другом.
Вот пока до чего дошёл,но это не совсем правильно,можно сказать вообще
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static int ComparePercanteWord(string reco, string gypo)
        {
            int count = 0, percant = 0, percant1 = 0, percant2 = 0;
            char[] recos = reco.ToCharArray();
            char[] gypos = gypo.ToCharArray();
            for (int i = 0; i < recos.Length; i++)
            {
                for (int j = 0; j < gypos.Length; j++)
                {
                    if (recos[i] == gypos[j])
                    { count++; }
                }
            }
            if (count > 0)
            {
                percant1 = (100 / reco.Length) * count;
                percant2 = (100 / gypo.Length) * count;
                percant = (percant1 + percant2) / 2;
            }
            else
            { percant = 0; }
            return percant;
        }
Заранее спасибо за любые советы!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.02.2012, 14:42
Ответы с готовыми решениями:

Похожесть двух карт
... заумное название, которое почти никак не соответствует сути вопроса. На днях задался задачей, решение которой до сих пор не...

Сравнить похожесть двух строк игнорируя служебные символы
Здравствуйте всем доброго времени суток! Собственно есть вопрос, как сравнить похожесть двух строк при сравнении игнорируя служебные...

Похожесть последовательностей
Здравствуйте помогите пожалуйста решить. Задание Рассмотрим две последовательности A и B, содержащие по N элементов .Сумма...

8
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
01.02.2012, 14:45
Поясните, как вы получили
слово - корова - 55% схожести
я бы дал максимум 33%
1
 Аватар для Dj_SheLL
180 / 85 / 10
Регистрация: 13.02.2010
Сообщений: 318
01.02.2012, 14:50  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
я бы дал максимум 33%
Ну вот.Кто как.
Ну я посчитал количество букв, которое есть в обоих словах.Нашёл их процентное составляющее для каждого слова в отдельности,а потом нашёл средний процент из двух, ранее найденных, значений.
Я знаю,что это не правильно,но по-другому вообще не знаю как.
Алгоритм Шинглов не подходит - он для строк.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
01.02.2012, 15:51
в голову приходит только что-то типа баллов:
за каждую общую букву - 1 балл
за каждую общую букву после другой общей - 3 балла
за каждую общую букву после другой общей, при этом они соседние - 5 баллов.

вот и придется подсчитать каждый для конкретной пара, а также найти максимум схожести.
потом поделить.

хотя кривовато будет. надо определиться с критериями похожести
1
 Аватар для Димон_
136 / 104 / 9
Регистрация: 30.01.2011
Сообщений: 699
01.02.2012, 15:56
Вопрос собственно ЗАЧЕМ?
Я понимаю, нужно, очень часто при взаимодействии с пользователем через текст, обрабатывать возможность опечаток-ошибок.
Но тут?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
01.02.2012, 15:58
Цитата Сообщение от Димон_ Посмотреть сообщение
Вопрос собственно ЗАЧЕМ?
Я понимаю, нужно, очень часто при взаимодействии с пользователем через текст, обрабатывать возможность опечаток-ошибок.
Но тут?
а почему вы решили, что тут как раз не тот случай?
0
 Аватар для Dj_SheLL
180 / 85 / 10
Регистрация: 13.02.2010
Сообщений: 318
01.02.2012, 16:05  [ТС]
Цитата Сообщение от Димон_ Посмотреть сообщение
Вопрос собственно ЗАЧЕМ?
Я понимаю, нужно, очень часто при взаимодействии с пользователем через текст, обрабатывать возможность опечаток-ошибок.
Но тут?
Я с помощью MS SAPI при распознавании голосовой команды получаю гипотетическое и точное значение.Я должен предусмотреть все возможности,вплоть,что движок почти правильно распознает команду,но слова будут похожи (пользователь мог для двух команд сделать ключевые слова "олово" и "слово"). И вот при распознании я могу получить и как "олово" и так "слово".
Хочу сделать систему выбора правильного варианта с последующим анализом частоты выбора одного из двух вариантов.
А для этого мне нужно знать насколько эти два слова похожи,чтобы предоставлять пользователю возможность выбора или нет.Ну как-то.Объясняю плохо,если что извините.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
01.02.2012, 16:12
вообще насколько видно задача довольно старая и фундамент заложен давно, ведь по сути алгоритм используется в spell-cheker-ах
советую посмотреть статью http://habrahabr.ru/blogs/algorithm/114997/, там есть реализация на java. На c# переписать, я думаю, не составит труда
и если не пугает английский http://stackoverflow.com/q/2294915/272742
1
 Аватар для Dj_SheLL
180 / 85 / 10
Регистрация: 13.02.2010
Сообщений: 318
01.02.2012, 16:14  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
в голову приходит только что-то типа баллов:
за каждую общую букву - 1 балл
за каждую общую букву после другой общей - 3 балла
за каждую общую букву после другой общей, при этом они соседние - 5 баллов.
вот и придется подсчитать каждый для конкретной пара, а также найти максимум схожести.
потом поделить.
хотя кривовато будет. надо определиться с критериями похожести
На основе вашей идеи возникла своя!
Заключается в чём:
Есть "корова" и "слово", нужно брать с первого слова первую пару букв т.е. "ко" и смотреть,есть ли вхождения этой пары или нет в "слово",если нет,то брать следующую пару,т.е. "ор" и т.д.
Когда находим вхождение (это будет "ов"), запоминаем позицию, берём следующую пару букв с первого слова "ва" и с УЖЕ известной позиции смотрим, есть ли там также эта пара,если нет,то вхождение равно 2 (два символа),если дальше есть допустим в примере "слово-олово",то вхождение равно 4.
Считаем проценты вхождений:
корова - 2 - 33%
слово - 2 - 40%
Общий процент схожести будет 36.5%

В случае "слово-олово" будет 80%.

Как идея?

Добавлено через 1 минуту
Цитата Сообщение от turbanoff Посмотреть сообщение
советую посмотреть статью http://habrahabr.ru/blogs/algorithm/114997/
и если не пугает английский http://stackoverflow.com/q/2294915/272742
Ооо!Хоть какое-то направление!Этого я почему то в гугле не нашёл
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.02.2012, 16:14
Помогаю со студенческими работами здесь

Вводятся 5 слов, нужно создать слово из первых двух букв этих слов
Вводятся 5 чисел, нужно создать слово из первых двух букв этих слов. Например стол, квартира, книга, куб, телефон, будет слово стквкнкуте

Сравнить эти списки на «похожесть»
Задача: Даны два списка L1 и L2. Сравнить эти списки на «похожесть» и выдать сообщение «списки похожи», если списки совпадают по...

Сравнение текста на максимальную похожесть
Предложите идею, как сравнить два текста на максимальную похожесть. Любой метод, хоть как в Тотал Командере сравниваются два текста, хоть...

Посчитать общее количество слов и определить, сколько слов в этом тексте состоит из двух символов
1) Заданы: массив наименований продукции и соответствующие ему данные плановой рентабельности (RP), фактической цены реализации (C) и...

Процентная вероятность
Необходимо реализовать метод, который принимает количество % (шанс выпадения) и выдает true, если шанс сработал ну и false если нет. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru