0

私はいくつかの POS タグ分析に取り組んでおり、いくつかのタグを置き換える必要があります。タグを識別するために正規表現を使用しています。

Regex regex = new Regex(@"/(?<firstMatch>[^\s]+)( )");

// "/" と " " の間のすべて、サンプル タグ: /NN、/VB など...

今、タグ名を firstMatch グループに取得しているので、次のようにアクセスできます

foreach (Match m in regex.Matches(allText))
{
    Console.WriteLine(m.Groups["firstMatch"].Value);
}

私がやりたいのは、タグ名に応じて、タグ名を他のタグに置き換えることです。同様に、タグ名が DTI の場合、DT に置き換えたいと考えています。NNSならNNに置き換えたい。など、私が持っているタグのリストから。それをしてもいいですか?マッチリプレイスがあるかどうかを考えていたので、そのために使用できます。

ありがとう!

4

2 に答える 2

2
Dictionary<string,string> tags = new Dictionary<string,string>();

public string UpadeInput(String input)
{
    tags.Add("DTI", "DT");
    tags.Add("NNS", "NN");
    tags.Add("LongAnnoyingTag", "ShortTag");
    MatchEvaluator evaluator = new MatchEvaluator(ModifyTag);
    return Regex.Replace(input,@"(?<=/)(?<firstMatch>[^\s]+)(?= )", evaluator);
}

public string ModifyTag(Match match)
{
    return tags[match.Value];
}

合成タグの編集。

メソッドを変更してModifyTag、さまざまなケースで動作するようにするだけです。

public string ModifyTag(Match match)
{
    String tag = match.Value;
    if(!tag.Contains("+"))
    {
        return tags[match.Value];
    }
    else
    {
        string[] composedTags = tag.Split('+');
        return String.Format("{0}+{1}", tags[composedTags[0]], tags[composedTags[1]]);
    }
}
于 2013-03-29T13:58:17.450 に答える
0

私があなたの質問を理解していれば

Regex.Replace(input,"/(?<firstMatch>[^\s]+)[^\s](?= )","$1");

これにより、タグ名が最後の文字を除いて同じタグ名に置き換えられます..

于 2013-03-29T13:47:01.070 に答える