如何从纯文本文件中提取文本块?

时间:2011-03-09 00:42:33

标签: php plaintext

我正在使用非结构化的纯文本文件。除了大量杂乱之外,该文件还包含通过空行与文本其余部分分开的文本块。

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

2 个答案:

答案 0 :(得分:2)

取决于文件的大小或可能提供不同的方法。

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

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

  3. 以下是一个例子:

    // 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 = '';
    

答案 1 :(得分: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不同的东西。