fix: kurum adi basligi eziyordu (gida ihalesi 'Hastanesi' yuzunden Saglik) — parcalar oncelik sirasiyla taraniyor
This commit is contained in:
@@ -90,9 +90,9 @@ export function openDb({ create = false } = {}) {
|
|||||||
db.exec(SCHEMA);
|
db.exec(SCHEMA);
|
||||||
// Geçiş: sektör zenginleştirmesi ilanın TAMAMINI tarıyordu ve standart
|
// Geçiş: sektör zenginleştirmesi ilanın TAMAMINI tarıyordu ve standart
|
||||||
// hukuki metin ("e-imza", "numune sunulması") yanlış sınıflandırma üretiyordu.
|
// hukuki metin ("e-imza", "numune sunulması") yanlış sınıflandırma üretiyordu.
|
||||||
// v2 yalnızca işin konusunu tarar; eski kayıtlar silinip yeniden hesaplanır.
|
// v3: yalnızca işin konusu taranır ve başlık öncelikli; eski kayıtlar silinip yeniden hesaplanır.
|
||||||
try {
|
try {
|
||||||
const silinen = db.prepare("DELETE FROM sektor_zengin WHERE kaynak IS NULL OR kaynak <> 'dokuman-v2'").run();
|
const silinen = db.prepare("DELETE FROM sektor_zengin WHERE kaynak IS NULL OR kaynak <> 'dokuman-v3'").run();
|
||||||
if (silinen?.changes) console.log(`[history-store] ${silinen.changes} eski sektör kaydı geçersiz kılındı (v2)`);
|
if (silinen?.changes) console.log(`[history-store] ${silinen.changes} eski sektör kaydı geçersiz kılındı (v2)`);
|
||||||
} catch { /* tablo henüz yoksa sorun değil */ }
|
} catch { /* tablo henüz yoksa sorun değil */ }
|
||||||
|
|
||||||
|
|||||||
+5
-4
@@ -121,7 +121,7 @@ function mapAd(ad) {
|
|||||||
const ikn = getFilter(ad, 'İhale Kayıt No') || ad.adNo || '';
|
const ikn = getFilter(ad, 'İhale Kayıt No') || ad.adNo || '';
|
||||||
const usul = getFilter(ad, 'İhale Usulü') || 'Belirtilmemiş';
|
const usul = getFilter(ad, 'İhale Usulü') || 'Belirtilmemiş';
|
||||||
const ihaleTuru = getFilter(ad, 'İhale Türü') || '';
|
const ihaleTuru = getFilter(ad, 'İhale Türü') || '';
|
||||||
const searchBase = `${ad.title || ''} ${ad.advertiserName || ''}`;
|
const searchBase = `${ad.title || ''} ${ad.advertiserName || ''}`; // yalnızca arama için
|
||||||
const kalanGun = daysUntil(tarih);
|
const kalanGun = daysUntil(tarih);
|
||||||
|
|
||||||
let aciliyetBadge = null;
|
let aciliyetBadge = null;
|
||||||
@@ -143,7 +143,8 @@ function mapAd(ad) {
|
|||||||
saat: '',
|
saat: '',
|
||||||
alimTuru: ihaleTuru || 'İhale',
|
alimTuru: ihaleTuru || 'İhale',
|
||||||
usul,
|
usul,
|
||||||
sektor: classify(SECTOR_RULES, searchBase, 'Genel'),
|
// Başlık önce, kurum adı yalnızca yedek (bkz. sektorBul)
|
||||||
|
sektor: sektorBul(ad.title || '', ad.advertiserName || ''),
|
||||||
brans: ihaleTuru || 'Genel',
|
brans: ihaleTuru || 'Genel',
|
||||||
kurumTipi: classify(INSTITUTION_RULES, ad.advertiserName || '', 'Diğer Kamu Kurumları'),
|
kurumTipi: classify(INSTITUTION_RULES, ad.advertiserName || '', 'Diğer Kamu Kurumları'),
|
||||||
eklenmeZamani: relativeTimeTr(ad.publishStartDate),
|
eklenmeZamani: relativeTimeTr(ad.publishStartDate),
|
||||||
@@ -338,10 +339,10 @@ async function sektorZenginlestir() {
|
|||||||
// hukuki metin ("e-imza ile imzalanarak", "numune sunulması")
|
// hukuki metin ("e-imza ile imzalanarak", "numune sunulması")
|
||||||
// sınıflandırmayı zehirliyordu.
|
// sınıflandırmayı zehirliyordu.
|
||||||
const sek = sektorBul(t.baslik || '', ilanKonusu(det.aciklama || ''));
|
const sek = sektorBul(t.baslik || '', ilanKonusu(det.aciklama || ''));
|
||||||
sonuc.push({ id: t.id, sektor: sek, kaynak: 'dokuman-v2' });
|
sonuc.push({ id: t.id, sektor: sek, kaynak: 'dokuman-v3' });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Metin alınamadıysa 'Genel' yaz — sonsuz yeniden deneme olmasın.
|
// Metin alınamadıysa 'Genel' yaz — sonsuz yeniden deneme olmasın.
|
||||||
sonuc.push({ id: t.id, sektor: 'Genel', kaynak: 'dokuman-v2' });
|
sonuc.push({ id: t.id, sektor: 'Genel', kaynak: 'dokuman-v3' });
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
// Kaynağı yormamak için gruplar arasında kısa duraklama.
|
// Kaynağı yormamak için gruplar arasında kısa duraklama.
|
||||||
|
|||||||
+15
-2
@@ -222,9 +222,22 @@ export function classify(rules, text, fallback) {
|
|||||||
return fallback;
|
return fallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** İhale metninden sektör. Kaynak ne olursa olsun aynı sonucu verir. */
|
/**
|
||||||
|
* İhale metninden sektör. Parçalar ÖNCELİK sırasına göre TEK TEK denenir.
|
||||||
|
*
|
||||||
|
* Hepsini birleştirip taramak yanlış sonuç verir: kural sırası metin içindeki
|
||||||
|
* konumu ezer. "Gıda ürünleri alınacaktır" + "X DEVLET HASTANESİ" birleştirilirse
|
||||||
|
* Sağlık kuralı (1. sıra) Gıda kuralından (4. sıra) önce eşleşir ve gıda ihalesi
|
||||||
|
* Sağlık görünür. Bu yüzden önce başlığa bakarız; ancak başlık sessizse
|
||||||
|
* yardımcı metinlere (kalem adları, ilan konusu, kurum adı) düşeriz.
|
||||||
|
*/
|
||||||
export function sektorBul(...parcalar) {
|
export function sektorBul(...parcalar) {
|
||||||
return classify(SECTOR_RULES, parcalar.filter(Boolean).join(' '), 'Genel');
|
for (const p of parcalar) {
|
||||||
|
if (!p) continue;
|
||||||
|
const s = classify(SECTOR_RULES, p, null);
|
||||||
|
if (s) return s;
|
||||||
|
}
|
||||||
|
return 'Genel';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user