Fix recommendation link and lower similarity threshold
This commit is contained in:
parent
8e9df066a9
commit
44ca1dcf98
@ -20,7 +20,7 @@ class Command(BaseCommand):
|
|||||||
).values_list('vacancy_id', flat=True)
|
).values_list('vacancy_id', flat=True)
|
||||||
|
|
||||||
query_filter = Filter(must_not=[HasIdCondition(has_id=recommended_vacancy_ids)])
|
query_filter = Filter(must_not=[HasIdCondition(has_id=recommended_vacancy_ids)])
|
||||||
search_result_id, vacancy_content = search_similarities(query_filter, customer_cv.id)
|
search_result_id, vacancy_content, link = search_similarities(query_filter, customer_cv.id)
|
||||||
|
|
||||||
recommendation = RecommendedVacancy.objects.create(
|
recommendation = RecommendedVacancy.objects.create(
|
||||||
customer=customer_cv.customer,
|
customer=customer_cv.customer,
|
||||||
@ -31,6 +31,6 @@ class Command(BaseCommand):
|
|||||||
chat_id=recommendation.customer.chat_id,
|
chat_id=recommendation.customer.chat_id,
|
||||||
text=vacancy_content,
|
text=vacancy_content,
|
||||||
reply_markup=InlineKeyboardMarkup([[
|
reply_markup=InlineKeyboardMarkup([[
|
||||||
InlineKeyboardButton("Откликнуться", url=recommendation.vacancy.link),
|
InlineKeyboardButton("Откликнуться", url=link),
|
||||||
]]),
|
]]),
|
||||||
))
|
))
|
||||||
|
|||||||
@ -91,7 +91,7 @@ def add_vectors(collection_name: str, _id: int, features: dict, payload: dict):
|
|||||||
scored.append({"id": vid, "score": total})
|
scored.append({"id": vid, "score": total})
|
||||||
|
|
||||||
scored.sort(key=lambda x: x["score"], reverse=True)
|
scored.sort(key=lambda x: x["score"], reverse=True)
|
||||||
if scored and scored[0]["score"] > 35: #treshold
|
if scored and scored[0]["score"] > 33: # threshold
|
||||||
return
|
return
|
||||||
|
|
||||||
client.upsert(
|
client.upsert(
|
||||||
@ -132,17 +132,19 @@ def search_similarities(query_filter: Filter, cv_id: int) -> list[dict]:
|
|||||||
max_similarities[vid] = {}
|
max_similarities[vid] = {}
|
||||||
max_similarities[vid][name] = sim
|
max_similarities[vid][name] = sim
|
||||||
if vid not in vacancies_content:
|
if vid not in vacancies_content:
|
||||||
vacancies_content[vid] = res.payload["content"]
|
vacancies_content[vid] = {}
|
||||||
|
vacancies_content[vid]["content"] = res.payload["content"]
|
||||||
|
vacancies_content[vid]["link"] = res.payload["link"]
|
||||||
|
|
||||||
scored = []
|
scored = []
|
||||||
for vid, feature_sims in max_similarities.items():
|
for vid, feature_sims in max_similarities.items():
|
||||||
total = sum(feature_sims[feature] * weights.get(feature, 1) for feature in feature_sims)
|
total = sum(feature_sims[feature] * weights.get(feature, 1) for feature in feature_sims)
|
||||||
scored.append({"id": vid, "score": total, "content": vacancies_content[vid]})
|
scored.append({"id": vid, "score": total, "content": vacancies_content[vid]["content"], "link": vacancies_content[vid]["link"]})
|
||||||
|
|
||||||
scored.sort(key=lambda x: x["score"], reverse=True)
|
scored.sort(key=lambda x: x["score"], reverse=True)
|
||||||
for i in range(20):
|
for i in range(20):
|
||||||
print(f"{scored[i]['content']} {scored[i]['score']}")
|
print(f"{scored[i]['content']} {scored[i]['score']}")
|
||||||
return scored[0]["id"], scored[0]["content"]
|
return scored[0]["id"], scored[0]["content"], scored[0]["link"]
|
||||||
|
|
||||||
|
|
||||||
def extract_features(content: str) -> VacancyFeatures:
|
def extract_features(content: str) -> VacancyFeatures:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user