Сравнение двух строк

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Fil
Сообщения: 41
Зарегистрирован: 30 авг 2006, 17:03

07 авг 2007, 16:29

Привет!

Например, есть две строки:
1. Введение, окончание можно не писать. (Это n лексем)
2. Введение и заключение можно не писать. (Это m лексем)

Необходимо сравнить лексемы этих строк. Лексемы, которые не совпадают, отбрасываются («окончание» и «заключение»). Остальные лексемы совпадают, и если n’/m>=0,7, то что-то выводится. (n’ – это кол-во лексем без союза ‘и’).

Используя ф-ию strtok(…) разбиваю на лексемы. Что касается сравнения лексем, учитывая то, что описал выше … проблемка. Пожалуйста, напишите, как тут лучше сделать. Если не затруднит, что-то вроде псевдокода сбросьте. Работаю в Visual C++6.0

С уважением, Fil!
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

08 авг 2007, 09:58

Так в чем же трудность? Очевидно, m и n - массивы строк и задача сводится к сравнению элементов массивов. И если я так понял, то нужно вычислить отношение количества совпадающих элементов к общему количеству элементов. Предварительно переведя каждую строку в верхний или нижний регистр можно добиться точного сравнения строк.
1. Выбираем элемент из M
2. Ищем его в N
3. Если такой есть - увеличим счетчик найденых
4. Следующий элемент из М
Для более точного анализа предложений нужно использовать некий коэфициент, учитывающий некоторые факторы, такие как:
1. Удаленность похожих слов из разных предложений друг от друга.
2. Степень совпадения слов в предложениях.
3. Грамматическая сложность предложений.
Мама мыла раму, коля тоже ее мыл
Мама мыла раму, а маша ни хрена ее не мыла
Судя по 1-ому методу получим отношение 4/7 или 4/9 - что меньше 0,7 значит предложения не похожи.
Если считать по методу 2, то к примеру "мыл" = "мыла" (0,75)*1 добавит схожести предложениям установив отношение 4,75/7 что вполне близко к 0,7
It's a long way to the top if you wanna rock'n'roll
Fil
Сообщения: 41
Зарегистрирован: 30 авг 2006, 17:03

09 авг 2007, 15:07

Благодарю.
Ответить