Skip to content

Instantly share code, notes, and snippets.

@heolin
Created August 22, 2019 13:02
Show Gist options
  • Save heolin/b515f16339df12bc6df7d8d00a03b017 to your computer and use it in GitHub Desktop.
Save heolin/b515f16339df12bc6df7d8d00a03b017 to your computer and use it in GitHub Desktop.
from ahocorapy.keywordtree import KeywordTree
digit2letter = {
1: [],
2: ['a', 'b', 'c'],
3: ['d', 'e', 'f'],
4: ['g', 'h', 'i'],
5: ['j', 'k', 'l'],
6: ['m', 'n', 'o'],
7: ['p', 'q', 'r', 's'],
8: ['t', 'u', 'v'],
9: ['w', 'x', 'y', 'z']
}
def get_all_texts(number):
digit, rest = number[0], number[1:]
def _get_text(digit, rest):
if not digit:
return [""]
results = []
for letter in digit2letter[int(digit)]:
for r in _get_text(rest[:1], rest[1:]):
results.append(letter + r)
return results
return _get_text(digit, rest)
class NumberFinder:
def __init__(self):
words = open("/usr/share/dict/american-english").read().split("\n")
self.kwtree = KeywordTree(case_insensitive=True)
for word in words:
self.kwtree.add(word.lower())
self.kwtree.finalize()
def find(self, number, min_length=4):
texts = get_all_texts(number)
final = set()
for text in texts:
for word, _ in self.kwtree.search_all(text):
if len(word) > min_length:
index = text.index(word)
_word = "{} {} {}".format(number[:index], word.upper(), number[index+len(word):])
final.add(_word)
return list(final)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment