Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: разделение текста на строки и слова
 
 автор: smust   (28.11.2009 в 18:10)   письмо автору
 
 

Как сделать из текста массив строк, а строки потом массивом слов и символов?

  Ответить  
 
 автор: ....   (28.11.2009 в 20:03)
 
   для: smust   (28.11.2009 в 18:10)
 

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

  Ответить  
 
 автор: smust   (28.11.2009 в 21:03)   письмо автору
 
   для: ....   (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-формат)

Второе делается в цикле с каждой из строк
, но не очень понятно что имеется ввиду под словом "слова"

  Ответить  
 
 автор: smust   (29.11.2009 в 09:20)   письмо автору
 
   для: ....   (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], -1PREG_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

Чтобы сделать например как во втором случае выражение и чтобы работало с многими (из частоупотребляемых) кодировками, придётся заметно сделать ещё длиннее такое выражение

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования