我必须列出给定句子的条款。我正在实现自己的语法规则来解析句子中的子句。我得到的结果是:
*************************************************
(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.
我已尝试使用flatten
和chomsky_normal_form
,但无法获得所需的结果。如何列出单行删除标签的每个条款?
答案 0 :(得分: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))
修改强>
如果要单独处理每个子句,可以拆分整个字符串s
,然后将相同的代码应用于每个部分(第一个除了标题之外):
for part in s.split("CLAUSE")[1:]:
print ' '.join(re.findall('[a-z]+', part))