0

我有一个格式的字符串:

word<class> word<class>...
For example:
I<Noun> like<verb> to<Function> eat<verb>...

是否可以使用正则表达式查找每个类出现的前 n 个单词,例如使用正则表达式的前 4 个名词单词。它将输出单词列表。

谢谢

4

3 回答 3

3

正则表达式不能用于计数。

所以不 - 您无法使用正则表达式找到前 n 个单词。

于 2013-01-01T11:31:23.177 回答
1

为了完成你正在做的事情,你需要使用词性标注器来对句子中使用的单词进行分类。您可以使用任何一种自然语言处理库来做到这一点。例如。在python中你有pynltk。 http://answers.oreilly.com/topic/1091-how-to-use-an-nltk-part-of-speech-tagger/

之后,您需要根据词性对单词进行分组并计算它们。所以完全超出了正则表达式的范围。

于 2013-01-01T11:36:23.687 回答
0

您的正则表达式模式是(\\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"));
     }
于 2013-01-01T11:47:22.620 回答