NLP:比较解析和标记的句子

时间:2013-08-04 14:20:58

标签: nlp nltk

Hello语言程序员

我正在学习在线自然语言处理,到目前为止,我对如何解析句子包括获取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>

感谢

2 个答案:

答案 0 :(得分:0)

Zhang和Shasha指标可能正是您所寻求的。此度量标准计算nlp语法树中两个树之间的长度。您可以查看here(in french),或搜索“用于编辑树与相关问题之间距离的简单快速算法”原始出版物。

答案 1 :(得分:0)

我认为你想要找到分类句子并加入类似的句子。

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

  1. 在标记句子上使用Naive Bayes对它们进行分类(假设您有一些训练数据和有限数量的句子类别)。

  2. 使用线性回归来执行类似的过程。将标记和标记之间的距离作为要素包括在内。

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

  4. 使用语言过滤器模型将标记的句子放入不同的过滤器。 (简单地说:声明/疑问或主动/被动等等)。

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