是否有一个C#实用程序用于匹配(语法分析)树中的模式?

是否有一个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#实用程序,它可以让我进行复杂的查询,如:

我正在从事一个自然语言处理(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#实用程序,它可以让我进行复杂的查询,如:

  • 获取与“Joe”相关的第一个VBD
  • 让NP最接近“购物”
这是一个可以做到这一点的,我正在寻找一个C#等价物。

任何帮助都将不胜感激。

至少有两个NLP框架,即

  • (注:项目自2006年起停止)
在这里,您可以找到在.NET中使用java NLP的说明:

本页介绍如何使用java OpenNLP,但也可以应用于您在文章中提到的java库

或按照本指南使用NLTK:

    • 我们已经使用

      一种选择是将其转换为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);
      

      对我来说,你能解释一下原因吗?这个问题显然符合网站常见问题解答。