Spaces:
Running
Running
BM25 fix: hyphen-to-space in ngrams, sync corpus builder
Browse files- 2026-02-07_19-13-16.png +0 -0
- 2026-02-07_23-21-43.png +0 -0
- logic.py +13 -6
2026-02-07_19-13-16.png
ADDED
|
2026-02-07_23-21-43.png
ADDED
|
logic.py
CHANGED
|
@@ -3,6 +3,7 @@ from collections import Counter
|
|
| 3 |
from typing import List, Dict
|
| 4 |
import numpy as np
|
| 5 |
from rank_bm25 import BM25Okapi
|
|
|
|
| 6 |
|
| 7 |
# Новые импорты для BERT
|
| 8 |
import torch
|
|
@@ -97,14 +98,14 @@ def get_lemmas_flat(text: str, lang: str) -> List[str]:
|
|
| 97 |
def generate_ngrams_safe(text: str, lang: str, n: int) -> List[str]:
|
| 98 |
"""
|
| 99 |
Генерирует n-граммы.
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
2. Сохраняет стоп-слова ВНУТРИ фразы (для читаемости).
|
| 103 |
-
3. Обрезает стоп-слова ПО КРАЯМ (для чистоты).
|
| 104 |
-
Пример (N=2): "Website des Anbieters" -> "website des anbieters" (считается биграммой).
|
| 105 |
"""
|
| 106 |
if not text: return []
|
| 107 |
|
|
|
|
|
|
|
|
|
|
| 108 |
# Нормализация
|
| 109 |
clean_text = " ".join(text.split())
|
| 110 |
doc = get_doc(clean_text, lang)
|
|
@@ -326,7 +327,13 @@ def calculate_bm25_recommendations(target_text: str, competitor_texts: List[str]
|
|
| 326 |
continue
|
| 327 |
|
| 328 |
target_ngrams = generate_ngrams_safe(target_text, lang, n)
|
| 329 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 330 |
|
| 331 |
corpus = [target_ngrams] + comp_ngrams_list
|
| 332 |
|
|
|
|
| 3 |
from typing import List, Dict
|
| 4 |
import numpy as np
|
| 5 |
from rank_bm25 import BM25Okapi
|
| 6 |
+
import re
|
| 7 |
|
| 8 |
# Новые импорты для BERT
|
| 9 |
import torch
|
|
|
|
| 98 |
def generate_ngrams_safe(text: str, lang: str, n: int) -> List[str]:
|
| 99 |
"""
|
| 100 |
Генерирует n-граммы.
|
| 101 |
+
LOGIC: Smart Window (сохраняет предлоги внутри).
|
| 102 |
+
FIX: Заменяет дефисы на пробелы перед анализом (Casino-Websites -> Casino Websites).
|
|
|
|
|
|
|
|
|
|
| 103 |
"""
|
| 104 |
if not text: return []
|
| 105 |
|
| 106 |
+
# 1. ПРЕ-ПРОЦЕССИНГ: Дефисы в пробелы
|
| 107 |
+
text = re.sub(r'[\-\–\—\/]', ' ', text)
|
| 108 |
+
|
| 109 |
# Нормализация
|
| 110 |
clean_text = " ".join(text.split())
|
| 111 |
doc = get_doc(clean_text, lang)
|
|
|
|
| 327 |
continue
|
| 328 |
|
| 329 |
target_ngrams = generate_ngrams_safe(target_text, lang, n)
|
| 330 |
+
|
| 331 |
+
comp_ngrams_list = []
|
| 332 |
+
for t in competitor_texts:
|
| 333 |
+
if t.strip():
|
| 334 |
+
comp_ngrams_list.append(generate_ngrams_safe(t, lang, n))
|
| 335 |
+
else:
|
| 336 |
+
comp_ngrams_list.append([])
|
| 337 |
|
| 338 |
corpus = [target_ngrams] + comp_ngrams_list
|
| 339 |
|