|
|
|
| Как сделать из текста массив строк, а строки потом массивом слов и символов? | |
|
|
|
|
автор: .... (28.11.2009 в 20:03) |
|
|
для: smust
(28.11.2009 в 18:10)
| | нереальная какая-то задача.
главное непонятно для чего может быть нужно делать неизвестносколькимерный массив | |
|
|
|
|
|
|
|
для: ....
(28.11.2009 в 20:03)
| | Понадобилось вот. | |
|
|
|
|
автор: .... (28.11.2009 в 21:38) |
|
|
для: smust
(28.11.2009 в 21:03)
| | Вот как вы себе представляете что должно быть в итоге?
например было две строки
"строка 1 с например юникс-переводом строки
строка 2. тоже с переносом
"
Полученный массив после первого преобразования
$txt= array(
[0] = строка 1 с например юникс-переводом строки
[1] = строка 2. тоже с переносом
)
после второго преобразования
$txt= array(
[0] = array(
[0] =строка
[1] =1
[2] =с
..............
[1] = array(
[0] =строка
[1] =2
.................
)
после третьего преобразования
$txt= array(
[0] = array(
[0] = array('с', 'т', 'р', 'о', 'к', 'а')
[1] =array(1)
[2] =array('с')
..............
Тоесть интересуют только буквы, цифры, нижние прочерки и возможно даже апострофы которые тоже иногда бывают символами слова, а остальное совсем не нужно ?
Или для чего вообще может понадобиться такое преобразование ?
Если чисто для изучения возможностей
, спрашивайте что не понимаете как можно сделать по пунктам :)
первое преобазование самое простое
$txt=split("\r?\n", $txt); #если переносы строк \n или \r\n , но не \n\r (MAC-формат)
Второе делается в цикле с каждой из строк
, но не очень понятно что имеется ввиду под словом "слова" | |
|
|
|
|
|
|
|
для: ....
(28.11.2009 в 21:38)
| | необходимо делать статистический анализ текста. тексты не очень большие, не более 4000.
Их нужно хранить в виде который позволит применить разные варианты анализа и также позволит вывести фрагмент в начальном виде. Нужна двумерная матрица в ячейках слова или знаки препинания
получается даже что массив будет из елементов у каждого еще по признаку - слово или знак | |
|
|
|
|
автор: .... (29.11.2009 в 16:04) |
|
|
для: smust
(29.11.2009 в 09:20)
| |
<pre><?php
$txt = <<<TXT
Д'артаньян зашёл в МакДоналд's
, чтобы купить 2 свежих мануала к Program_v5.2-dev ...
Там-то его уже в 2001-й раз и поджидал Л.Н., Толстой.
TXT
;
var_dump($arr = split("\r?\n", $txt));
?><hr><hr><?php
for($i=0; $i<count($arr); $i++)
$arr[$i] = preg_split('#\b#', $arr[$i], -1, PREG_SPLIT_NO_EMPTY);
var_dump($arr);
?><hr>
или <hr><?php
$arr = array();
function cb_f($m) {
global $arr;
static $index = 0;
//// var_dump($m);
if (isset($m[1])) {
$arr[++$index] = array();
}
else {
$arr[$index][] = $m[0];
}
return $m[0]; // замены в тексте нет
}
$r ='/\G(?:
([\r\n])(?:(?!\1)[\r\n])? # перенос строки
|
[^\w\r\n]+ # между слов
|
\w+(?:[\.\-\']\w+)* # слова или что-то начинающееся с \w
)/x';
preg_replace_callback($r, 'cb_f', $txt);
var_dump($arr);
?>
|
В обоих случаях такое разделение текста на части основано на том что кодировка однобайтная
, в системе будет локаль соответствующей кодировки текста
Вобщем из-за \w и \b
Чтобы сделать например как во втором случае выражение и чтобы работало с многими (из частоупотребляемых) кодировками, придётся заметно сделать ещё длиннее такое выражение | |
|
|
|