comp_ling
Новичок
баги добавления xml-разметки при помощи preg_replace
Добрый вечер!
Задача такова: найт все однокореные слова в тексте и добавить к ним xml-разметку типа "<w id='' n=''>$i</w> ", где $i - нжное слово.
Проблема: создание лишних записей по количеству найденных совпадений, вызванное скорее всего неверным использованием preg_replace. То есть: если слово "царь" встретится 2 раза на выход получаю "<w id='' n=''> <w id='' n=''>царь</w> </w>" а надо "<w id='' n=''>царь</w>".
Мой код:
Подозреваю, чт можно использовать srt_replace, но сама не дотопала как
Добрый вечер!
Задача такова: найт все однокореные слова в тексте и добавить к ним xml-разметку типа "<w id='' n=''>$i</w> ", где $i - нжное слово.
Проблема: создание лишних записей по количеству найденных совпадений, вызванное скорее всего неверным использованием preg_replace. То есть: если слово "царь" встретится 2 раза на выход получаю "<w id='' n=''> <w id='' n=''>царь</w> </w>" а надо "<w id='' n=''>царь</w>".
Мой код:
PHP:
$all_text = "царь прав, царь должен царю.";
$arr_all = array();
$arr_all = preg_split("/[ |\t]+/",$all_text);
// ищу слова по псевдооснове (сочетанию букв)
$rez = preg_grep('/царь/i',$arr_all);
foreach ($rez as $i)
{
$pattern[]="/$i/";
$replacement[] = "<w id='' n=''>$i</w> ";
};
reset($rez);
$arr_plus = preg_replace($pattern,$replacement,$rez);
print(htmlspecialchars(print_r($arr_plus,true)));
?>
Даже близко. Во-первых ты столкнешься с необходимостью ввода корней слов вручную, во-вторых замен (вызовов preg_replace) будет очень много, и они могут пересекаться. В-третьих если ты захочешь (а ты хочешь) вставлять в параметры тега w что-то кроме статичных строк, то это не представится возможным.