【发布时间】:2019-09-20 19:40:44
【问题描述】:
我有一个自然语言处理分析树
(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 ( .... )
)
)
【问题讨论】:
-
您能否提供预期结果的
print_r()或var_dump()?如果您需要不同的语言来使用彼此的数据,您应该考虑使用普遍接受的序列化方法,例如 JSON。 -
@MonkeyZeus 抱歉,我应该提供它。我添加了一个例子。我从 Standford CoreNLP 获得它,它是用 Java 编写的。虽然它给出了 XML 和 JSON 格式的结果,但解析部分的提供与上面完全相同,可能是因为括号是语言研究中的标准标记。
-
@Emma 不,这是 python 的包装器,用于从 CoreNLP 获取解析结果。它返回上面给出的字符串。如果我找到一个 python 函数,我可以将它复制为一个 PHP 函数,但即使在 python 中,人们也有兴趣绘制解析(如上图)而不是排列在一个数组中。
-
@mickmackusa 我在您的评论之后添加了一个简化的预期输出数组。
-
不,您仍在使用
( .... )。在尝试自我解决的情况下,我可以投票。否则,这是一个“需求转储”——有些人认为值得一票。在提供编码尝试之前,我不会考虑回答。这符合我的发帖理念,即保护这个社区不被滥用为免费的编码服务。
标签: php regex recursion xml-parsing preg-match