Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Сравнение строк в PHP

Ответить
Настройки темы
Сравнение строк в PHP

Пользователь


Сообщения: 58
Благодарности: 1

Профиль | Отправить PM | Цитировать


Нужно проверить строки на идентичность,
при этом учесть что при вводе могли быть допущены ошибки.
Например:

"Cadaveric Incubator Of Endoparasites" и
"Cadaveric inkubator Of endo-parasites"

также, как

"Ein Tröpfchen Voller Glück" и
"Ein Tropfchen Voller Gluck"

должны быть признаны идентичными.


Есть мысли как к этому подступиться?

Добавлено:

Цитата:
Ein Tröpfchen Voller Glück
это по-немецки там были o и u с точками  

Отправлено: 00:27, 03-07-2004

 

Старожил


Сообщения: 236
Благодарности: 0

Профиль | Отправить PM | Цитировать


ну например так

<?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>";
}
}

?>

вот такой вот скрипт от балды для примера)))
интересно заработает

Отправлено: 03:40, 03-07-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Многие из этих проблем можно решить с помощью регулярных выражений

Немного покапавшись в мануле нашёл ещё следущие интересные функции которые могут помочь при сравнение двух строк:
levenshtein
similar_text
strcspn

-------
Fortes fortuna adiuvat


Отправлено: 16:12, 03-07-2004 | #3


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


Dutchman Mihel
все очень просто:
Код: Выделить весь код
$a = ' &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now';
$b = ' "walk" the <b>dog</b> now';

$c = html_entity_decode($a);

if( strcasecmp($b, $c) == 0 )
  print 'строки совпадают';
else
  print 'строки строки не совпадают';
(исходный строки - a и b)

FADE
прошу:
1) внимательно читать вопрос!
2) хоте бы проверять написанный вами код!

приведенный вами код не правильный сразу по трем причинам:
1) вызабыли переменную b, т.е. вы срасниваете a с a
2) если делать сравнивание то лучьше:
Код: Выделить весь код
if( $a == $b )
...
3) этот код проверяет совершенно не так, как просил Dutchman Mihel

FADE
в селедующий раз прошу быть внимательнее или я вынесу вам предупреждение!!!

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 22:34, 03-07-2004 | #4


Пользователь


Сообщения: 58
Благодарности: 1

Профиль | Отправить PM | Цитировать


All

Похоже нужно пояснение к вопросу

Речь идет о поиске в хтмл файле по подстроке,
т.е. нет правильной строки и неправильной. Для случая полного соответствия я уже использовал strcasecmp - все пучком, работает. Нужно чтобы строки сопоставились как идентичные даже при НЕБОЛЬШОМ различии между ними (т.е. при наличии опечаток либо в тексте, либо в самой подстроке).

Хорошо то, что есть сигнатура по которой я могу искать нужный мне текст.

Код: Выделить весь код
<FONT color=#dddddd><B>Нужный мне текст</B></Font>
Текст внутри этого font тега произвольной длины.

Плохо то, что нужного текста в файле может вообще не быть


vadimiron

Я уже смотрел в сторону levenshtein, но как ее здесь применить?

Функция считает кол-во операций для преобразования одной строки в другую.  Можно эмпирически определить предельно допустимое кол-во преобразований.  Для строки в 255 символов 8 операций выглядят не очень критичными. А для строки из 4 символов?

Добавлено:

Забыл сказать

этих штук

Код: Выделить весь код
<FONT color=#dddddd><B>Нужный мне текст</B></Font>
в файле может быть от 1 и до чёрта

Отправлено: 12:30, 05-07-2004 | #5


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Dutchman Mihel
эта функция берёт каждый элемент строки и сравнивает его с таким же элементом по счёту другой строки, если не равны, то +1
В конце выдаётся сумма, то есть количество расхождений
Например
$a="asdfg";
$b="asdegh";
тогда
levenshtein ($a,$b);
будет равно 2
С одной стороны, если количество элементов в строках одинаковое, то эта функция может помочь, например если установить, что в строке из 20 элементов может быть не более 4 ошибок
Но с другой стороны значение слов: например Большой луг и Большой лук совершенно две разные строки, но эта функция выдаст всего лишь 1

-------
Fortes fortuna adiuvat


Отправлено: 20:31, 05-07-2004 | #6


Пользователь


Сообщения: 58
Благодарности: 1

Профиль | Отправить PM | Цитировать


vadimiron


Цитата:
эта функция берёт каждый элемент строки и сравнивает его с таким же элементом по счёту другой строки, если не равны, то +1
у левенштайна другой алгоритм

Цитата:
The Levenshtein distance is defined as the minimal number of characters you have to replace, insert or delete to transform str1 into str2.
но сути это не меняет. Результат выходит ненадежный.
Можно конечно бить строку по пробелу и анализировать среднюю отношений дистанции по левенштайну к длине слова, но это имхо тоже очень шатко.

Отправлено: 23:03, 05-07-2004 | #7


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Цитата:
у левенштайна другой алгоритм
не а почему, помоему такой и есть, он смотрит сколько надо сделать замен или удалений, чтобы вторую строку перевести в первую

А любое сравнение двух слов будет шатким , ведь подобные алгоритмы строятся в основном на сравнении элементов, которые входят в данные строки, отсюда следует, что упускается смысл слов-это и естественно, ещё не создали такой системы, которая смогла бы оперировать смыслом слов

А вариант, который был Владом предложен, не подходит??? Я просто так не пробЫвал, не знаю

-------
Fortes fortuna adiuvat


Отправлено: 00:02, 06-07-2004 | #8


Пользователь


Сообщения: 58
Благодарности: 1

Профиль | Отправить PM | Цитировать


vadimiron

Цитата:
упускается смысл слов
есть возможность сравнивать строки с помощью словарей ispell/aspell, но здесь это совершенно не подходит потому, что строка может быть на английском, русском, шведском, норвежском, немецком и черт знает каком еще языке, более того может ничего не значить ни на одном из них (это все названия песен )

вариант Влада позволяет определить было полное совпадение или нет, т.е. сам факт неравенства, а не насколько строки расходятся

Я его уже использовал для первоначальной проверки. Если все совпало, зачем бодаться со всякими levenshtein'ами   ?

Отправлено: 13:04, 06-07-2004 | #9



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Сравнение строк в PHP

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Вывод строк из файла чата (рег. выражение?) | PHP D_Master Вебмастеру 5 13-04-2009 19:12
C/C++ - [решено] PHP. Fatal error: Function name must be a string in /var/www/index.php on line 15 Artem-Samsung Программирование и базы данных 6 29-11-2008 18:37
[решено] Apache 2.2.8 + Php 5.2.6 + MySQL 5.0.51b (win) - не работает php v0f41k Вебмастеру 4 11-05-2008 22:08
сравнение двух массивов строк в Си bool Программирование и базы данных 5 04-05-2005 17:04
Сложение строк на PHP Vlad Drakula Вебмастеру 1 08-06-2003 21:30




 
Переход