Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сравнение строк
 
 автор: Владимир55   (09.08.2007 в 19:05)   письмо автору
 
 

Сравниваются строки типа:
$ssilka1 = "август - пора звездопада" ;
$out = "пора звездопада - август" ;

Фукция similar_text дает 62.5 процента совпадений, функция levenshtein отмечает 18 различий, что эквивалентно 25% совпадений.

А нет ли более точного способа сравнения, который дал бы количество совпадений - ноль?

=============
На практике отличие не только в перестановке. Может быть различным число слов и могут изменяться падежи и т.п, а хочется по какому-либо алгоритму более точно установить близость/различие строк.

База данных не используется.

   
 
 автор: Poison   (09.08.2007 в 19:16)   письмо автору
 
   для: Владимир55   (09.08.2007 в 19:05)
 

А почему это здесь кол-во совпадений ноль?


Можно написать функцию которая будет сравнивать каждый символ по порядку.

   
 
 автор: Владимир55   (09.08.2007 в 19:19)   письмо автору
 
   для: Poison   (09.08.2007 в 19:16)
 

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

   
 
 автор: Futurer   (09.08.2007 в 19:27)   письмо автору
 
   для: Владимир55   (09.08.2007 в 19:19)
 

Разбивай строки по словам. Кидай их в массив, потом в цикле сравнивай массивы на совпадение элементов. Совпавшие элементы удаляй. Если в результате работы такого цикла не останется элементов в сравниваемом массиве, то значит совпали слова.
Но по сути дела те две строки это разные строки, потому что порядок слов в русском языке имеет смысл тоже.
А если мутить ещё и с падежами, то тогда надо какой-то массив окончаний слов создать и вычёсывать из исходной фразы эти окончания перед запуском алгоритма сравнения.

   
 
 автор: Владимир55   (09.08.2007 в 20:02)   письмо автору
 
   для: Futurer   (09.08.2007 в 19:27)
 

Я-то думал, что функции similar_text и levenshtein более интеллектуальны, и сравнивал каждую новую строку с каждой строкой массива, сформированного ранее. При этом критерием считал различие в 20% по функции similar_text . На первых порах этого показалось достаточно, но потом стали пролезать близкие по составу слов строки. Повысил порог сравнения - не выход. Теперь идентичными считаются строки

Можно заработать хорошие деньги
Следующее окно предложит вам открыть счет в Процессинговом Центре системы Яндекс.Деньги

Сравнивать по словам - да, единственный выход. И каждое слове через levenshtein... И потом на практике отрабатывать критерий совпадения для моего частного применения. Довольно трудоемкая задача!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования