4

テキストと埋め込みの html タグを含むかなり大きな段落 (5000 ~ 6000 語) がいくつかあります。この大きな段落を 1500 語のチャンクに分割したい (その中の html マークアップを無視する)。つまり、1500 には実際の単語のみを含め、マークアップ語は含めないでください。 関数を使用するstrip_tagsと、単語数を数えることができます (html マークアップを無視します) が、1500 単語のチャンク (まだ html マークアップを含む) に分割する方法がわかりません。例えば

This is <b> a </b> paragraph which <a href="#"> has some </a> some text to be broken in <h1> 5 words </h1>.

結果は

1 = This is <b> a </b> paragraph which
2 = <a href="#"> has some </a> some text to
3 = be broken in <h1> 5 words </h1>. 
4

3 に答える 3

2

爆発()関数を賢く使用することを考えてください。または、より長いですが、単語またはタグにすべてのテキストが含まれる正規表現です。html タグ内の要素は、壊れないエンティティと見なす必要があります。たとえば、大きな段落を次のエンティティの配列に分割する関数を作成できます。

$data = array(
  array( "count" => 2, "text" => "This is "),
  array( "count" => 1, "text" => "<b> a </b>"),
  array( "count" => 2, "text" => " paragraph which"),
  ...
  etc.
);

次に、$data 配列から小さな段落を作成するループを作成する必要があります。

また、段落を正確に 1500 語の長さにできない場合もあります。HTMLタグを分離するべきではないため、多かれ少なかれ可能性があります。

于 2012-12-18T14:59:15.197 に答える
1

有効なマークアップを保証したい場合は、html を解析する必要があると思います。その場合、この質問は非常に役立つ出発点となるはずです。

于 2012-12-18T16:34:29.333 に答える
0

XML DOM パーサーまたはHTML DOM パーサーを使用します。

  • すべてのノードを反復する
  • ノードごとに単語を数える
  • words超える場合N
    • 親タイプの新しいノードを作成
    • 親の後に兄弟として挿入
    • 現在および後続のすべての兄弟をそれに移動します。
  • 次の要素に移動
于 2012-12-18T16:54:03.493 に答える