[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: text_diff
zebulun
подскажите, а то моих мозгов не хватает, кто знаком с модулем text_diff от PEAR,
мне нужно только конкретные различия строк без вывода всего текста. Например:


$text1='This product comes with NO WARRANTY. There are no refnds.';
$text2='This product comes with a 3yr warranty. There are no refunds.';

на выходе надо, что-то типа:
$text1:'NO WARRANTY'
$text2:'a 3yr warranty'
$text1:'refnds'
$text2:'refunds'



Спустя 4 минуты, 47 секунд (28.10.2011 - 21:54) Игорь_Vasinsky написал(а):
ну как это?
Цитата
на выходе надо, что-то типа:


так чтоли?

$text1='This product comes with NO WARRANTY. There are no refnds.';
$text2='This product comes with a 3yr warranty. There are no refunds.'

preg_match_all("#^This product comes with ([^\.].*)\. There are no (.*)\.$#ius", $text1, $out);

echo '<pre>' . print_r($out, 1) . '</pre>';

Спустя 5 минут, 28 секунд (28.10.2011 - 21:59) Guest написал(а):
Я, наверное не правильно выразился, мне надо сравнить две строки с помощью text_diff и получить различия, как в примере выше

Спустя 1 минута, 43 секунды (28.10.2011 - 22:01) Игорь_Vasinsky написал(а):
аааа.. это я не правильно вник в суть wink.gif ща глянем.

Спустя 8 минут, 11 секунд (28.10.2011 - 22:09) Игорь_Vasinsky написал(а):
Подробной инфы не нашёл, но вот накидал примитив:

$text1='This product comes with NO WARRANTY. There are no refnds.';
$text2='This product comes with a 3yr warranty. There are no refunds.';

$text1 = explode(" ", $text1);
$text2 = explode(" ", $text2);

$diff1 = array_diff($text1, $text2);
$diff2 = array_diff($text2, $text1);

echo '<pre>' . print_r($diff1, 1) . '</pre>';
echo '<pre>' . print_r($diff2, 1) . '</pre>';



может хоть как то поможет.

Вывод:

Array
(
[4] => NO
[5] => WARRANTY.
[9] => refnds.
)
Array
(
[4] => a
[5] => 3yr
[6] => warranty.
[10] => refunds.
)


И честно говоря, мне кажеться что если text_diff - так же справился бы - если в нём предусмотрена такая возможность.

Просто мне не ясно как php отличит NO и WARRANTY от NO WARRANTY и т.п.

Спустя 29 минут, 4 секунды (28.10.2011 - 22:38) Winston написал(а):
Цитата (Игорь_Vasinsky @ 28.10.2011 - 22:09)
Просто мне не ясно как php отличит NO и WARRANTY от NO WARRANTY и т.п.

По коду символа, если есть символы других языков.

Спустя 2 минуты, 46 секунд (28.10.2011 - 22:41) Игорь_Vasinsky написал(а):
Да там любые слова или словосочетания могут быть

Спустя 1 минута, 17 секунд (28.10.2011 - 22:42) Guest написал(а):
функция выдает такой result:
This product comes with NO WARRANTY. a 3yr warranty. There are no refnds. refunds.
надо получить :
NO WARRANTY. a 3yr warranty.
refnds. refunds.

Спустя 3 минуты, 24 секунды (28.10.2011 - 22:46) Guest написал(а):
ну, всё ж просто модуль находит различия и выделяет, знатоки

Спустя 2 минуты, 13 секунд (28.10.2011 - 22:48) Игорь_Vasinsky написал(а):
Ну раз мы такие красноречивые - то с бюджета тебя снимаю. 900 руб.

p/s а ведь почти выложил biggrin.gif

Спустя 1 минута, 4 секунды (28.10.2011 - 22:49) Guest написал(а):
SORRY! всё ж просто модуль находит различия и выделяет, КАК ПОЛУЧИТЬ ТОЛЬКО ТО, ЧТО ВЫДЕЛЯЕТСЯ, ну же знатоки, помогите, как это найти!

Спустя 2 часа, 34 минуты, 25 секунд (29.10.2011 - 01:24) walerus написал(а):
В модуле своем который выделяет цветами посмотри, там и заноси в свой "нужный" массив, в чем трудности то ?

Спустя 29 минут, 33 секунды (29.10.2011 - 01:53) Игорь_Vasinsky написал(а):
ohmy.gif
Цитата
мне нужно только конкретные различия строк без вывода всего текста


Что значить конкретные значения????

у тя шаблоны есть, которые ловить надо и шаблоны на которые заменять?

если да - то это впринципе алгоритм урезаеть.

Спустя 5 минут, 25 секунд (29.10.2011 - 01:59) rooor написал(а):
Игорь_Vasinsky
Я думаю, он имел ввиду вывести только различия, весь текст не нужен unsure.gif

Спустя 1 час, 31 минута, 52 секунды (29.10.2011 - 03:30) Игорь_Vasinsky написал(а):
короче - модуль должен сравнить 2 текста и выдать отличия в этом виде....

Есть идейка... но пока даже не начал реализовывать...

Чтобы вычислить фраза это или слова->проверить : если между ближайшими элементами в массиве, в исх тексте нет ничего кроме пробела - то это фраза...

Спустя 1 час, 53 минуты, 16 секунд (29.10.2011 - 05:24) Игорь_Vasinsky написал(а):
.... ну очень сырая и гов**кодная ф-я
максимальная длина словосочетания - 3 слова
Причём - если поменять текст или аргументы метами - касарезит :D

Свернутый текст
$text1='This any product comes with NO WARRANTY. There are no refnds vasinsky1 test;
$text2='
This product comes with a 3yr warranty. There are no refunds vasinsky1;

function test($text1, $text2)
{
$textArr1 = explode(" ", $text1);
$textArr2 = explode(" ", $text2);

$diff1 = array_values(array_diff($textArr1, $textArr2));
$diff2 = array_values(array_diff($textArr2, $textArr1));

$matches1 = array();

for($i=0; $i<count($diff1); $i++)
{
$j = $i+1;
$k = $i+2;

$words = $diff1[$i]." ".$diff1[$j];
$words3 = $diff1[$i]." ".$diff1[$j]." ".$diff1[$k];

if(preg_match("#".$words3."#ius", $text1))
$matches1[] = $diff1[$i]." ".$diff1[$j]." ".$diff1[$k];

else
{
if(preg_match("#".$words."#ius", $text1))
$matches1[] = $diff1[$i]." ".$diff1[$j];
else
$matches1[] = $diff1[$i];
}



if($j == count($diff1) - 2)
break;
}

foreach($matches1 as $word1)
$arr1 = explode(" ", $word1);

$matches = array_merge($matches1, $diff1);

return array_diff($matches, $diff1);
}

echo '<pre>' . print_r(test($text1, $text2), 1) . '</pre>';


Array
(
[0] => any
[1] => NO WARRANTY.
[2] => WARRANTY. //Проскачила.....
[3] => refnds vasinsky1 test.
)


This any product comes with NO WARRANTY. There are no refnds vasinsky1 test.
This product comes with a 3yr warranty. There are no refunds vasinsky1.

вообщем и работоспособность - <30% :ph34r:
зато сон как рукой сняло :D


кстати array_diff() выдал

Array
(
[0] => any
[1] => NO
[2] => WARRANTY.
[3] => refnds
[4] => vasinsky1
[5] => test.
)

хотя vasinsky1 - в обеих строках.....
отсюда и часть конфуза

Спустя 5 минут, 15 секунд (29.10.2011 - 05:29) Игорь_Vasinsky написал(а):
Вообщем - это для ИИ wink.gif

Спустя 2 часа, 47 минут, 18 секунд (29.10.2011 - 08:16) Guest написал(а):
Игорь_Vasinsky, модуль рабочий уже есть, я просто не знаю как его распарсить, чтобы остались одни отличия.

Спустя 18 минут, 16 секунд (29.10.2011 - 08:35) kirik написал(а):
Тут решалась подобная задача.

Спустя 1 час, 12 минут, 43 секунды (29.10.2011 - 09:47) Guest написал(а):
неужели, никто не может подсказать именно по модулю Text_diff пакета PEAR? Он работает, как надо, не надо ничего придумывать,нужно разобрать выход и сделать из этого:
$text1='This product comes with NO WARRANTY. There are no refnds.';
$text2='This product comes with a 3yr warranty. There are no refunds.';

Out:
This product comes with NO WARRANTY. a 3yr warranty. There are no refnds. refunds.
Это:
Out:
text1:NO WARRANTY
text2:a 3yr warranty
text1:refnds
text2:refunds

Спустя 13 минут, 44 секунды (29.10.2011 - 10:01) kirik написал(а):
Guest
Можно распарсить регулярками выдачу.

Спустя 10 минут, 31 секунда (29.10.2011 - 10:11) Guest написал(а):
можно, а не проще поковырятся в классах Text_diff, и найти как формируется выход, и выводить различия, без всего текста, именно это я пытаюсь сделать, но не могу разобраться, в каком месте формируются различия.

Спустя 5 минут, 22 секунды (29.10.2011 - 10:17) kirik написал(а):
Guest
Могли бы за это время заюзать регулярки и в кино сходить.
Удачи!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.