【问题标题】:Optimization for finding all locations of a set of substrings in a string查找字符串中一组子字符串的所有位置的优化
【发布时间】:2020-08-20 18:57:33
【问题描述】:

我在 Python 中有一组子字符串,并想在字符串中找到每个出现的子字符串。例如

# inputs
needles = {'love', 'hot', 'dogs'}
haystack = "I love hot dogs; hot dogs are delicious."

# output
indexes = {('love', 2), ('hot', 7), ('dog', 11), ('hot', 17), ('dog', 21)}

我目前正在使用一种蛮力方法来查找字符串中每个子字符串的所有出现,如果 k、n 和 m 是最长字符串的长度、针数和干草堆的长度。我想知道 trie 或任何其他方法是否会使这更快。

编辑:很多针不止一个词。

【问题讨论】:

  • 你能用re模块吗?
  • 您希望得到什么样的答案?例如。最好的算法是使用前缀树,但这有点复杂。在实践中,您可以使用更简单的方法,例如 O(mn)
  • 我没有提前知道,所以我无法预编译正则表达式,这意味着它不会被优化为只是为了搜索@AndrejKesely
  • @KevinLu “我没有提前打针”是什么意思?你如何得到它们?
  • 基本上我对另一个服务进行 API 调用以获取一组关键术语,但它们不提供关键术语的索引,因此我使用它们提供的关键术语手动搜索关键术语。如果我使用正则表达式,每次调用搜索函数时都需要一段时间来重新编译正则表达式。 @wim

标签: python string algorithm optimization substring


【解决方案1】:

special string searching algorithms 旨在寻找文本中的多种模式。

也许最著名的是 Aho-Corasick 之一,我看到很多 Python 实现(虽然不能说什么是最好的)。 Arbitrary found one.

【讨论】:

    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 2017-03-26
    • 2019-05-16
    • 2012-08-03
    相关资源
    最近更新 更多