feat(canonical-lexicon): Ford + BMW fix'leri
Some checks failed
QA Gate (P0/P1) / Test affected app (pull_request) Has been cancelled

BMW (~%81): elektronik terimleri → elektrik (audio/navigasyon/elektronik/
iletisim/multimedya/cruise), "ışık"→aydınlatma; servis/doküman sayfaları →
junk (teknik doküman/servis ve onarım/value parts). Ford (~%74): trans
varyantları speed/spd→sanziman, motor varyantları diesel/dohc→motor, gövde→
panjur. 23/23 test.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-05 12:07:09 +03:00
parent 1fcbfdf5d1
commit 44987e7e7e
2 changed files with 34 additions and 8 deletions

View File

@@ -147,6 +147,22 @@ describe("mapToCanonical", () => {
expect(mapToCanonical("ortu").slug).toBe("ic-doseme");
});
it("maps BMW electronics + lighting and Ford trans/engine variants", () => {
expect(mapToCanonical("audio, navigasyon, elektronik sistem").slug).toBe("elektrik");
expect(mapToCanonical("iletisim sistemi").slug).toBe("elektrik");
expect(mapToCanonical("distance systems, cruise control").slug).toBe("elektrik");
expect(mapToCanonical("isik verme").slug).toBe("aydinlatma");
expect(mapToCanonical("tvmt6 - 6 speed manual trans").slug).toBe("sanziman");
expect(mapToCanonical("t20dd0j - 2.0l diesel panther").slug).toBe("motor");
expect(mapToCanonical("govde ve boya").slug).toBe("panjur-panel");
});
it("flags BMW service/doc pseudo-pages as junk", () => {
expect(classifyNode("teknik dokuman")).toBe("junk");
expect(classifyNode("servis ve onarim kapsamlari")).toBe("junk");
expect(classifyNode("value parts&packages servisi ve onarim")).toBe("junk");
});
it("returns null when no keyword matches", () => {
expect(mapToCanonical("romork duzenegi cikarilabilir").slug).toBeNull();
// genuinely generic Mercedes names stay unmapped (better than wrong bucket)

View File

@@ -61,7 +61,10 @@ export const LEXICON: Record<string, Bucket> = {
"motor silindir krank piston segman biyel supap subap eksantrik karter kulbutor engine".split(
" ",
),
weak: "blok manifold conta yatak kompresyon bolmesi kam turbo mechanical".split(" "),
// "diesel"/"dohc" for Ford engine variants ("2.0L Diesel Panther", "Zetec 1.6 DOHC EFI").
weak: "blok manifold conta yatak kompresyon bolmesi kam turbo mechanical diesel dohc".split(
" ",
),
},
"yakit-sistemi": {
// 'depo' is weak, not strong: "deposu" (reservoir) recurs in fren-hidrolik-
@@ -107,7 +110,8 @@ export const LEXICON: Record<string, Bucket> = {
// "sanzuman"/"disli" are Opel spelling variants (şanzıman / dişli).
strong: "sanziman sanzuman vites diferansiyel kardan aktarim transmission gearbox".split(" "),
// 3-char stems (mil…) don't prefix-match their inflections, so list them.
weak: "flans kavrama saft mil mili miller gear disli propeller tahrik".split(" "),
// "speed"/"spd" for Ford trans variants ("6 Speed Manual Trans", "8 Spd Auto").
weak: "flans kavrama saft mil mili miller gear disli propeller tahrik speed spd".split(" "),
},
suspansiyon: {
// "suspensiyon" Opel variant; "dingil" = axle.
@@ -122,14 +126,17 @@ export const LEXICON: Record<string, Bucket> = {
},
elektrik: {
strong:
"elektrik alternator jenerator mars sarj role sigorta sensor korna bcm ecu beyin modul aku akusu enstruman gosterge electric electrical electricity".split(
"elektrik alternator jenerator mars sarj role sigorta sensor korna bcm ecu beyin modul aku akusu enstruman gosterge electric electrical electricity audio navigasyon elektronik iletisim multimedya".split(
" ",
),
weak: "kablo sinyal silecek tesisat salter salteri verici vericisi".split(" "),
weak: "kablo sinyal silecek tesisat salter salteri verici vericisi cruise".split(" "),
},
aydinlatma: {
// far/farlar/fari — 3-char "far" only matches exactly; add inflections.
strong: "aydinlatma far farlar fari stop lamba ampul sis reflektor lighting lamp".split(" "),
// "isik" = BMW "Işık verme" (lighting).
strong: "aydinlatma isik far farlar fari stop lamba ampul sis reflektor lighting lamp".split(
" ",
),
weak: "sinyal".split(" "),
},
"dis-kaporta": {
@@ -146,7 +153,7 @@ export const LEXICON: Record<string, Bucket> = {
strong: "panjur kaput kaporta davlumbaz marspiyel camurluk karoser karo cerceve".split(" "),
// "sasi"/"body"/"chassis" weak so system words (electrical…) win in phrases
// like "BODY ELECTRICAL"; "süspansiyon, şasi" also stays a clean süspansiyon.
weak: "panel tavan sac canak direk sasi body chassis roof wall underpan".split(" "),
weak: "panel tavan sac canak direk sasi govde body chassis roof wall underpan".split(" "),
},
"ic-doseme": {
strong: "koltuk doseme sirtlik arkalik guneslik minder torpido konsol seat seats trim".split(
@@ -219,8 +226,11 @@ const DOC_JUNK = new Set([
"kriko alet",
"preliminary remarks",
]);
// Catalog index/meta pages (Mercedes "SA LİSTESİ", "…resim açıklama sayfası").
const DOC_PAGE = /resim aciklama|^sa listesi$|genel bakis tablosu/;
// Catalog index / service / doc pseudo-pages — not part categories. Mercedes
// "SA LİSTESİ"/"…resim açıklama sayfası"; BMW "Teknik doküman", "Servis ve
// onarım kapsamları", "Value Parts&Packages servisi", "Parça Onarım Servisi".
const DOC_PAGE =
/resim aciklama|^sa listesi$|genel bakis tablosu|teknik dokuman|servis ve onarim|onarim servisi|onarim kapsam|value parts/;
export type NodeKind = "part" | "structural" | "junk";