gpt4 book ai didi

python - 正则表达式在循环期间花费的时间太长

转载 作者:行者123 更新时间:2023-11-28 16:37:32 24 4
gpt4 key购买 nike

这是我的代码的简单版本。

    for i in range(len(holdList)):
foundTerm = re.findall(r"\b" + self._searchTerm +
r"\b", holdList[i][5], flags=re.IGNORECASE)
# count the occurrence
storyLen = len(foundTerm)
holdList[i] += (storyLen,)
if foundTerm:
# Stores each found word as a list of strings
# etc
holdList[i] += (self.sentences_to_quote(holdList[i][5]), )

在循环(最后一行)中,我调用了一种不同的方法来查看每个句子,并返回包含该词的句子。 holdList 是来自 MySQL 查询的元组。

def sentences_to_quote(self, chapter):
"""
Seperates the chapter into sentences
Returns the first occurrence of the word in the sentence
"""

# Seperate the chapters into sentences
searchSentences = sent_tokenize.tokenize(chapter, realign_boundaries=True)
findIt = r"\b" + self._searchTerm + r"\b"
for word in searchSentences:
regex = (re.sub(findIt,
"**" + self._searchTerm.upper() + "**",
word, flags=re.IGNORECASE))
if regex != word:
return regex

我该怎么做才能加快速度?有什么我可以做的吗?该程序正在处理 10MB 的文本。通过分析,我发现这两个领域是瓶颈。我希望我提供了足够的信息来说明这一点。

最佳答案

我不确定您的 self._searchTerm 是否包含短语或单词,但通常您会通过使用 set 获得更好的结果dict 而不是正则表达式。在这种情况下你不需要正则表达式机制,因为你想要的只是计算/匹配完整的单词。例如,要在句子中搜索某个词,您可以轻松地将其替换为:

search_sentence = set(sent_tokenize.tokenize(...))
if self._search_term in search_sentence:
# yay

(我使您的代码符合 PEP8 标准。)

如果您担心大小写,那么将所有内容都转换为小写:

self._search_term = self._search_term.lower()
search_sentence = set(word.lower() for word in sent_tokenize.tokenize(...))
if self._search_term in search_sentence:
# yay

您还可以使用 collection.Countercollection.defaultdict(int) 计算单词出现的次数。

如果你必须使用正则表达式,因为你想匹配遵循特定模式的单词而不是匹配整个单词,那么我建议你编译一次模式,然后将该模式传递给其他方法,例如,

self.search_pattern = re.compile(r"\b{term}\b".format(term=self._search_term), re.I)
found_term = self.search_pattern.find_all(hold_list[i][5])

关于python - 正则表达式在循环期间花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23866299/

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