0

クエリを作成してデータを返すために、自然言語フレーズのキー フレーズを引き出す RegEx パターンを作成しようとしています。文から主な主題を効率的に引き出そうとする問題に遭遇するまで、これまでのところすべてが順調に進んでいます. 例えば:

私の言い回しが「先月クローズされたすべてのチケットを見せて」だと仮定しましょう。クエリを作成するために必要な各要素を解析することはできますが、「先週クローズされたすべてのチケットとリクエストを表示する」などを試みると、すべてがクラッシュします。

両方のサブジェクト (チケットとリクエスト) を取得するのに苦労しています。理想的には、それらはMeasures:tickets、 requestsおよびlogic: およびなどの個別の名前付きグループに入れられます。一部のメジャーにはスペースが含まれている場合があるため、これも考慮する必要があることに注意してください。

私はこれまでこれを思いつくことができました:

(\S+\s?)+(?=and|or)

それのテスト フレーズを使用すると、"#sla met and tickets"#sla met のみがプルされます。

昨日から正規表現を使い始めたばかりなので、ヒントがあればとても助かります!

4

1 に答える 1

1

問題の非常に狭い部分の1つだけに対処する簡単な答え:

(.+)((and|or)(.+))

andこれにより、またはで連結された任意の数の用語が取得されますor。各用語を個別に取得することはありませんが、とsplitの結果を取得できます。もちろん、を使用しても同じ結果を得ることができます。andor.+

問題がわかりますか?正規表現では、自然言語を解析できません。あなたはスプーンを使って山を通り抜けようとしています。キャプチャを機能させるために5分を費やし、最終的にあきらめたため、実際には回答を削除して再作成する必要がありました。これが、このタスクにとって正規表現が不十分なことです。

自然言語の構文解析に本当に取り組みたいのであれば、研究論文を読み始める必要があります。彼らの多くは。

編集:これは、複数の一致(複数のグループを持つ単一の一致ではない)を見つける正規表現です。各一致には、アイテムである単一のキャプチャグループがあります。

(?:\s+(?:and|or)\s+)?(\S+)

免責事項:この正規表現をだますには多くの方法があります。今は3つか4つ考えられますが、確かにそれ以上のものがあります。

于 2012-11-21T19:46:03.000 に答える