![]() |
Нужно проверить строки на идентичность,
при этом учесть что при вводе могли быть допущены ошибки. Например: "Cadaveric Incubator Of Endoparasites" и "Cadaveric inkubator Of endo-parasites" также, как "Ein Tröpfchen Voller Glück" и "Ein Tropfchen Voller Gluck" должны быть признаны идентичными. Есть мысли как к этому подступиться? Добавлено: Цитата:
|
ну например так
<?php #-------------------------------------# #--- правильная строка --------# #-------------------------------------# $a="Ein Trapfchen Voller Glock"; #-------------------------------------# #--- не правильная строка ---# #-------------------------------------# $b="Ein Trepfchen Voller Gluck"; for ($i=0; $i<strlen($a); $i++) { $per=substr($a, $i) if ($a[$i]==$per) { echo $per; } else { echo "<sup><font color=red>error has been into", $a[$i], "the miss was ok</font></sup>"; } } ?> вот такой вот скрипт от балды для примера))) интересно заработает:biglaugh: |
Многие из этих проблем можно решить с помощью регулярных выражений
Немного покапавшись в мануле нашёл ещё следущие интересные функции которые могут помочь при сравнение двух строк: levenshtein similar_text strcspn |
Dutchman Mihel
все очень просто: Код:
$a = ' &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now'; FADE прошу: 1) внимательно читать вопрос! 2) хоте бы проверять написанный вами код! приведенный вами код не правильный сразу по трем причинам: 1) вызабыли переменную b, т.е. вы срасниваете a с a 2) если делать сравнивание то лучьше: Код:
if( $a == $b ) FADE в селедующий раз прошу быть внимательнее или я вынесу вам предупреждение!!! |
All
Похоже нужно пояснение к вопросу Речь идет о поиске в хтмл файле по подстроке, т.е. нет правильной строки и неправильной. Для случая полного соответствия я уже использовал strcasecmp - все пучком, работает. Нужно чтобы строки сопоставились как идентичные даже при НЕБОЛЬШОМ различии между ними (т.е. при наличии опечаток либо в тексте, либо в самой подстроке). Хорошо то, что есть сигнатура по которой я могу искать нужный мне текст. Код:
<FONT color=#dddddd><B>Нужный мне текст</B></Font> Плохо то, что нужного текста в файле может вообще не быть vadimiron Я уже смотрел в сторону levenshtein, но как ее здесь применить? Функция считает кол-во операций для преобразования одной строки в другую. Можно эмпирически определить предельно допустимое кол-во преобразований. Для строки в 255 символов 8 операций выглядят не очень критичными. А для строки из 4 символов? Добавлено: Забыл сказать этих штук Код:
<FONT color=#dddddd><B>Нужный мне текст</B></Font> |
Dutchman Mihel
эта функция берёт каждый элемент строки и сравнивает его с таким же элементом по счёту другой строки, если не равны, то +1 В конце выдаётся сумма, то есть количество расхождений Например $a="asdfg"; $b="asdegh"; тогда levenshtein ($a,$b); будет равно 2 С одной стороны, если количество элементов в строках одинаковое, то эта функция может помочь, например если установить, что в строке из 20 элементов может быть не более 4 ошибок Но с другой стороны значение слов: например Большой луг и Большой лук совершенно две разные строки, но эта функция выдаст всего лишь 1 |
vadimiron
Цитата:
Цитата:
Можно конечно бить строку по пробелу и анализировать среднюю отношений дистанции по левенштайну к длине слова, но это имхо тоже очень шатко. |
Цитата:
А любое сравнение двух слов будет шатким :(, ведь подобные алгоритмы строятся в основном на сравнении элементов, которые входят в данные строки, отсюда следует, что упускается смысл слов-это и естественно, ещё не создали такой системы, которая смогла бы оперировать смыслом слов А вариант, который был Владом предложен, не подходит??? Я просто так не пробЫвал, не знаю |
vadimiron
Цитата:
вариант Влада позволяет определить было полное совпадение или нет, т.е. сам факт неравенства, а не насколько строки расходятся Я его уже использовал для первоначальной проверки. Если все совпало, зачем бодаться со всякими levenshtein'ами :) ? |
Время: 06:38. |
Время: 06:38.
© OSzone.net 2001-