синтаксический анализ некоторого текста без нумерации

#php

#php

Вопрос:

У меня есть текстовый файл, который содержит, например :

 1. I code
2. I eat
 

Я хочу разобрать только предложение в некоторую строку и посчитать каждое слово в строке и игнорировать число. Но в результате я хочу снова написать число. ИТАК, результат, который я хочу получить, это :

 1. I(1) code(4)
2. I(1) eat(3)
 

Я подумал. сначала я должен заменить число на »

 function checkFirstWord2($string) {
   $arr = explode(' ',trim($string));
   $arrpke= str_replace($arr[0],'', $arr);
   return $arrpke;
}
 

основная программа :

 $file  = "C:/AppServ/www/kbbi/cobaangka.txt";
$lines = file($file);
foreach($lines as $line_num => $line) {
   $first = checkFirstWord2($line);
   $count = count(explode('',$first);
   echo $first.'('.$count.')'; // but how to write again the number 1. and 2. ?
}
 

Я не знаю, как снова написать номер предложения: 1. и 2. ?
пожалуйста, помогите мне, спасибо 🙂

Комментарии:

1. Что такое 3 и 4 ? Длины слов?

2. @thg435 это количество букв в каждом слове

Ответ №1:

У вас была правильная идея, но некоторые из ваших функций были неправильными.

  1. Сначала разделите строку на части
  2. Сохраните номер строки на потом
  3. Пройдите по каждому из оставшихся слов и распечатайте длину слова

 $file  = "file.txt";
$lines = file($file);
foreach($lines as $line_num => $line) {
    $line_parts = explode(' ', $line); //split the line into parts
    $line_number    = array_shift($line_parts);//take out the first part of the line, the number

    echo $line_number . ' ';//add space so it doesn't get stcuck to other letters

    //loop through each of the line parts, and count the number of letters
    foreach ($line_parts as $part) {
        if (empty($part)) continue; //ignore spaces if any

        $part           = trim($part);//some cleanup for trailing spaces
        $lettercount    = strlen($part);
        echo "$part($lettercount) "; //print the output word by word
    }    
    echo "<br>";
 }
 

Это приведет к

 1. I(1) code(4)
2. I(1) eat(3) 
 

Примечание — Вам не нужно хранить номер строки отдельно, если вы знаете, что они всегда будут последовательно. Если они всегда находятся в последовательности, вы можете использовать индекс, доступный в цикле foreach.

Ответ №2:

 $file  = "C:/AppServ/www/kbbi/cobaangka.txt";
$lines = file($file);
foreach($lines as $line) {
   $tmp   = explode('. ', $line);
   $new_line = $tmp[0] . ". ";
   foreach(explode(' ', $tmp[1]) as $word)
   {
       $new_line .= $word . "(" . strlen($word) . ") ";
   }

   echo $new_line;
}
 

проверено

Ответ №3:

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

 $lines = explode("n", $string);
$der = preg_replace('/d. /', '', $lines);
 

И теперь print_r($der); возвращает:

 Array
(
    [0] => I code
    [1] => I eat
)
 

Объяснение

Сначала мы разбиваем предложения на их новые строки:

 explode("n", $string);
 

Это дает нам массив, который выглядит как:

 Array
(
    [0] => 1. I code
    [1] => 2. I eat
)
 

И теперь вы хотите удалить номера строк (я нажимаю, что это такое?) Из предложений. Для этого нам нужно использовать регулярное выражение : /d. /

 preg_replace('/d. /', '', $lines);
 

Ответ №4:

Попробуйте что-то вроде этого:

  • Сначала, конечно, получите файл
  • Затем, во-вторых, зациклите данные в цикле, разнесите каждую строку, затем выполните итерацию по этой разнесенной строке и получите длину каждого слова.
  • Конечно, наконец, соберите их вместе.

Примеры значений:

 1. I code
2. I eat
3. I sleep
4. You jump
5. They curse all
6. I saw
 

Рассмотрим этот пример:

 $final = '';
$file  = "cobaangka.txt";
$lines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($lines as $line) {
    $pieces = array_filter(explode(' ', $line)); // explode them
    $line_num = array_shift($pieces); // get the line number

    // each words, calculate the number of characters
    $complete = array_map(function($var){
        return $var.'('.strlen($var).') ';
    }, $pieces);

    // and finally, put them back together
    $final .= $line_num .' '.implode($complete) . "n";
}

echo '<pre>';
print_r($final);
 

$final должно дать что-то вроде:

 1. I(1) code(4) 
2. I(1) eat(3) 
3. I(1) sleep(5) 
4. You(3) jump(4) 
5. They(4) curse(5) all(3) 
6. I(1) saw(3)