从python中的句子中提取子句

时间:2014-10-28 05:50:49

标签: python nlp nltk

我必须列出给定句子的条款。我正在实现自己的语法规则来解析句子中的子句。我得到的结果是:

*************************************************
(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,但无法获得所需的结果。如何列出单行删除标签的每个条款?

1 个答案:

答案 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))