3

我知道这个问题更像是一个语法问题,但是如果你有一系列Penn Treebank标记,你如何确定一个句子的“主题”:

[WP][VBZ][DT][NN]

是否有任何 java 库可以接收此类标记并确定哪个是主题?或者是哪些?

4

3 回答 3

1

标记句子句法单元(包括主语)的标准方法是使用组成解析器。组成树用句法标签标记输入的子串。有关示例,请参见http://en.wikipedia.org/wiki/Parse_tree 。

如果这样的结构看起来可以满足您的需求,我建议您使用现成的解析器并从输出中提取相关短语。

我知道的大多数解析器在解析过程中都包含词性 (POS) 标记,但如果您对您拥有的 POS 标签有信心,您可以限制解析器使用您的标签。

请注意,成分解析在计算上可能非常昂贵。据我所知,所有最先进的成分解析器都以每秒 4-80 个句子的速度运行,尽管如果您愿意牺牲一些准确性,您可能能够实现更高的速度。

一些建议(Java 的简单自然语言处理启动中的更多详细信息)。

伯克利解析器 ( http://code.google.com/p/berkeleyparser/ )。最先进的准确性和相当快的速度(每秒 3-5 句)。

BUBS Parser ( http://code.google.com/p/bubs-parser/ ) 也可以使用高精度伯克利语法运行,放弃一点准确性(对于那些关心的人来说,F1 分数约为 1.5 分) 但将效率提高到 50-80 句/秒左右。完全公开——我是研究这个解析器的主要研究人员之一。

警告:这两个解析器都是研究代码。但我们很高兴有人在现实世界中使用 BUBS。如果你试一试,请与我联系,有问题、问题、意见等。

于 2012-04-23T20:27:22.323 回答
1

免费的、基于 java 的Stanford Dependency Parser(Stanford Parser 的一部分)可以轻松完成这项工作。它会生成一个依赖关系分析树,其中包含诸如 的依赖关系nsubj(makes-8, Bell-1),告诉您这Bellmakes. 您所要做的就是扫描解析器为您提供的依赖项列表nsubjnsubjpass条目,这些是动词的主题。

于 2012-05-03T16:16:50.087 回答
0

我已经成功地使用 OpenNLP 对葡萄牙语的科目进行分类。我创建了一个浅解析器,稍微调整了 OpenNLP Chunker 组件。

您可以使用现有的 OpenNLP 模型进行 pos 标记和分块,但您将训练一个新的块模型,该模型采用 PoS 标签 + 块标签对主题进行分类。

训练 Chunker 的数据格式基于Conll 2000

He        PRP  B-NP
reckons   VBZ  B-VP
the       DT   B-NP
current   JJ   I-NP
account   NN   I-NP
deficit   NN   I-NP
will      MD   B-VP
narrow    VB   I-VP
...

然后我创建了一个新的语料库,如下所示

He        PRP+B-NP  B-SUBJ
reckons   VBZ+B-VP  B-V  
the       DT+B-NP   O
current   JJ+I-NP   O
account   NN+I-NP   O
deficit   NN+I-NP   O
will      MD+B-VP   O
narrow    VB+I-VP   O

如果您有权访问 Penn Treebank,则可以通过在语料库中查找主题节点来创建此类数据。也许您可以从这个用于为 CoNLL-2000 共享任务生成数据的Perl 脚本开始。

葡萄牙语的评估结果是准确率为 87.07%,召回率为 75.48%,F1 为 80.86%。

于 2012-04-24T02:22:01.227 回答