在保留语义的同时重写句子

Posted

技术标签:

【中文标题】在保留语义的同时重写句子【英文标题】:Rewriting sentences while retaining semantic meaning 【发布时间】:2014-05-18 19:59:17 【问题描述】:

是否可以使用WordNet 重写一个句子,使句子的语义仍然保持相同(或大部分相同)?

假设我有这句话:

Obama met with Putin last week.

    是否可以使用 WordNet 将句子改写成替代词,例如:

    Obama and Putin met the previous week.
    Obama and Putin met each other a week ago.
    

    如果不能改变句子结构,可以用WordNet只替换相关的同义词吗?

    例如:

    Obama met Putin the previous week.
    

【问题讨论】:

看看这个讨论:***.com/q/21990004/3279460. 【参考方案1】:

如果问题是使用WordNet 进行句子释义的可能性。有很多语法/语法组件是可能的。您需要这样的系统:

首先获取标记的各个语义并解析句子的语法。 然后理解复合句的整体语义(尤其是隐喻) 然后用一些语法生成器重新散列句子。

到目前为止,我只知道可以执行类似操作的 ACE 解析器/生成器,但需要大量破解系统才能使其用作释义生成器。 http://sweaglesw.org/linguistics/ace/

所以回答你的问题,

是否可以使用 WordNet 将句子改写成替代词? 遗憾的是,WordNet 不是灵丹妙药。复述任务需要的不仅仅是语义。

如果无法改变句子结构,是否可以使用 WordNet 仅替换相关的同义词? 是的,这是可能的。但是要弄清楚哪个同义词是可替换的很难......而且你还需要一些形态/语法组件。

首先你会遇到一个单词多义的问题:

from nltk.corpus import wordnet as wn
sent = "Obama met Putin the previous week"

for i in sent.split():
    possible_senses = wn.synsets(i)
    print i, len(possible_senses), possible_senses

[出]:

Obama 0 []
met 13 [Synset('meet.v.01'), Synset('meet.v.02'), Synset('converge.v.01'), Synset('meet.v.04'), Synset('meet.v.05'), Synset('meet.v.06'), Synset('meet.v.07'), Synset('meet.v.08'), Synset('meet.v.09'), Synset('meet.v.10'), Synset('meet.v.11'), Synset('suffer.v.10'), Synset('touch.v.05')]
Putin 1 [Synset('putin.n.01')]
the 0 []
previous 3 [Synset('previous.s.01'), Synset('former.s.03'), Synset('previous.s.03')]
week 3 [Synset('week.n.01'), Synset('workweek.n.01'), Synset('week.n.03')]

即使你知道意义(假设是第一个意义),每个意义都会得到多个单词,并且不是每个单词都可以在句子中替换。此外,它们是lemma 形式而不是表面形式(例如,动词是基本形式(简单现在时),名词是单数形式):

from nltk.corpus import wordnet as wn
sent = "Obama met Putin the previous week"

for i in sent.split():
    possible_senses = wn.synsets(i)
    if possible_senses:
        print i, possible_senses[0].lemma_names
    else:
        print i

[出]:

Obama
met ['meet', 'run_into', 'encounter', 'run_across', 'come_across', 'see']
Putin ['Putin', 'Vladimir_Putin', 'Vladimir_Vladimirovich_Putin']
the
previous ['previous', 'old']
week ['week', 'hebdomad']

【讨论】:

【参考方案2】:

O一种方法是使用nltk 进行语法分析阅读更多here 并在分析后将您的句子转换为active voice 或passive voice。

【讨论】:

以上是关于在保留语义的同时重写句子的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL——查询重写——定义规则

PostgreSQL——查询重写——定义规则

Java中重载重写与重构的区别

.htaccess 将子域重写到目录并将子域保留在 url

在保留引号的同时使用 nltk 拆分句子

.htaccess 结合 301 重定向和 URI 重写