我需要将一些句子变成数组以呈现解析树。
开始时,我的句子已经加了标签。
标记的句子:
(S(NP(PRP You))(VP(VBP are)(ADJP(JJ riight)))(。。))
然后我给句子编号。
编号后,它看起来像这样:
(1-S(2-NP(3-PRP 4-You))(5-VP(6-VBP 7-are)(8-ADJP(9-JJ 10-右)))(11-。 12-。))
但是,我需要将其转换为数组。通过使用正则表达式,可以很容易地将带编号的句子变成类似这样的形式来表示数组:
var DataArray = [
{ key: 1, text: "S"},
{ key: 2, text: "NP", parent: "?" },
{ key: 3, text: "PRP", parent: "?" },
{ key: 4, text: "You", parent: "?" },
{ key: 5, text: "VP", parent: "?" },
{ key: 6, text: "VBP", parent: "?" },
{ key: 7, text: "are", parent: "?" },
{ key: 8, text: "ADJP", parent: "?" },
{ key: 9, text: "JJ", parent: "?" },
{ key: 10, text: "right", parent: "?" },
{ key: 11, text: ".", parent: "?" },
{ key: 12, text: ".", parent: "?" } ]
棘手的部分是如何动态查找每个密钥的父密钥号。我想这与括号匹配有关。
我想要的数组如下:
var DataArray = [
{ key: 1, text: "S"},
{ key: 2, text: "NP", parent: "1" },
{ key: 3, text: "PRP", parent: "2" },
{ key: 4, text: "You", parent: "3" },
{ key: 5, text: "VP", parent: "1" },
{ key: 6, text: "VBP", parent: "5" },
{ key: 7, text: "are", parent: "6" },
{ key: 8, text: "ADJP", parent: "5" },
{ key: 9, text: "JJ", parent: "8" },
{ key: 10, text: "right", parent: "9" },
{ key: 11, text: ".", parent: "1" },
{ key: 12, text: ".", parent: "11" } ]
基本上是语法树的文本版本:每个子键都与其父键匹配。
答案 0 :(得分:0)
您可以自己编写代码非常简单
1)使用任何循环(同时或用于)
2)遍历字符串
3)将openBrackets计数设置为0 opnBr = 0并初始化数组
4)读取各个位置的字符,并在看到一个方括号时增加opnBr,在看到一个方括号时减少opnBr,并继续循环以进行下一次迭代。
5)如果其字符(除括号外)检查该键(opnBr)是否已存在,则进行更新,否则添加parent = opnBr-1和key = opnBr;
就这样。
快乐编码:)