Если вы обнаружите, что время выполнения неприменимо для данных заданного размера, тогда пришло время сделать что-то лучше. Некоторое хеширование Ad-Hawk может состоять в том, чтобы перебирать пакет, который вы извлекаете, и хранить его в словаре наборов, где ключи - это количество каждой буквы/небольшого размера. Это позволит разделить ваши твиты на более разумные наборы и позволить операциям в линейном времени сокращаться на некоторый постоянный коэффициент, основываясь на вашем размере ведра. Определение вашего вектора будет определять поведение результирующего объекта данных. Например, если вы используете только символы алфавита, то клоны с дополнительными кавычками и эмоциями, скорее всего, будут в одном и том же ковше при достаточно большом размере ковша. с другой стороны, если вы хешировали количество разных, попавших в твит, вы, вероятно, не увидите большого эффекта.
setOfTweets = ['this is a tweet #Twitter','this is another tweet.']
alphabetLetters=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
MyHash={} # not actually a pythonic hash
for k in setofTweets:
counts = {'a': 0, 'c': 0, 'b': 0, 'e': 0, 'd': 0, 'g': 0, 'f': 0, 'i': 0, 'h': 0, 'k': 0, 'j': 0, 'm': 0, 'l': 0, 'o': 0, 'n': 0, 'q': 0, 'p': 0, 's': 0, 'r': 0, 'u': 0, 't': 0, 'w': 0, 'v': 0, 'y': 0, 'x': 0, 'z': 0}
twiddle = False
for k2 in k:
try:
counts[k2.lower()]+=1
except(KeyError):
twiddle = !twiddle
key = tuple([counts[k]/3 for k in alphabetLetters])
try:
MyHash[key].add(k)
except(KeyError):
MyHash[key]=set()
MyHash[key].add(k)
Я не хочу называть это линейный фильтр, так как коэффициент нагрузки на ведер будет больше 1. Но это вызывающе быстрее, чем один большой набор, если данные велико.
Если вы сохраняете загруженные твиты в списке, вы можете проверить принадлежность или преобразовать список в набор, поскольку набор может содержать только уникальные элементы. – reticentroot