2014-10-28 53 views
1

我必须列出给定句子中的子句。我正在执行自己的语法规则来解析句子中的从句。我得到的结果是:从python中的句子中提取子句

************************************************* 
(S 
    (CLAUSE 
    (VP 
     (VP they/PRP were/VBD delivered/VBN promptly/RB) 
     and/CC 
     (VP a/DT very/RB)) 
    (NP (NP good/JJ value/NN) and/CC (NP excellent/NN))) 
    (CLAUSE 
    (VP all/DT) 
    (NP (NP around/IN (NP slipper/NN)) (NP with/IN (NP traction/NN)))) 
    ./.) 
************************************************* 

从上面的结果中,条款应该列出来,在下面的语句中给出结果。

they were delivered promptly and a very good value and excellent

all around slipper with traction.

我使用flattenchomsky_normal_form尝试,但未能获得所需的结果。如何列出单条线上的每个条款以摆脱标签?

+0

请张贴代码和语法。 – alvas 2014-10-28 07:15:57

回答

2

因为所有你想从您的字符串s提取似乎是小写,你可以将以下的俏皮话之一:

Python列表理解

print ' '.join(''.join(c for c in s if 'a' <= c <= 'z' or c == ' ').split()) 

它加入(''.join )在“a”和“z”或“”之间的所有字符。要抑制多个彼此相邻的空格,它会拆分结果并以空格作为分隔符重新加入。

正则表达式

如果你喜欢的正则表达式(import re),这甚至更短的语句产生同样的结果:

print ' '.join(re.findall('[a-z]+', s)) 

编辑

如果你想为了分别处理每个子句,可以分割t他整个字符串s,然后将相同的代码应用到每个部分(除了第一个,它只是头):

for part in s.split("CLAUSE")[1:]: 
    print ' '.join(re.findall('[a-z]+', part)) 
+0

其实我想列出单条线上的每个条款摆脱标签。 – Sudo 2014-10-28 15:49:34

+0

@Sudo:好的,我更新了我的答案以解决这个问题。 – Falko 2014-10-28 18:53:24