Created
August 22, 2019 13:02
-
-
Save heolin/b515f16339df12bc6df7d8d00a03b017 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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