使用python进行句子解析和括号匹配

时间:2019-02-06 06:04:59

标签: python-2.7

我需要将一些句子变成数组以呈现解析树。

开始时,我的句子已经加了标签。

标记的句子:

  

(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" } ]   

基本上是语法树的文本版本:每个子键都与其父键匹配。

The visual represention tation of the above data array

1 个答案:

答案 0 :(得分:0)

您可以自己编写代码非常简单

1)使用任何循环(同时或用于)

2)遍历字符串

3)将openBrackets计数设置为0 opnBr = 0并初始化数组

4)读取各个位置的字符,并在看到一个方括号时增加opnBr,在看到一个方括号时减少opnBr,并继续循环以进行下一次迭代。

5)如果其字符(除括号外)检查该键(opnBr)是否已存在,则进行更新,否则添加parent = opnBr-1和key = opnBr;

就这样。

快乐编码:)