0

医療部門からの「チャンク」文を含むファイルがあります。

文は次のようになります。

" [ADVP 再び/RB] [VP が見られた/VBN] [NP is/VBZ] [NP a/DT 焦点/JJ 非対称/NN ].

「[NP 診断/JJ マンモグラム/NN] [PP of/IN] [NP the/DT left/JJ Breast/NN ].

それらの「チャンク」から単語のみを抽出する方法が必要です。すべての文に共通する規則は、単語が「/」文字の前に来ることです。

POSなしで文字列を取得するためにREGEXなどを組み合わせるオプションはありますか?

ありがとう

4

4 に答える 4

3

この正規表現のすべての一致を検索します。

\w+(?=/)

RegexPal.comでテストしました。魅力のように働きました。

正規表現は非常に単純です。\w+( ) の後に a が続く単語に一致しますが、一致の部分は/作成しません。/これにより、グループのキャプチャなどを処理する必要がなくなります。これは、 との 'followed by' 一致を行います。(?=/)これは、本質的に、直後に/. これは先読みと呼ばれます。

サンプルコードは次のとおりです。

string sentence = "[ADVP again/RB ] [VP seen/VBN ] [NP is/VBZ ] [NP a/DT focal/JJ asymmetry/NN ].";
MatchCollection matches = Regex.Matches(sentence, @"\w+(?=/)");
foreach (Match match in matches)
{
    Console.WriteLine(match.Value);
}

出力:

again
seen
is
a
focal
asymmetry
于 2012-05-11T12:12:02.733 に答える
1

これはうまくいくようです:

var patt = @"\s(\b(.+?))/";
var matches = Regex.Matches("[ADVP again/RB ] [VP seen/VBN ] [NP is/VBZ ] [NP a/DT focal/JJ asymmetry/NN ].", patt);

var matchedValues = matches
    .Cast<Match>()
    .Select(match => match.Groups[1].Value);

var output = string.Join(" ", matchedValues);

=> 「再び見られるのは焦点の非対称性です」

于 2012-05-11T11:57:51.097 に答える
0

これを試して。

var val = "[ADVP again/RB ] [VP seen/VBN ] [NP is/VBZ ] [NP a/DT focal/JJ asymmetry/NN ]";    
var list = val.Split('/').Select(c => c.Split(' ').Last());
于 2012-05-11T12:12:18.490 に答える
0

RegEx マッチングを再度検索しています, see, is, a, symmetry and diagnostic, mammogramm, of, the, left, Breast

右?

次に... /\b([\w]+)// 動作するはずです

于 2012-05-11T11:42:01.137 に答える