|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Сравнение строк в PHP |
|
Сравнение строк в PHP
|
Пользователь Сообщения: 58 |
Нужно проверить строки на идентичность,
при этом учесть что при вводе могли быть допущены ошибки. Например: "Cadaveric Incubator Of Endoparasites" и "Cadaveric inkubator Of endo-parasites" также, как "Ein Tröpfchen Voller Glück" и "Ein Tropfchen Voller Gluck" должны быть признаны идентичными. Есть мысли как к этому подступиться? Добавлено: Цитата:
|
||
Отправлено: 00:27, 03-07-2004 |
Старожил Сообщения: 236
|
Профиль | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать Многие из этих проблем можно решить с помощью регулярных выражений
Немного покапавшись в мануле нашёл ещё следущие интересные функции которые могут помочь при сравнение двух строк: levenshtein similar_text strcspn |
------- Отправлено: 16:12, 03-07-2004 | #3 |
Ночной странник Сообщения: 4050
|
Профиль | Сайт | Отправить PM | Цитировать Dutchman Mihel
все очень просто: $a = ' "walk" the <b>dog</b> now'; $b = ' "walk" the <b>dog</b> now'; $c = html_entity_decode($a); if( strcasecmp($b, $c) == 0 ) print 'строки совпадают'; else print 'строки строки не совпадают'; FADE прошу: 1) внимательно читать вопрос! 2) хоте бы проверять написанный вами код! приведенный вами код не правильный сразу по трем причинам: 1) вызабыли переменную b, т.е. вы срасниваете a с a 2) если делать сравнивание то лучьше: 3) этот код проверяет совершенно не так, как просил Dutchman Mihel FADE в селедующий раз прошу быть внимательнее или я вынесу вам предупреждение!!! |
------- Отправлено: 22:34, 03-07-2004 | #4 |
Пользователь Сообщения: 58
|
Профиль | Отправить PM | Цитировать All
Похоже нужно пояснение к вопросу Речь идет о поиске в хтмл файле по подстроке, т.е. нет правильной строки и неправильной. Для случая полного соответствия я уже использовал strcasecmp - все пучком, работает. Нужно чтобы строки сопоставились как идентичные даже при НЕБОЛЬШОМ различии между ними (т.е. при наличии опечаток либо в тексте, либо в самой подстроке). Хорошо то, что есть сигнатура по которой я могу искать нужный мне текст. Текст внутри этого font тега произвольной длины. Плохо то, что нужного текста в файле может вообще не быть vadimiron Я уже смотрел в сторону levenshtein, но как ее здесь применить? Функция считает кол-во операций для преобразования одной строки в другую. Можно эмпирически определить предельно допустимое кол-во преобразований. Для строки в 255 символов 8 операций выглядят не очень критичными. А для строки из 4 символов? Добавлено: Забыл сказать этих штук в файле может быть от 1 и до чёрта |
|
Отправлено: 12:30, 05-07-2004 | #5 |
![]() Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать Dutchman Mihel
эта функция берёт каждый элемент строки и сравнивает его с таким же элементом по счёту другой строки, если не равны, то +1 В конце выдаётся сумма, то есть количество расхождений Например $a="asdfg"; $b="asdegh"; тогда levenshtein ($a,$b); будет равно 2 С одной стороны, если количество элементов в строках одинаковое, то эта функция может помочь, например если установить, что в строке из 20 элементов может быть не более 4 ошибок Но с другой стороны значение слов: например Большой луг и Большой лук совершенно две разные строки, но эта функция выдаст всего лишь 1 |
------- Отправлено: 20:31, 05-07-2004 | #6 |
Пользователь Сообщения: 58
|
Профиль | Отправить PM | Цитировать vadimiron
Цитата:
Цитата:
Можно конечно бить строку по пробелу и анализировать среднюю отношений дистанции по левенштайну к длине слова, но это имхо тоже очень шатко. |
||
Отправлено: 23:03, 05-07-2004 | #7 |
![]() Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать Цитата:
А любое сравнение двух слов будет шатким ![]() А вариант, который был Владом предложен, не подходит??? Я просто так не пробЫвал, не знаю |
|
------- Отправлено: 00:02, 06-07-2004 | #8 |
Пользователь Сообщения: 58
|
Профиль | Отправить PM | Цитировать vadimiron
Цитата:
![]() вариант Влада позволяет определить было полное совпадение или нет, т.е. сам факт неравенства, а не насколько строки расходятся Я его уже использовал для первоначальной проверки. Если все совпало, зачем бодаться со всякими levenshtein'ами ![]() |
|
Отправлено: 13:04, 06-07-2004 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Вывод строк из файла чата (рег. выражение?) | 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 |
|