我正在使用一个非结构化的纯文本文件。除了很多杂乱之外,该文件还包括文本块,这些文本块与其余文本之间用空行分隔。
如何使用 PHP 提取所有超过 100 个单词的文本块?
根据文件的大小或可能给出不同的方法。
最简单的方法是,如果您正在处理足够小的文件,那么在内存中处理所有文件是一个可行的选择。然后您可以简单地使用正则表达式来拆分所有文本块,然后循环并获取所有大于 100 个单词的块。
我认为最安全的方法是打开文件并一次获取一行,直到到达空行。如果该块中的总字数超过 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 = '';
使用正则表达式\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 不同的东西。