1

我目前正在努力实现自己的英语语言处理库。真正的挑战是阅读所有丰富的理论材料,并充分了解如何将其全部置于生产轨道上。

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

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

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解析器可以识别一个单词。

我实现了分词器和词法分析器。作为输出,我得到了 S-Expression 树,例如:

(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)
  ...
 )

但我熟悉隐马尔可夫模型和诸如用于查找最可能状态序列的 Viterbi 算法和用于参数估计的 Baum-Welch 算法之类的算法。

您能否给我一些建议,如何将 Earley 解析器和基于 HMM 的 POS 标记链接在一起。或者,很可能,我走错了方向,所以请指出我错在哪里。现在我有点困惑。谢谢!

4

0 回答 0