2

InputString : 兵士には打撲傷、傷、跡、脱臼、またはその他の負傷がある場合があります。

ExpectedOutput :
あざ
傷跡 脱臼
跡 けが

試行された一般化されたパターン:

       ".[\s]?(\w+?)"+ // あざ。
      "(?:(\s)?,(\s)?(\w+?))*"+ // 傷は転位を示します
      "[\s]?(?:or|and) その他 (\w+)"; // けが

パターンは、次のような他の入力文字列と一致できる必要があります

上記の一般化されたパターンを試すと、出力は次のようになります。

"(?:(\s)?,(\s)?(\w+?))*" のキャプチャ グループに問題があります。キャプチャ グループにはもう 1 つのオカレンスがあります..しかし、それは「転位」のみを返します。「マーク」と「脱臼:むさぼり食います。

正しいパターンとは何か、どこが間違っているのか教えてください。この質問はこの質問に最も近いものですが、その解決策は役に立ちませんでした。

ありがとう。

4

3 に答える 3

0

動作するパターンは次のとおりです。\w+(?:\ s *、\ s * \ w +)*そして手動でCSVを分離するJava正規表現でこれを行う他の方法はありません。

理想的には、Java正規表現はNLPには適していません。テキストマイニングに役立つツールは次のとおりです
。gate.ac.ukBartK.とPSpeedに感謝します。

于 2010-02-18T14:51:02.617 に答える
0

正規表現は (自然) 言語処理には適していません。正規表現では、明確に定義されたパターンのみを照合できます。正規表現でこれを行うという考えを本当に、本当に放棄する必要があります。

このタスクを実行するために使用しているプログラミング言語を指定し、そこへのポインタを求める新しい質問を開始することができます。

編集

PSpeedは、多くの言語処理タスクを実行できるサードパーティ ライブラリGateへの有望なリンクを投稿しました。しかもJavaで書かれています。私はそれを自分で使用したことはありませんが、それに取り組んでいる人々/機関を見ると、かなりしっかりしているようです.

于 2010-02-18T09:42:19.097 に答える
0

キャプチャ グループに量指定子 [ie: (foo)*] の注釈が付けられている場合、最後の一致のみが取得されます。それらすべてを取得したい場合は、キャプチャ内で数量化する必要があり、手動で値を解析する必要があります。私は正規表現の大ファンですが、さまざまな理由からここでは適切ではないと思います...最終的にNLPを行っていなかったとしても。

修正方法: (?:(\s)?,(\s)?(\w+?))*

その場合、量指定子は基本的に正規表現全体をカバーし、 Matcher.find() を使用して各一致をステップスルーすることもできます。また、空白のキャプチャ グループがある理由にも興味があります。コンマで区切られた単語のセットを見つけるだけなら、次のようになります: \w+(?:\s*,\s*\w+)* 次に、キャプチャ グループを気にせず、全体を分割します。マッチ。

さらに複雑な re: NLP では、GATE は非常に強力なツールです。学習曲線は急勾配の場合もありますが、業界全体の科学者から学ぶことができます: http://gate.ac.uk/

于 2010-02-18T19:03:25.943 に答える