使用Python提取包含单词的句子......以及它周围的句子?

时间:2014-05-22 06:09:00

标签: python regex nlp nltk text-segmentation

有很多问题可以提取包含单词的特定句子(如extract a sentence using pythonPython extract sentence containing word),并且我有足够的初学经验可以使用NLTK和SciPy来完成那是我自己的。

然而,我在试图提取一个含有单词的句子......以及目标句子之前和之后的句子时遇到了困难。

例如:

“前几天,当我开始下雨时,我正走向学校。我伸手去拿伞,但我意识到我在家里已经忘记了。我能做什么?我立即跑到最近的树上去了。但是然后我意识到我不能留下没有任何树叶的树。“

在此示例中,目标词是“可以”。如果我想提取目标句子(我能做什么?)以及前后句子(我伸手去拿伞,但我意识到我在家里已经忘记了它。 我立即跑到最近的树上。),这会是一个好方法吗?

假设我将每个段落分割为自己的文本......

for paragraph in document:
    do something

......有没有正确的方法来解决这个问题?我有大约10,000个段落,在目标词周围有不同数量的句子(出现的是每一段)。

2 个答案:

答案 0 :(得分:4)

这样的事情怎么样?

import nltk.data
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
for paragraph in document:
    paragraph_sentence_list = tokenizer.tokenize(paragraph)
    for line in xrange(0,len(paragraph_sentence_list)):
        if 'could' in paragraph_sentence_list[line]:

            print(paragraph_sentence_list[line])

            try:
                print(paragraph_sentence_list[line-1])
            except IndexError as e:
                print('Edge of paragraph. Beginning.')
                pass

            try:
                print(paragraph_sentence_list[line+1])
            except IndexError as e:
                print('Edge of paragraph. End.')
                pass

这样做是将段落分成句子列表。

对句子的迭代测试是否'可能'在句子中。如果是,则打印前一个索引[line-1],当前索引[line]和下一个索引[line + 1]

答案 1 :(得分:2)

利用sent_tokenize从原始语料库中提取句子,然后word_tokenize对句子进行标记,然后用" can"

提取句子
>>> from nltk.corpus import brown
>>> from nltk import sent_tokenize, word_tokenize
>>> corpus = " ".join(brown.words())
>>> [i for i in sent_tokenize(corpus) if u"could" in word_tokenize(i)]

要获得前后的句子:

>>> sentences = sent_tokenize(corpus)
>>> [" ".join([sentences[i-1], j, sentences[i+1]]) for i,j in enumerate(sentences) if u"could" in word_tokenize(j)]