2014-10-28 51 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