有很多问题可以提取包含单词的特定句子(如extract a sentence using python和Python extract sentence containing word),并且我有足够的初学经验可以使用NLTK和SciPy来完成那是我自己的。
然而,我在试图提取一个含有单词的句子......以及目标句子之前和之后的句子时遇到了困难。
例如:
“前几天,当我开始下雨时,我正走向学校。我伸手去拿伞,但我意识到我在家里已经忘记了。我能做什么?我立即跑到最近的树上去了。但是然后我意识到我不能留下没有任何树叶的树。“
在此示例中,目标词是“可以”。如果我想提取目标句子(我能做什么?)以及前后句子(我伸手去拿伞,但我意识到我在家里已经忘记了它。 和我立即跑到最近的树上。),这会是一个好方法吗?
假设我将每个段落分割为自己的文本......
for paragraph in document:
do something
......有没有正确的方法来解决这个问题?我有大约10,000个段落,在目标词周围有不同数量的句子(出现的是每一段)。
答案 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)]