lsdf commited on
Commit
dd8a113
·
1 Parent(s): 6453a28

BM25 fix: hyphen-to-space in ngrams, sync corpus builder

Browse files
Files changed (3) hide show
  1. 2026-02-07_19-13-16.png +0 -0
  2. 2026-02-07_23-21-43.png +0 -0
  3. 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
- ВЕРСИЯ: SMART WINDOW.
101
- 1. Считает N-граммой последовательность из N ЗНАЧИМЫХ слов.
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
- comp_ngrams_list = [generate_ngrams_safe(t, lang, n) for t in competitor_texts]
 
 
 
 
 
 
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