Стоит задача: Сравнение в схожести текстов
1. Текст лежит в БД
2. Текст приходит POST запросом
Код функции
function compare($vJobID,$vJobDescription,$vJobCheckingData)
{
$query = mysql_query("SELECT vJobDescription,vJobCheckingData FROM dados WHERE vJobID=$vJobID");
if(!$query)
{
exit(mysql_error());
}
$db = mysql_fetch_array($query);
if($vJobDescription == $db['vJobDescription'] and $vJobCheckingData == $db['vJobCheckingData'])
{
echo "Всё ничтяк продолжаем работу )<br />";
}else{
$reset="UPDATE `dados` SET `vJobEnable`='$vJobEnable' WHERE `vJobID`=$vJobID";
$result = mysql_query($reset) or die(mysql_error());
echo "Задание №$vJobID отключено (<br />";
}
}
Код работает на примере 1й строки, если необходимо сравнивать 2 и более строк код срабатывает не правильно, в чем может быть причина?
Спустя 55 минут, 36 секунд (3.10.2012 - 19:34) ssvih написал(а):
Люди подскажите что нибудь в какую сторону рыть?
Понятно одно что проверка не удается если количество строк превышает 1
Понятно одно что проверка не удается если количество строк превышает 1
Спустя 11 минут, 27 секунд (3.10.2012 - 19:45) T1grOK написал(а):
if(!$query)
{
exit(mysql_error());
}
Это я бы заменил на or die(mysql_error()).
А по поводу сравнения. Несколько инструментов Вам в руки echo, print_r, var_dump. Выводим, проверяем, пока не наткнемся на причину.
Спустя 14 минут, 33 секунды (3.10.2012 - 20:00) inpost написал(а):
Что за текст, что за строки? Покажи пример на 1 строку, и на 2 строки, что подразумеваешь... ничего не понял.
Спустя 19 минут, 36 секунд (3.10.2012 - 20:19) ssvih написал(а):
Пример строк для проверки
//
Проверка с пробелами
И проверка с переносом 1
А так же с переносом 2
Ну и конечно же контрольная проверка с переносом №2
//
Это я высылая скрипту и это же лежит в БД
В идеи создание программы - парсер которые смотрит html страницу копирует от туда текст и высылает скрипту на проверку, если текст сходится то все нормально если нет то производим некоторые действия, пока не удалось реализовать первый этап сравнение текстов!
//
Проверка с пробелами
И проверка с переносом 1
А так же с переносом 2
Ну и конечно же контрольная проверка с переносом №2
//
Это я высылая скрипту и это же лежит в БД
В идеи создание программы - парсер которые смотрит html страницу копирует от туда текст и высылает скрипту на проверку, если текст сходится то все нормально если нет то производим некоторые действия, пока не удалось реализовать первый этап сравнение текстов!
Спустя 1 час, 56 минут, 57 секунд (3.10.2012 - 22:16) ssvih написал(а):
Нашел решения сравнения текста но немного не тем путем как думал, ниже код может кому понадобится, он на моём примере переделаете под себя!
//Тестовый код проверки
function get_shingle($text,$n=3) {
$shingles = array();
$text = clean_text($text);
$elements = explode(" ",$text);
for ($i=0;$i<(count($elements)-$n+1);$i++) {
$shingle = '';
for ($j=0;$j<$n;$j++){
$shingle .= mb_strtolower(trim($elements[$i+$j]))." ";
}
if(strlen(trim($shingle)))
$shingles[$i] = trim($shingle, ' -');
}
return $shingles;
}
function clean_text($text) {
$new_text = eregi_replace("[\,|\.|\'|\"|\\|\/]","",$text);
$new_text = eregi_replace("[\n|\t]"," ",$new_text);
$new_text = preg_replace('/(\s\s+)/', ' ', trim($new_text));
return $new_text;
}
function check_it($first, $second) {
if (!$first || !$second) {
echo "Отсутствуют оба или один из текстов!";
return 0;
}
for ($i=1;$i<2;$i++) {
$first_shingles = array_unique(get_shingle($first,$i));
$second_shingles = array_unique(get_shingle($second,$i));
$intersect = array_intersect($first_shingles,$second_shingles);
$merge = array_unique(array_merge($first_shingles,$second_shingles));
if(count($intersect) == count($merge))
{
echo "Всё ничтяк продолжаем работу )<br />";
}else{
$vJobID = $_POST['vJobID'];
$reset="UPDATE `dados` SET `vJobEnable`='0' WHERE `vJobID`=$vJobID";
$result = mysql_query($reset) or die(mysql_error());
echo "Задание №$vJobID отключено (<br />";
echo "".$_POST['vJobID']."<br />";
echo "".$_POST['vJobDescription']."<br />";
echo "".$_POST['vJobCheckingData']."<br />";
echo "".$second."<br />";
}
//$intersect = array_intersect($first_shingles,$second_shingles);
//$merge = array_unique(array_merge($first_shingles,$second_shingles));
// $diff = (count($intersect)/count($merge))/0.01;
// echo "Количество слов в шингле - $i. Процент схожести - ".round($diff, 2)."%<br />";
}
}
//Конец кода проверки