gpt4 book ai didi

python - 使用正则表达式查找段落中出现特定短语后的所有名词短语

转载 作者:行者123 更新时间:2023-12-01 04:17:30 25 4
gpt4 key购买 nike

我有一个段落数据框,我(*可以)将其拆分为单词标记和句子标记,并希望找到包含以下短语的任何实例后的所有名词短语:“贡献于”或“捐赠于”发生。

或者确实是某种形式,所以:

"Contributions are welcome to be made to the charity of your choice." 

---> would return: "the charity of your choice"

"blah blah blah donations, in honor of Firstname Lastname, can be made to ABC Foundation"

---> would return: "ABC Foundation"

我创建了一个正则表达式解决方法,可以在大约 90% 的情况下捕获正确的短语...见下文:

text = nltk.Text(nltk.word_tokenize(x))
donation = TokenSearcher(text).findall(r"<\.> <.*>{,15}? <donat.*|contrib.*> <.*>*? <to> (<.*>+?) <\.|\,|\;> ")
donation = [' '.join(tokens) for tokens in donation]
return donation

我想清理该正则表达式以消除“{,15}”要求,因为它缺少一些我需要的值。然而,我对“贪婪”表达式不太熟悉,无法让它正常工作。

所以这句话:

While she lived a full life , had many achievements and made many 
**contributions** , FirstName is remembered by most for her cheerful smile ,
colorful track suits , and beautiful necklaces hand made by daughter FirstName .
FirstName always cherished her annual visit home for Thanksgiving to visit
brother FirstName LastName

正在返回:“visit Brother FirstName Lastname”,因为之前提到了贡献,尽管“to”这个词在 15 个单词之后才出现。

最佳答案

看起来您正在努力解决如何将搜索条件限制为单个句子的问题。因此,只需使用 NLTK 将文本分解为句子(它比仅查看句点做得更好),您的问题就消失了。

sents = nltk.sent_tokenize(x)  # `x` is a single string, as in your example
recipients = []
for sent in sents:
m = re.search(r"\b(contrib|donat).*?\bto\b([^.,;]*)", sent)
if m:
recipients.append(m.group(2).strip())

对于进一步的工作,我还建议您使用比 Text 更好的工具,它用于简单的交互式探索。如果您确实想对文本进行更多操作,nltk 的 PlaintextCorpusReader 是您的 friend 。

关于python - 使用正则表达式查找段落中出现特定短语后的所有名词短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34165526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com