2

有很多问题可以提取包含单词的特定句子(例如使用 python提取句子和Python 提取包含单词的句子),我有足够的 NLTK 和 SciPy 初学者经验,能够在我的自己的。

但是,我在尝试提取包含一个单词的句子时遇到了困难……以及目标句子之前和之后的句子。

例如:

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

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

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

for paragraph in document:
    do something

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

4

2 回答 2

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]

于 2014-05-22T06:22:35.763 回答
3

利用sent_tokenize从原始语料库中提取句子,然后word_tokenize对句子进行标记,然后提取带有“could”的句子:

>>> 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)]
于 2014-05-22T06:44:06.743 回答