我正在使用非结构化的纯文本文件。除了大量杂乱之外,该文件还包含通过空行与文本其余部分分开的文本块。
如何使用PHP提取超过100个单词的所有文本块?
答案 0 :(得分:2)
取决于文件的大小或可能提供不同的方法。
最简单的方法是,如果你处理足够小的文件,在内存中处理它是一个可行的选择。然后你可以简单地使用正则表达式来分割所有文本块,然后遍历并获得大于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 = '';
答案 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不同的东西。