将单词重新排序规则应用于元组列表

Applying word reordering rules to a list of tuples

假设我们有:

[('The', 'DET'),
 ('red', 'ADJ'),
 ('window', 'NOUN'),
 ('is', 'VERB'),
 ('closed', 'VERB'),
 ('.', 'PUNCT')]

它是一个元组列表,第一个元素是句子中的一个词(在本例中,'The red window is closed.'),第二个元素是语法类别(或标记)。

假设我们有以下规则:

1.)

  [('ADJ', 'NOUN'), ('NOUN', 'ADJ')]

这表示如果我们有一个 ADJ 紧跟一个 NOUN(在这个例子中,'red',和 'window'),我们应该重新排序它们,以便 NOUN 紧跟在调整。 将规则 1 应用于句子的结果将是:

[('The', 'DET'),
 ('window', 'NOUN'),
 ('red', 'ADJ'),
 ('is', 'VERB'),
 ('closed', 'VERB'),
 ('.', 'PUNCT')]

有人知道如何针对任意数量的其他规则和句子自动执行此操作吗? 甚至一些基本策略也会有所帮助,真的。

如有任何帮助,我们将不胜感激。

这是我想出的:

第一步:设置变量(这里你说的规则可以简化)

sentence = [('The', 'DET'), ('red', 'ADJ'), ('window', 'NOUN'), ('is', 'VERB'), ('closed', 'VERB'), ('.', 'PUNCT')]
rule = [('ADJ', 'NOUN')]

第 2 步:遍历句子中的项目

for index in range(0, len(sentence)):

第 3 步:从元组中获取特定信息

current = sentence[index][1]
next = sentence[index+1][1]

第 4 步:比较

if current == rule[0][0] and next == rule[0][1]:
    print("Here we go, swapping!")

当然,这个实现是不完整的,因为我自己写整个东西是没有意义的。 一些注意事项:

  • 记得处理index+1越界

  • 切换 2 个项目可能会导致链式切换 - 假设顺序是 ADJ、NOUN、NOUN,这将导致第一次迭代中出现 NOUN、ADJ、NOUN,第二次出现 NOUN、NOUN、ADJ一个

  • 复杂的规则可能会破坏实现自动化行为的想法