python正则表达式提取字符串的字母_Python正则表达式提取一部分字符串

本文探讨如何使用Python的正则表达式和nltk库来提取目标单词周围的上下文。提供了不同方法,包括使用正则表达式创建模式以捕获目标单词前后指定数量的单词,以及使用nltk的ConcordanceIndex进行上下文查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1要提取大量烧成的一部分。有一个目标词和之前和之后单词的数量上限。因此所提取的子必须包含单词之前和之后它的上界目标字一起。在之前和之后的部分可以包含少言,如果目标字更接近文本的开头或结尾。

进行了串

"Lorem存有胡萝卜,增强大学生开发者,但他们occaecat时间和活力,如劳动力和肥胖。多年来来,谁nostrud锻炼,学区工作,除非他们aliquip优势来自它。作业如果cupidatat消费者找到乐趣想成为一名足球cillum他要躲避痛苦,不会产生任何结果。excepteur cupidatat黑人就不是excepteur,是舒缓的灵魂,那就是,他们抛弃了那些谁是责怪你的烦恼的一般责任。"

目标的话,工作

words_before:5

words_after:2

应该返回['veniam, quis nostrud exercitation ullamco laboris nisi ut']

1个思想几个可能的模式,但没有一次成功。 1猜它也可以通过简单地遍历发射前,从目标背单词做。不过正则表达式肯定会令事情变得更容易。任何帮助,将不胜感激。

感谢所有的答案。 所有这些都按预期工作。 正则表达式对我来说最方便,因为我的字符串中填充了非字母字符!

如果要拆分单词,可以使用slice()和split()功能。 例如:

>>> text ="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod

tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, qu

is nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu

fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in

culpa qui officia deserunt mollit anim id est laborum.".split()

>>> n = text.index('laboris')

>>> s = slice(n - 5, n + 3)

>>> text[s]

['veniam,', 'quis', 'nostrud', 'exercitation', 'ullamco', 'laboris', 'nisi', 'ut']

If you still want regex....

def find_context(word_, n_before, n_after, string_):

import re

b= '\w+\W+'  * n_before

a=  '\W+\w+' * n_after

pattern = '(' + b + word_ + a + ')'

print(re.search(pattern, string_).groups(1)[0])

find_context('laboris', 5, 2, st)

veniam, quis nostrud exercitation ullamco laboris nisi ut

find_context('culpa', 2, 2, st)

sunt in culpa qui officia

这似乎总是会给出5个之前和之后的2个。 我认为OP需要前后任意数字。 或者它实际上只是5或2?

@idjaw我做了一个更改,现在它是一个函数,可以输入参数值。

您也可以使用nltk和它的"一致"方法来接近它,受到Calling NLTK的一致性的启发 - 如何在使用的单词之前/之后获取文本?:

A concordance view shows us every occurrence of a given word, together

with some context.

import nltk

def get_neighbors(input_text, word, before, after):

text = nltk.Text(nltk.tokenize.word_tokenize(input_text))

concordance_index = nltk.ConcordanceIndex(text.tokens)

offset = next(offset for offset in concordance_index.offsets(word))

return text.tokens[offset - before - 1: offset] + text.tokens[offset: offset + after + 1]

text = u"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

print(get_neighbors(text, 'laboris', 5, 2))

在目标词之前打印5个单词/令牌,在之后打印2个:

[u'veniam', u',', u'quis', u'nostrud', u'exercitation', u'ullamco', u'laboris', u'nisi', u'ut']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值