使用python提取一个句子

时间:2010-10-23 00:14:52

标签: python text-segmentation

如果该句中存在特定单词,我想提取确切的句子。谁能让我知道如何用python做到这一点。我使用了concordance()但它只打印了单词匹配的行。

3 个答案:

答案 0 :(得分:3)

快速提醒:句子破坏实际上是一件相当复杂的事情。

期间规则有例外,例如Mr.Dr.。还有各种句子结尾的标点符号。但是,异常也有例外(如果下一个单词是大写且不是专有名词,那么Dr.可以结束一个句子,例如)。

如果您对此主题感兴趣,可以查看nltk的punkt module(nltk表示Natural Language Tool Kit)。计算机科学这一主题的领域称为自然语言处理。

Punkt Sentence Tokenizer

  

此标记器通过使用无监督算法将文本划分为句子列表,以构建缩写词,搭配和开始句子的单词的模型。必须先使用目标语言中的大量明文进行培训才能使用。

     

NLTK数据包包括一个预先训练的英语Punkt标记器。

示例代码

import nltk.data

sent_detector = nltk.data.load('tokenizers/punkt/english.pickle')

sentences = sent_detector.tokenize(paragraph.strip())

答案 1 :(得分:1)

如果你有一个字符串中的每个句子,你可以在你的单词上使用find(),如果找到则返回句子。否则你可以使用像这样的正则表达式

pattern = "\.?(?P<sentence>.*?good.*?)\."
match = re.search(pattern, yourwholetext)
if match != None:
    sentence = match.group("sentence")

我没有对此进行过测试,但这些内容都是如此。

我的测试:

import re
text = "muffins are good, cookies are bad. sauce is awesome, veggies too. fmooo mfasss, fdssaaaa."
pattern = "\.?(?P<sentence>.*?good.*?)\."
match = re.search(pattern, text)
if match != None:
    print match.group("sentence")

答案 2 :(得分:0)

杜特在回答这个问题时做得很好。只是想添加一些东西

import re

text = "go directly to jail. do not cross go. do not collect $200."
pattern = "\.(?P<sentence>.*?(go).*?)\."
match = re.search(pattern, text)
if match != None:
    sentence = match.group("sentence")
显然,你需要在开始之前导入正则表达式库(import re)。这是对正则表达式实际执行的操作的拆解(可以在Python re library page找到更多信息)

\. # looks for a period preceding sentence.
(?P<sentence>...) # sets the regex captured to variable "sentence".
.*? # selects all text (non-greedy) until the word "go".

再次,库引用页面的链接是关键。