Я хочу получить все различные комбинации вложенного списка, уровень которого неизвестен.
Я искал решение, но все подобные проблемы не совсем то, что я ищу.
Учтите, что уровни могут быть очень глубокими, чем это, например, для внутренних уровней 5 или 6.
Основная проблема заключается в реализации обратного указателя для алгоритма CKY для получения всех возможных синтаксических деревьев, который представляет собой вложенный список с ДЕЙСТВИТЕЛЬНО неизвестными уровнями!!!
У меня есть обратный указатель, такой как:
backpointer = {
(0, 2, 'NP'): {
(1, 'AD', 'NP')
},
(1, 3, 'X1'): {
(2, 'NP', 'PA')
},
(1, 3, 'NP'): {
(2, 'NP', 'NP')
}, (0, 3, 'X1'): {
(2, 'NP', 'PA'),
(1, 'DT', 'NP')
},
(2, 4, 'X2'): {
(3, 'PA', 'VP')
},
(1, 4, 'S'): {
(2, 'NP', 'X2'),
(3, 'X1', 'VP')
},
(0, 4, 'S'): {
(2, 'NP', 'X2'),
(3, 'X1', 'VP')
}
}
, от которого я отступаю от (0, 4, 'S'), рассматривая все возможные пути.
Мой текущий вывод похож на этот, который не классифицирован.: * 10101
[
(0, 4, 'S'), (0, 3, 'X1'), (0, 2, 'NP'), (0, 1, 'AD'), (1, 2, 'NP'), (2, 3, 'PA'),
(0, 1, 'DT'), (1, 3, 'NP'), (1, 2, 'NP'), (2, 3, 'NP'), (3, 4, 'VP'), (0, 2, 'NP'),
(0, 1, 'AD'), (1, 2, 'NP'), (2, 4, 'X2'), (2, 3, 'PA'), (3, 4, 'VP')
]
И я пытаюсь получить его как вложенный список, как показано ниже, чтобы классифицировать его
[
(0, 4, 'S'),
[
(0, 2, 'NP'), (2, 4, 'X2'), (0, 1, 'AD'), (1, 2, 'NP'), (2, 3, 'PA'), (3, 4, 'VP')
],
[
(0, 3, 'X1'),
(3, 4, 'VP'),
[
(0, 2, 'NP'), (2, 3, 'PA'), (0, 1, 'AD'), (1, 2, 'NP')
],
[
(0, 1, 'AD'), (1, 3, 'NP'), (1, 2, 'NP'), (2, 3, 'NP')
]
]
]
, а затем показатьэто пользователю как несколько списков для каждого возможного уникального дерева.
[
(0, 4, 'S'), (0, 2, 'NP'), (2, 4, 'X2'), (0, 1, 'AD'),
(1, 2, 'NP'), (2, 3, 'PA'), (3, 4, 'VP')
]
[
(0, 4, 'S'), (0, 3, 'X1'),(3, 4, 'VP'), (0, 2, 'NP'),
(2, 3, 'PA'), (0, 1, 'AD'), (1, 2, 'NP')
]
[
(0, 4, 'S'), (0, 3, 'X1'),(3, 4, 'VP'), (0, 1, 'AD'),
(1, 3, 'NP'), (1, 2, 'NP'), (2, 3, 'NP')
]