如果该句中存在特定单词,我想提取确切的句子。谁能让我知道如何用python做到这一点。我使用了concordance()但它只打印了单词匹配的行。
答案 0 :(得分:3)
快速提醒:句子破坏实际上是一件相当复杂的事情。
期间规则有例外,例如Mr.
或Dr.
。还有各种句子结尾的标点符号。但是,异常也有例外(如果下一个单词是大写且不是专有名词,那么Dr.
可以结束一个句子,例如)。
如果您对此主题感兴趣,可以查看nltk的punkt module(nltk表示Natural Language Tool Kit)。计算机科学这一主题的领域称为自然语言处理。
此标记器通过使用无监督算法将文本划分为句子列表,以构建缩写词,搭配和开始句子的单词的模型。必须先使用目标语言中的大量明文进行培训才能使用。
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".
再次,库引用页面的链接是关键。