我必须列出给定句子中的子句。我正在实现自己的语法规则来解析句子中的子句。我得到的结果是:
*************************************************
(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))))
./.)
*************************************************
从上面的结果中,应该列出子句,以便在下面的语句中给出结果。
它们交付及时,物超所值,非常出色
全能拖鞋,具有牵引力。
我尝试使用 flatten
和 chomsky_normal_form
但无法获得所需的结果。如何在单行上列出每个子句并去掉标签?
最佳答案
由于您想要从字符串 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))
关于python - 从Python中的句子中提取子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26601665/