是否有一个C#实用程序用于匹配(语法分析)树中的模式?
我正在从事一个自然语言处理(NLP)项目,在这个项目中,我使用一个语法分析器从给定的句子中创建一个语法分析树 示例输入:我遇到乔和吉尔,然后我们去购物是否有一个C#实用程序用于匹配(语法分析)树中的模式?,c#,tree,nlp,stanford-nlp,s-expression,C#,Tree,Nlp,Stanford Nlp,S Expression,我正在从事一个自然语言处理(NLP)项目,在这个项目中,我使用一个语法分析器从给定的句子中创建一个语法分析树 示例输入:我遇到乔和吉尔,然后我们去购物 示例输出:[TOP[S[NP[PRP I]][VP[VBD ran][PP[IN into][NP[NNP Joe][CC and][NNP Jill][NCC and][S[ADVP[RB then]][NP PRP we][VP VBD GOEN][NP NN NN SHOPING 我正在寻找一个C#实用程序,它可以让我进行复杂的查询,如:
示例输出:[TOP[S[NP[PRP I]][VP[VBD ran][PP[IN into][NP[NNP Joe][CC and][NNP Jill][NCC and][S[ADVP[RB then]][NP PRP we][VP VBD GOEN][NP NN NN SHOPING 我正在寻找一个C#实用程序,它可以让我进行复杂的查询,如:
- 获取与“Joe”相关的第一个VBD
- 让NP最接近“购物”
任何帮助都将不胜感激。至少有两个NLP框架,即
- (注:项目自2006年起停止)
- 我们已经使用
一种选择是将其转换为XML,然后将其编码为XML,使每个节点都转换为
string.Format(“,this.Name”)
和string.Format(“,this.\u name”)代码>中间放置所有子节点递归。
完成此操作后,我将使用解析树。成千上万的人已经使用查询选择器和jQuery来解析基于节点之间关系的树状结构。我认为这远远优于TRegex或其他过时且未维护的java实用程序
例如,这是为了回答您的第一个示例:
var xml = CQ.Create(d.ToXml());
//this can be simpler with CSS selectors but I chose Linq since you'll probably find it easier
//Find joe, in our case the node that has the text 'Joe'
var joe = xml["*"].First(x => x.InnerHTML.Equals("Joe"));
//Find the last (deepest) element that answers the critiria that it has "Joe" in it, and has a VBD in it
//in our case the VP
var closestToVbd = xml["*"].Last(x => x.Cq().Has(joe).Has("VBD").Any());
Console.WriteLine("Closest node to VPD:\n " +closestToVbd.OuterHTML);
//If we want the VBD itself we can just find the VBD in that element
Console.WriteLine("\n\n VBD itself is " + closestToVbd.Cq().Find("VBD")[0].OuterHTML);
这是你的第二个例子
//Now for NP closest to 'Shopping', find the element with the text 'shopping' and find it's closest NP
var closest = xml["*"].First(x => x.InnerHTML.Equals("shopping")).Cq()
.Closest("NP")[0].OuterHTML;
Console.WriteLine("\n\n NP closest to shopping is: " + closest);
对我来说,你能解释一下原因吗?这个问题显然符合网站常见问题解答。