мне нужно только конкретные различия строк без вывода всего текста. Например:
$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 написал(а):
аааа.. это я не правильно вник в суть
ща глянем.

Спустя 8 минут, 11 секунд (28.10.2011 - 22:09) Игорь_Vasinsky написал(а):
Подробной инфы не нашёл, но вот накидал примитив:
может хоть как то поможет.
Вывод:
И честно говоря, мне кажеться что если text_diff - так же справился бы - если в нём предусмотрена такая возможность.
Просто мне не ясно как php отличит NO и WARRANTY от NO WARRANTY и т.п.
$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 withNO WARRANTY. a 3yr warranty. There are no refnds. refunds.
надо получить :
NO WARRANTY. a 3yr warranty.
refnds. refunds.
This product comes with
надо получить :
Спустя 3 минуты, 24 секунды (28.10.2011 - 22:46) Guest написал(а):
ну, всё ж просто модуль находит различия и выделяет, знатоки
Спустя 2 минуты, 13 секунд (28.10.2011 - 22:48) Игорь_Vasinsky написал(а):
Ну раз мы такие красноречивые - то с бюджета тебя снимаю. 900 руб.
p/s а ведь почти выложил
p/s а ведь почти выложил

Спустя 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 написал(а):

Цитата |
мне нужно только конкретные различия строк без вывода всего текста |
Что значить конкретные значения????
у тя шаблоны есть, которые ловить надо и шаблоны на которые заменять?
если да - то это впринципе алгоритм урезаеть.
Спустя 5 минут, 25 секунд (29.10.2011 - 01:59) rooor написал(а):
Игорь_Vasinsky
Я думаю, он имел ввиду вывести только различия, весь текст не нужен
Я думаю, он имел ввиду вывести только различия, весь текст не нужен

Спустя 1 час, 31 минута, 52 секунды (29.10.2011 - 03:30) Игорь_Vasinsky написал(а):
короче - модуль должен сравнить 2 текста и выдать отличия в этом виде....
Есть идейка... но пока даже не начал реализовывать...
Чтобы вычислить фраза это или слова->проверить : если между ближайшими элементами в массиве, в исх тексте нет ничего кроме пробела - то это фраза...
Есть идейка... но пока даже не начал реализовывать...
Чтобы вычислить фраза это или слова->проверить : если между ближайшими элементами в массиве, в исх тексте нет ничего кроме пробела - то это фраза...
Спустя 1 час, 53 минуты, 16 секунд (29.10.2011 - 05:24) Игорь_Vasinsky написал(а):
.... ну очень сырая и гов**кодная ф-я
максимальная длина словосочетания - 3 слова
Причём - если поменять текст или аргументы метами - касарезит :D
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 - в обеих строках.....
отсюда и часть конфуза
максимальная длина словосочетания - 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 написал(а):
Вообщем - это для ИИ

Спустя 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? Он работает, как надо, не надо ничего придумывать,нужно разобрать выход и сделать из этого:
Out:
This product comes withNO WARRANTY. a 3yr warranty. There are no refnds. refunds.
Это:
Out:
text1:NO WARRANTY
text2:a 3yr warranty
text1:refnds
text2:refunds
$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
Это:
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
Могли бы за это время заюзать регулярки и в кино сходить.
Удачи!
Могли бы за это время заюзать регулярки и в кино сходить.
Удачи!