31 lines
1.4 KiB
Python
31 lines
1.4 KiB
Python
from LabWork01.LabWork4.BloomFilter import BloomFilter
|
||
|
||
class SiteSearch:
|
||
def __init__(self):
|
||
self.filter: BloomFilter = BloomFilter(100000, 5)
|
||
self.keyword_urls: dict[str, list[str]] = {}
|
||
|
||
# для всех слов-ассоциаций проводим добавление в фильтр Блума и назначаем к каждому нужную ссылку на ресурс
|
||
def add(self, url: str, keywords: list[str]) -> None:
|
||
for keyword in keywords:
|
||
lowercase_string = keyword.lower()
|
||
self.filter.add(lowercase_string)
|
||
if lowercase_string not in self.keyword_urls:
|
||
self.keyword_urls[lowercase_string] = []
|
||
self.keyword_urls[lowercase_string].append(url)
|
||
|
||
# проводим поиск по слову-ключу в словаре
|
||
def find_url(self, keyword: str) -> list[str]:
|
||
lowercase_string = keyword.lower()
|
||
if self.filter.contains(lowercase_string):
|
||
return self.keyword_urls.get(lowercase_string)
|
||
else:
|
||
return []
|
||
|
||
# проверка на содержание слова-ключа в словаре
|
||
def contains(self, keyword: str) -> list[str]:
|
||
lowercase_string = keyword.lower()
|
||
if self.filter.contains(lowercase_string):
|
||
return True
|
||
else:
|
||
return False |