C# 自然语言处理。词性标注与句法分析

C# 自然语言处理。词性标注与句法分析,c#,nlp,pos-tagger,earley-parser,C#,Nlp,Pos Tagger,Earley Parser,我目前正在努力实现自己的英语语言处理库。真正的挑战是通过所有丰富的理论材料,了解如何将其全部纳入生产轨道 到目前为止,我已经取得了一些进展。我实现了句子结束检测器和早期解析器。但事实是,除非我在终端字典中包含特定的单词,否则解析器无法识别它并构建图表 为了更明确,请查看我的CFG语法的以下示例: Production[] ppTerminals = { new Production(new Word[] { new Terminal("Preposition"), new NonTerminal

我目前正在努力实现自己的英语语言处理库。真正的挑战是通过所有丰富的理论材料,了解如何将其全部纳入生产轨道

到目前为止,我已经取得了一些进展。我实现了句子结束检测器和早期解析器。但事实是,除非我在终端字典中包含特定的单词,否则解析器无法识别它并构建图表

为了更明确,请查看我的CFG语法的以下示例:

Production[] ppTerminals = { new Production(new Word[] { new Terminal("Preposition"), new NonTerminal("NP") })};
AddProduction(ppTerminal, "PP"); // Add production
...
DictionaryBuilder(Prepositions.SingleWord, "Preposition"); //Where
Prepositions.SingleWord is a hard-coded list of possible prepositions.
结果,如果Earley解析器遇到未知的两个单词PP,比如“up to”,它将无法识别它并构建图表

所以我认为在语法分析器之前,我还需要一些其他的东西来处理我的句子,然后将相关数据转发给语法分析器。其主要思想是在词性标注阶段动态建立词典,然后Earley解析器可以识别单词

我实现了标记器和lexer。作为输出,我得到了S表达式树,如:

(sentence
  (word BOND)
  (word TRADING)
  (word REVENUES)
  (word AT)
  (word GOLDMAN)
  (word SACHS)
  (word SLID)
  (value 40%)
  ...
  (word AND)
  (word CURRENCIES)
  (word WAS)
  (currency $1.16BN)
  ...
 )
但我熟悉隐马尔可夫模型和类似的算法,比如寻找最可能状态序列的维特比算法和参数估计的鲍姆-韦尔奇算法

你能不能给我一个建议,如何将早期语法分析器和基于HMM的词性标注联系起来。或者,也许,我走错了方向,那么请指出我错在哪里。现在我有点糊涂了。谢谢大家!