2

テキスト内の質問を検出するには、正規表現が必要です。

入力例:

これを行う方法を教えてください...またはそれを正しくする方法!等々....

出力が必要です:

  1. これを行う方法
  2. それを正しくする方法

今私はこれを使用します: (?<q>(how to|how match|how many).*)(\s|\.|;|!|\?|( \-)|(\- )|‾|:|…|_|\||@|~|…|–|—|¯|»|•|●|{|}|\(|\)|\\|\]|\[|>|<|→|'|""|`|$)しかし動作しません

質問する方法だけが必要です

4

3 に答える 3

5

達成しようとしているタスクは、正規表現が適しているものとは異なるカテゴリに分類されます。

テキストから任意の質問を抽出するという問題を解決するには、いくつかの適切な正規表現だけでなく、それ以上のものが必要です。優れた自然言語処理ツールキットの検討を開始する必要があります。そしておそらく、最初に品詞のタグ付けを行います。次に、構文と文の解析を行ってから、「これは文ですか?」という質問に答える必要があります。NLP パイプラインが識別した各文を調べることによって。

この知識があれば、少なくとも、達成したいタスクはかなり難しく、不可能ではありませんが、良いパフォーマンスを得るには多くの微調整が必​​要になることを理解する必要があります (通常はAccuracy および Precision メトリックで測定されます)。どちらでも 100% に近い結果が得られる可能性はほとんどありませんが、優れた PoS タガーと優れたセンテンス パーサーを使用すれば、まともな結果が得られるはずです。

編集

質問に対する最近の編集に照らして、正規表現と手書きのルールでいくつかの基本的なカバレッジを得ることができるかもしれませんが、それでも多くの複雑なケースを区別することはできません. 自然言語処理ツールキット ルートは、より一般的なソリューションとして依然として好まれています。

自然言語に一致する特効薬の正規表現を考え出すのに時間をかけすぎないでください。自然言語は規則的ではないので、うまくいきません! 一部のキーワードを識別するために正規表現を使用することは問題ありませんが、それ以上は単純な手書きのルールを使用し、優れた自然言語パイプラインのルーでトークン化する方がよいでしょう..

アップデート

このタスクに真剣に取り組んでいる場合は、sharpnlp.codeplex.comを出発点としてご覧ください。C# を使用する必要がない場合、人気のあるものとしてNLTKを思い浮かべる NLP ツールキットは他にもあります。2 番目のステップとして、NLP の入門書を手に入れてください。主題は広大で本当にクールです。私が多くのことを学んだ素晴らしい本は、Jurafski と Martin によるSpeech and Language Processingです。

そして、最終的な考えとして、これが私が最低限行うことです:

  1. 正規化を実行します(不要なシンボルを削除し、重複します)
  2. 基本的な文の分割を試みます (句読点で分割: . , ; ? !)
  3. すべての文字を小文字に変換する
  4. すべての番号をタグに置き換えます (つまり )
  5. 正規化された各文に対して品詞のタグ付けを実行します
  6. 次に、すべての「ハウツー」の質問がテキストのどこにあるかを判断するために進むことができます。
  7. 場所を取得したら、それらを元のテキストにマッピングし、そこから元の「ハウツー」の質問を抽出できるはずです

幸運を!

于 2012-12-05T21:13:04.003 に答える
0

すべての質問を解析する方法を教えることはできません。これにより、解析可能ないくつかの質問が得られますが、いくつかの質問は見逃されます。質問ではない他の文が、質問ではないときに選択される場合があります。それは大丈夫ですか?

([^\.?!]*(?:how|what|where|when|why)[^\.?!]*[\.?!]|[^\.?!]*\?)

上記のテキストに対してそれを実行すると、以下が返されます。

すべての質問を解析する方法を教えることはできません。質問ではない他の文が、質問ではないときに選択される可能性があります。よろしいですか? *

于 2012-12-05T21:34:23.093 に答える
0

多分これが役立つかもしれません。疑問符で終わる文である直接疑問文を検出できます。

@"[^\.!]*?(?!\?)"

これは、疑問符が見つかるまで、ドット、疑問符、感嘆符を除くすべての文字に一致します (貪欲な * 量指定子と疑問符の否定先読みに注意してください)。

于 2012-12-05T21:12:10.157 に答える