以下句子
我有一辆红色汽车
可以转换为此字符串
Pronoun Verb Determiner形容词名词
我想要的是找到原始句子的一部分是名词短语(NP)。 NP的简单模式是(确定者)*(形容词)*(名词)(其中*表示该组可能出现零次或多次)。实际的正则表达式是:
public static string Regex = "((?:Determiner.?)*(?:Adjective.?)*(?:Noun.?))";
使用以下代码可以提取所有NP:
MatchCollection NPmatches = Regex.Matches(structure, NounPhrase.Regex);
foreach(Match match in NPmatches)
{
foreach (Capture NPcapture in match.Captures)
{
Console.WriteLine(NPcapture.Value.ToString());
}
}
输出将是:
确定者形容词名词
我真正需要的是与该结构(NP)对应的原始句子的一部分,在这种情况下它将是
一辆红色汽车
我可以用某种方式弄清楚正则表达式匹配的位置,并计算那里的单词数量,但它很混乱且容易出错。如果可以使用一些LINQ表达式结合regex来完成,那将是很好的,以便保持转换源的范围。有没有?
PS。使用此代码将句子转换为类型
RawSentence.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries).Select(i=>i.Type.ToString()).Aggregate((x,y) => x + " " + y);
答案 0 :(得分:1)
我认为您需要的不仅仅是从原始句子到单词"代词","动词","确定者",&#34形容词"和"名词"。您确实指出某些词性(即您的决定者,形容词和名词)可能会出现零次或多次。如果它们出现不止一次,那么即使你确实有从原始句子到你的词性的映射,你也不能回到原始文本,因为你会有一个 - 很多关系。您需要将您的决定者,形容词和名词唯一标记,例如determininer1,determininer2,adjective1,noun1,noun2,noun3等。一旦获得了独特的映射,您就可以轻松地向任一方向移动。