0

我正在使用一个非结构化的纯文本文件。除了很多杂乱之外,该文件还包括文本块,这些文本块与其余文本之间用空行分隔。

如何使用 PHP 提取所有超过 100 个单词的文本块?

4

2 回答 2

2

根据文件的大小或可能给出不同的方法。

  1. 最简单的方法是,如果您正在处理足够小的文件,那么在内存中处理所有文件是一个可行的选择。然后您可以简单地使用正则表达式来拆分所有文本块,然后循环并获取所有大于 100 个单词的块。

  2. 我认为最安全的方法是打开文件并一次获取一行,直到到达空行。如果该块中的总字数超过 100,则存储该块。然后继续下一个块。

这是一个例子:

// Option 1
$contents = file_get_contents($filename);
$blocks = array();
// Split the contents by 2 line breaks in a row, plus any extra ones.
// i.e. 3 blank lines in a row will be treated the same as 1 blank line.
foreach(preg_split('/\n\n\n*/m', $contents) as $block) {
    if (str_word_count($block, 0) > 100)
        $blocks[] = $block;
}

// Option 2 - longer but does not store the contents in memory.
$blocks = array();

$fp = fopen($filename, 'r');

$block = '';
while($line = fgets($fp)) {
    if (!ctype_space($line)) { // depends on your meaning of an empty line
        $block .= $line;
    }
    elseif ($block != '') {
        if (str_word_count($block, 0) > 100)
            $blocks[] = $block;
        $block = '';
    }
}
if (str_word_count($block, 0) > 100)
    $blocks[] = $block;
$block = '';
于 2011-03-09T01:14:40.827 回答
0

使用正则表达式\n\n(用于两个换行符)。你可能会得到这样的结果:

$text_split = preg_split('\n\n', $text);
$good_split = array()
foreach ($text_split as $k => $v) {
    if (strlen($v) >= 100) {
       array_push($good_split, $v);
    }
 }

祝你好运。查找正则表达式,您可能想要与现实中的 \n\n 不同的东西。

于 2011-03-09T01:13:19.210 回答