-1

你好语言程序员

我正在研究在线自然语言处理,到目前为止,我对如何解析句子有一些了解,包括获取它的 POS 标签、SRL 等。我的问题是如何处理这些数据,或者更准确地说是如何比较两个不同的解析句子以查看它们的相似程度。

例如,我得到了这两个解析的句子,我希望能够比较它们

1.

<sentence id="s0" parse_status="success" fom="11.6633">
<cons id="c0" cat="NP" xcat="" head="c1" sem_head="c1" schema="empty_spec_head">
<cons id="c1" cat="NX" xcat="" head="c2" sem_head="c2" schema="head_mod">
<cons id="c2" cat="NX" xcat="" head="c3" sem_head="c3" schema="head_mod">
<cons id="c3" cat="NX" xcat="" head="t0" sem_head="t0">
<tok id="t0" cat="N" pos="NN" base="apartment" lexentry="[D<N.3sg>]" pred="noun_arg0">apartment</tok>
</cons>
<cons id="c4" cat="PP" xcat="" head="c5" sem_head="c5" schema="head_comp">
<cons id="c5" cat="PX" xcat="" head="t1" sem_head="t1">
<tok id="t1" cat="P" pos="IN" base="in" lexentry="N[<P>NP.acc]" pred="prep_arg12" type="noun_mod" arg1="c3" arg2="c6">in</tok>
</cons>
<cons id="c6" cat="NP" xcat="" head="c7" sem_head="c7" schema="empty_spec_head">
<cons id="c7" cat="NX" xcat="" head="c9" sem_head="c9" schema="mod_head">
<cons id="c8" cat="NP" xcat="" head="t2" sem_head="t2">
<tok id="t2" cat="N" pos="NNP" base="tel" lexentry="[D<N.3sg>]-noun_adjective_rule" pred="noun_arg1" type="noun_mod" arg1="c9">Tel</tok>
</cons>
<cons id="c9" cat="NX" xcat="" head="t3" sem_head="t3">
<tok id="t3" cat="N" pos="NNP" base="aviv" lexentry="[D<N.3sg>]" pred="noun_arg0">Aviv</tok>
</cons>
</cons>
</cons>
</cons>
</cons>
<cons id="c10" cat="PP" xcat="" head="c11" sem_head="c11" schema="head_comp">
<cons id="c11" cat="PX" xcat="" head="t4" sem_head="t4">
<tok id="t4" cat="P" pos="IN" base="with" lexentry="N[<P>NP.acc]" pred="prep_arg12" type="noun_mod" arg1="c2" arg2="c12">with</tok>
</cons>
<cons id="c12" cat="NP" xcat="" head="c13" sem_head="c13" schema="empty_spec_head">
<cons id="c13" cat="NX" xcat="" head="c15" sem_head="c15" schema="mod_head">
<cons id="c14" cat="ADJP" xcat="" head="t5" sem_head="t5">
<tok id="t5" cat="ADJ" pos="CD" base="five" lexentry="[<ADJP>]N" pred="adj_arg1" type="noun_mod" arg1="c15">five</tok>
</cons>
<cons id="c15" cat="NX" xcat="" head="t6" sem_head="t6">
<tok id="t6" cat="N" pos="NNS" base="room" lexentry="[D<N.3sg>]-plural_noun_rule" pred="noun_arg0">rooms</tok>
</cons>
</cons>
</cons>
</cons>
</cons>
</cons>
</sentence>

2.

<sentence id="s1" parse_status="success" fom="17.4367">
<cons id="c16" cat="NP" xcat="" head="c17" sem_head="c17" schema="empty_spec_head">
<cons id="c17" cat="NX" xcat="" head="c18" sem_head="c18" schema="head_mod">
<cons id="c18" cat="NX" xcat="" head="t7" sem_head="t7">
<tok id="t7" cat="N" pos="NN" base="apartment" lexentry="[D<N.3sg>]" pred="noun_arg0">apartment</tok>
</cons>
<cons id="c19" cat="PP" xcat="" head="c20" sem_head="c20" schema="head_comp">
<cons id="c20" cat="PX" xcat="" head="t8" sem_head="t8">
<tok id="t8" cat="P" pos="IN" base="with" lexentry="N[<P>NP.acc]" pred="prep_arg12" type="noun_mod" arg1="c18" arg2="c21">with</tok>
</cons>
<cons id="c21" cat="NP" xcat="" head="c22" sem_head="c22" schema="empty_spec_head">
<cons id="c22" cat="NX" xcat="" head="c23" sem_head="c23" schema="head_mod">
<cons id="c23" cat="NX" xcat="" head="c25" sem_head="c25" schema="mod_head">
<cons id="c24" cat="ADJP" xcat="" head="t9" sem_head="t9">
<tok id="t9" cat="ADJ" pos="CD" base="-NUMBER-" lexentry="[<ADJP>]N" pred="adj_arg1" type="noun_mod" arg1="c25">3</tok>
</cons>
<cons id="c25" cat="NX" xcat="" head="t10" sem_head="t10">
<tok id="t10" cat="N" pos="NNS" base="room" lexentry="[D<N.3sg>]-plural_noun_rule" pred="noun_arg0">rooms</tok>
</cons>
</cons>
<cons id="c26" cat="PP" xcat="" head="c27" sem_head="c27" schema="head_comp">
<cons id="c27" cat="PX" xcat="" head="t11" sem_head="t11">
<tok id="t11" cat="P" pos="IN" base="in" lexentry="N[<P>NP.acc]" pred="prep_arg12" type="noun_mod" arg1="c23" arg2="c28">in</tok>
</cons>
<cons id="c28" cat="NP" xcat="" head="c29" sem_head="c29" schema="empty_spec_head">
<cons id="c29" cat="NX" xcat="" head="c31" sem_head="c31" schema="mod_head">
<cons id="c30" cat="NP" xcat="" head="t12" sem_head="t12">
<tok id="t12" cat="N" pos="NNP" base="tel" lexentry="[D<N.3sg>]-noun_adjective_rule" pred="noun_arg1" type="noun_mod" arg1="c31">Tel</tok>
</cons>
<cons id="c31" cat="NX" xcat="" head="t13" sem_head="t13">
<tok id="t13" cat="N" pos="NNP" base="aviv" lexentry="[D<N.3sg>]" pred="noun_arg0">Aviv</tok>
</cons>
</cons>
</cons>
</cons>
</cons>
</cons>
</cons>
</cons>
</cons>
</sentence>

谢谢

4

2 回答 2

0

我假设您想找到对句子进行分类并将相似的句子分类。

您可以通过多种方式解决此问题。

  1. 对标记的句子使用朴素贝叶斯对它们进行分类(假设您有一些训练数据和有限数量的句子类别)。

  2. 使用线性回归来做类似的过程。包括标签和标签之间的距离作为特征。

  3. 如果您想要统计无监督方法,请使用 K-means 或类似技术。

  4. 使用语言过滤器模型将标记的句子通过不同的过滤器。(就像:陈述/疑问或主动/被动等等)。

坦率地说,有很多方法可以解决这个问题。它仍然没有完全解决。但是因为你提到你正在学习 NLP,我建议你从这些方法开始。

于 2013-08-06T15:06:53.820 回答
0

Zhang 和 Shasha 指标可能是您正在寻找的。该指标计算 nlp 语法树中两棵树之间的长度。你可以看这里(法语),或者搜索“Simple fast algorithm for editing distance between tree and related problem”的原始出版物。

于 2013-08-05T08:46:22.710 回答