如何使用带有Python的NLTK从文本中删除自定义单词模式

时间:2015-06-07 12:39:10

标签: python regex nlp nltk tokenize

我目前正在开展一个分析质量试卷问题的项目。在这里我使用的是Python 3.4和NLTK。
首先,我想从文本中分别提出每个问题。问题文件的格式如下。

 (Q1). What is web 3.0?
 (Q2). Explain about blogs.
 (Q3). What is mean by semantic web?
       and so on ........

所以现在我想逐个提取问题,而不是问题编号(问题编号格式总是与上面给出的一样)。所以我的结果应该是这样的。

 What is web 3.0?
 Explain about blogs.
 What is mean by semantic web?

那么如何使用带有NLTK的python 3.4来解决这个问题?
谢谢

3 个答案:

答案 0 :(得分:2)

您可能需要检测包含问题的行,然后提取问题并删除问题编号。用于检测问题标签的正则表达式是

qnum_pattern = r"^\s*\(Q\d+\)\.\s+"

你可以用它来解决这样的问题:

questions = [ re.sub(qnum_pattern, "", line) for line in text if 
                                            re.search(qnum_pattern, line) ]

显然,text必须是一个行列表或一个可供阅读的文件。

但是如果你不知道如何处理这个问题,那么你的工作就会完成。我建议花一些时间在python教程或其他介绍性材料上。

答案 1 :(得分:1)

如果每个句子都以此模式开头,您要求的内容很容易解析,您可以使用split删除此前缀:

sentences = [ "(Q1). What is web 3.0?",
              "(Q2). Explain about blogs.",
              "(Q3). What is mean by semantic web?"]
for sen in sentences:
    print sen.split('). ',1)[1]

这将打印:

What is web 3.0?
Explain about blogs.
What is mean by semantic web?

答案 2 :(得分:1)

如果(QX)始终在文本之前用空格分隔,则可以执行以下操作:

>>> text = """(Q1). What is web 3.0?
...  (Q2). Explain about blogs.
...  (Q3). What is mean by semantic web?"""
>>> for line in text.split('\n'):
...     print line.strip().partition(' ')[2]
... 
What is web 3.0?
Explain about blogs.
What is mean by semantic web?