Функция 1 - получает кусок html в виде строки, дальше она удаляет все html тэги.
Заменяет все символы, кроме букв на пробелы и делает весь текст нижним регистром.
Вырезает все слова меньше 3х символов и лишние пробелы.
def normal_str(s):
#remove all html tags
s = re.sub('<.*?>', ' ', s)
#replace all non alphebetical characters with spaces
s = re.sub('[^a-z]', ' ', s.lower())
#remove all words with less than 3 letters and extra spaces
result = ' '.join(i for i in s.split() if len(i)>2)
return result
Функция 2 на входе получает строку, а на выходе выдает list состоящий из хэшей троиц слов
хэш1 = хэш(слово1 + слово2 + слово3)
хэш2 = хэш(слово2 + слово3 + слово4)
...
хэшN = хэш(словоN + словоN+1 + словоN+2)
Хэши подогнан под формат bigint MySQL, который будет потом записан в БД.
list хэшей сортируется по величине и из него удаляются дубли.
def words_hash(string):
words = string.split()
i = len(words)
n = 0
hs = []
while n <= i-3:
st = words[n] + words[n+1] + words[n+2]
hs.append(int(hashlib.sha256(st.encode('utf-8')).hexdigest(), 16) % 10**16)
n = n + 1
hs.sort()
return list(dict.fromkeys(hs))
В принципе обе функции работают нормально, просто если можно их оптимизировать, я бы это сделал.