Если ваш набор поисковых терминов фиксирован, библиотека esmre для Python может быть именно тем, что вам нужно.Он использует Aho-Corasick для быстрого сопоставления подстрок с большими наборами поисковых терминов.
Вот пример, который использует esmre для поиска упоминаний некоторых языков программирования:
import esm
tweets = """
I've always loved Python.
C# is better than I thought. It's like Java done right.
My tiny mind cannot grasp Haskell.
Objective-C is like C and Smalltalk's illegitimate lovechild.
""".strip().split('\n')
search_terms = ["Python", "Ruby", "PHP", "Erlang", "Haskell", "OCaml",
"Objective-C", "C#", "C++", "Common Lisp", "Scheme", "Java", "Smalltalk",
" C "
]
# Build the index of search terms
index = esm.Index()
for term in search_terms:
index.enter("%s" % term.lower(), term)
index.fix()
# Find mentions of the search terms
for tweet in tweets:
matches = index.query(tweet.lower())
languages = [label for (position, label) in matches]
print "%r mentions %r" % (tweet, languages)