У меня есть дерево синтаксического анализа обработки естественного языка как
(S
(NP I)
(VP
(VP (V shot) (NP (Det an) (N elephant)))
(PP (P in) (NP (Det my) (N pajamas)))))
, и я хочу сохранить его в ассоциативном массиве, но тамне является функцией в PHP, так как NLP обычно делается в Python.
Таким образом, я должен разобрать открывающую и закрывающую скобки, чтобы построить древовидный ассоциативный массив.Я могу вспомнить два варианта
- Замена круглых скобок произвольными тегами XML или HTML и синтаксический анализ его как документа XML или HTML.
- Использование регулярного выражения.
Я думаю, что первый подход нестандартен, и шаблон регулярных выражений может сломаться в сложных случаях.
Можете ли вы предложить надежный подход для этого?
Ассоциативный массив можетиметь любую форму, так как манипулировать ею не сложно (мне это нужно в цикле), но это может быть что-то вроде
Array (
[0] = > word => ROOT, tag => S, children => Array (
[0] word => I, tag = > NP, children => Array()
[1] word => ROOT, tag => VP, children => Array (
[0] => word => ROOT, tag => VP, children => Array ( .... )
[1] => word => ROOT, tag => PP, children => Array ( .... )
)
)
)
или
Array (
[0] = > Array([0] => S, [1] => Array (
[0] Array([0] => NP, [1] => 'I') // child array is replaced by a string
[1] Array([0] => VP, [1] => Array (
[0] => Array([0] => VP, [1] => Array ( .... )
[1] => Array([0] => PP, [1] => Array ( .... )
)
)