我目前正在开展一个分析质量试卷问题的项目。在这里我使用的是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来解决这个问题?
谢谢
答案 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?