6

テキストファイルから文を抽出する正規表現が必要です。テキストの例:

たとえば、2004年末に発生したアジアの津波災害について考えてみましょう。Googleニュース(http://news.google.com)に問い合わせると、このイベントに関する80,000件を超えるオンラインニュース記事が1か月(1月17日)に返されました。 2005年2月17日まで)。氏による情報 カハナ。

これが私のコードです:

$re = '/(?<=[.!?]|[.!?][\'"])\s+/';
$sentences = preg_split($re, $text, -1, PREG_SPLIT_NO_EMPTY);

しかし、最後の文はまだ分割されてinformation by mr.おり、Kahana. それを解決する方法は?ありがとうございました :)

4

1 に答える 1

7

正規表現ではこれを行うことはできません

言語としての英語は、適切に配置されたフォーマット規則に適合しません。そのため、正規表現は、求めている目的を達成するのに適していません。あなたが本当に探しているのは、自然言語プロセッサのようなものです。

これがプログラムにとって重要でない限り、代わりに次のことを決定することをお勧めします。

  • 許容できるエラーのレベルはどれくらいですか? あなたがすることは何も完璧ではありません。しかし、それが機能する場合、80%は大丈夫ですか?90%?99%?これはあなた/あなたのクライアントにとってどれほど重要ですか?
  • テキストはどこから来ていますか?たとえば、教科書は、人々のTwitterフィードとは異なる方法で書かれる可能性があります。使用している実際のテキストに表示されている内容に基づいて、調査を行い、例外を作成できます。
  • 私はテキストで何をしていますか?キーワードのようなものにインデックスを付けるだけの場合は、文が正しく分割されているかどうかは(それほど)重要ではありません。この特定の目的に適した出力を取得するためにプログラムを調整することがすべてです。

エラー率をできるだけ下げるために試行錯誤をすることをお勧めします。大量のテキストに対してプログラムを実行し、許容可能なエラー率が得られるまで例外を追加し続けます。ただし、数十を超えるルールが必要な場合は、おそらく問題を再考する必要があります。

要するに、英語はファンキーなので、PHPと正規表現はこれを目的としていません。したがって、例外を追加してエラー率を小さくするか、ポイントを完全に再考してください。

于 2012-10-15T03:31:28.573 に答える