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

使用Python提取包含单词的句子。。。以及它周围的句子?,python,regex,nlp,nltk,text-segmentation,Python,Regex,Nlp,Nltk,Text Segmentation,在提取包含单词(如和)的特定句子时会遇到很多问题,我有足够的NLTK和SciPy初学者经验,能够自己完成这项工作 然而,我被困在试图提取一个包含单词的句子。。。以及目标句前后的句子 例如: “前几天我正在上学的路上,天开始下雨了。我伸手去拿伞,但我意识到我把伞忘在家里了。我该怎么办?我立即跑向最近的树。但后来我意识到我不能呆在一棵没有叶子的树上。” 在这个例子中,目标词是“可以”。如果我想提取目标句子(我能做什么?)以及前后两个句子(我伸手去拿雨伞,但我意识到我忘在家里了。我立即跑向最近的树),

在提取包含单词(如和)的特定句子时会遇到很多问题,我有足够的NLTK和SciPy初学者经验,能够自己完成这项工作

然而,我被困在试图提取一个包含单词的句子。。。以及目标句前后的句子

例如:

“前几天我正在上学的路上,天开始下雨了。我伸手去拿伞,但我意识到我把伞忘在家里了。我该怎么办?我立即跑向最近的树。但后来我意识到我不能呆在一棵没有叶子的树上。”

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

假设我把每个段落都分割成自己的文本

for paragraph in document:
    do something

。。。有没有合适的方法来解决这个问题?我有大约10000个段落,在目标词周围有不同数量的句子(每个段落都有)

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
这样做的目的是把段落分成一系列句子


对句子的迭代测试“can”是否在上下文中。如果是,则打印上一个索引[line-1]、当前索引[line]和下一个索引[line+1]

使用
sent\u tokenize
从原始语料库中提取句子,然后
word\u tokenize
对句子进行标记,然后使用“can”提取句子:

要获得前后的句子,请执行以下操作:

>>> 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)]

您是否已将每个段落中的句子提取到一个列表中(每个句子一个列表项)?您是否需要查找段落中目标词的每一次出现,还是仅查找第一次?可能需要使用
try:/except:indexer
围绕上一行/下一行打印语句来处理边缘情况?如何使用NLTK splitter优于
split('.')
?@user1993它有一些额外的助手,但在其他方面也差不多。如何使用NLTK拆分器比
split('.')
len(sent_tokenize('Ken博士在医院工作'))==1
len(Ken博士在医院工作)。拆分('==2
谢谢!那么NLTK更好吗?因为它在经过一个大型数据库之后提取了很多更仔细的规则/条件?这些规则是硬编码的还是学习的?
>>> 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)]