構造化されていないプレーン テキスト ファイルを使用しています。多くの乱雑さに加えて、ファイルには空の行によって残りのテキストから分離されたテキストのブロックが含まれています。
PHP を使用して、100 語を超えるテキストのすべてのブロックを抽出するにはどうすればよいですか?
ファイルの大きさに応じて、さまざまなアプローチが可能です。
最も単純なアプローチは、メモリ内ですべてを処理することが可能な十分に小さいファイルを扱っている場合です。次に、正規表現を使用してテキストのすべてのチャンクを分割し、ループして 100 語を超えるすべてのチャンクを取得します。
最も安全だと思うのは、ファイルを開いて、空の行に到達するまで一度に 1 行ずつフェッチすることです。そのブロック内の単語の合計が 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
(2つの改行の場合)のような正規表現を使用します。あなたはおそらく次のようなものになるでしょう:
$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とは異なるものが必要になる場合があります。