次の形式の文字列があります。
word<class> word<class>...
For example:
I<Noun> like<verb> to<Function> eat<verb>...
正規表現を使用して、各クラスで発生する上位 n 語を見つけることは可能ですか?たとえば、正規表現を使用して上位 4 つの名詞語を検索します。単語のリストを出力します。
ありがとう
次の形式の文字列があります。
word<class> word<class>...
For example:
I<Noun> like<verb> to<Function> eat<verb>...
正規表現を使用して、各クラスで発生する上位 n 語を見つけることは可能ですか?たとえば、正規表現を使用して上位 4 つの名詞語を検索します。単語のリストを出力します。
ありがとう
カウントに正規表現は使用できません。
いいえ、正規表現を使用して上位 n 語を見つけることはできません。
あなたがやっていることを達成するためには、品詞タガーを使用して、文で使用されている単語の種類を分類する必要があります。これを行うには、自然言語処理ライブラリのいずれかを使用できます。たとえば。Pythonにはpynltkがあります。 http://answers.oreilly.com/topic/1091-how-to-use-an-nltk-part-of-speech-tagger/
その後、品詞に従って単語をグループ化し、それらを数えます。したがって、正規表現の範囲外です。
正規表現パターンは(\\s|^)([a-zA-Z]+?)<Noun>(\\s|$)
、見つかったすべての一致で$2
、結果を取得するために使用する必要があります
C#では、次のコードを使用してこれを実現できます。
string type = "Noun";
int top = 5;
MatchCollection mc = Regex.Matches("I<Noun> like<verb> to<Function> eat<verb> an apple<Noun>", String.Format("(\\s|^)([a-zA-Z]+?)<{0}>(\\s|$)", type));
List<string> res = new List<string>();
for (int i = 0; i < mc.Count && i < top; i++)
{
res.Add(mc[i].Result("$2"));
}