0

我有一个预先标记的句子文件,其中一些是祈使句(隐式主语、动词优先等)。在没有任何部分标记的情况下,stanford 解析器错误地将第一个单词(动词)标记为大多数(但不是全部)这些祈使句的主语中的名词。在这些句子的第一个单词上使用部分标记(我相当确定我做得正确 - 我已经编辑并重新编译了 LexicalizedParser 以确保相关的命令行选项被识别并最终出现在 lexicalizedParser.java 中的正确位置) (使用 _VB),它的行为与不存在标记时没有什么不同。

根据lexparser 包摘要(在页面下方大约 60% 处查看“对解释有一些限制......”),这是因为将 POS 标签 VB 放在其中一些单词上对于解析器相信。

如何让解析器读取并跟踪所有标签(最好从命令行)?更新词典?

使用 EnglishFactored.ser.gz 而不是 EnglishPCFG.ser.gz 可以减轻这个问题,但它并没有消失。

几年前有人向 stanford [parser-user] 邮件列表发布了一个类似的问题,但我似乎无法找到这篇文章的答案。

编辑:使用另一个版本的解析器(从 2010 年 8 月 20 日开始),这个问题似乎不会发生 //at all//。

4

1 回答 1

1

目前没有办法以它认为“太奇怪”的方式制作 parse 标记。如果它认为一个词的标签是不可能的,你不能让它成为可能,但你可以在它认为可能的范围内指定它应该使用什么。通常这已经足够了。这里应该够了。这是一个例子。正如您所注意到的,它经常在没有帮助的情况下出错(部分原因是它们在训练数据中没有得到充分证明。它并不总是让它们出错,但它通常会出错,我选择了 3 它确实出错了:

$ cat imper.txt
Use care when opening.
Brush your hair!
Shut the door.
$ java -cp stanford-parser.jar edu.stanford.nlp.parser.lexparser.LexicalizedParser englishPCFG.ser.gz imper.txt 2> /dev/null
(ROOT
  (S
    (NP (NNP Use))
    (VP (VBP care)
      (SBAR
        (WHADVP (WRB when))
        (S
          (VP (VBG opening)))))
    (. .)))

(ROOT
  (NP
    (NP (NNP Brush))
    (NP (PRP$ your) (NN hair))
    (. !)))

(ROOT
  (NP
    (NP (NNP Shut))
    (NP (DT the) (NN door))
    (. .)))

但是使用像这样的标记化和部分标记的文本:

$ cat imper.tok
Use_VB care when opening .
Brush_VB your hair !
Shut_VB the door .

一切都是固定的:

$ java -cp stanford-parser.jar edu.stanford.nlp.parser.lexparser.LexicalizedParser -tokenized -tagSeparator _ englishPCFG.ser.gz imper.tok 2> /dev/null
(ROOT
  (S
    (VP (VB Use)
      (NP (NN care))
      (SBAR
        (WHADVP (WRB when))
        (S
          (VP (VBG opening)))))
    (. .)))

(ROOT
  (S
    (VP (VB Brush)
      (NP (PRP$ your) (NN hair)))
    (. !)))

(ROOT
  (S
    (VP (VB Shut)
      (NP (DT the) (NN door)))
    (. .)))

但是你必须使用正确的标签。它不会将“使用”标记为 VB。这也太奇怪了。“使用”作为动词应该是 VBG。它是现在分词形式,而不是命令式中使用的裸动词。

于 2011-06-10T05:56:39.833 回答