mirror of
https://github.com/badlogic/heissepreise.git
synced 2024-06-15 21:24:15 +02:00
Generate budget brand matches in pattern.js, fix json download
This commit is contained in:
parent
930fe762d3
commit
ebca44dc4e
123
patterns.js
123
patterns.js
|
@ -2,33 +2,18 @@ const fs = require("fs");
|
|||
const analysis = require("./analysis");
|
||||
const knn = require("./site/js/knn");
|
||||
|
||||
if (!fs.existsSync("patterns")) fs.mkdirSync("patterns");
|
||||
|
||||
if (!fs.existsSync("patterns/sorted-billa-spar.json")) {
|
||||
const items = analysis.readJSON("data/latest-canonical.json.br");
|
||||
const billaSparItem = items
|
||||
.filter((item) => item.store == "billa" || item.store == "spar")
|
||||
.filter((item) => {
|
||||
return !(
|
||||
item.name.includes("Clever") ||
|
||||
item.name.includes("S-BUDGET") ||
|
||||
item.name.includes("Ja! Natürlich") ||
|
||||
item.name.includes("SPAR") ||
|
||||
item.name.includes("BILLA")
|
||||
);
|
||||
});
|
||||
knn.vectorizeItems(billaSparItem);
|
||||
const billaItems = billaSparItem.filter((item) => item.store == "billa");
|
||||
const sparItems = billaSparItem.filter((item) => item.store == "spar");
|
||||
|
||||
console.log(billaItems.length + " " + sparItems.length);
|
||||
function similaritySort(items, filter, filterA, filterB) {
|
||||
const filteredItems = items.filter(filter);
|
||||
knn.vectorizeItems(filteredItems);
|
||||
const itemsA = filteredItems.filter(filterA);
|
||||
const itemsB = filteredItems.filter(filterB);
|
||||
const sortedItems = [];
|
||||
|
||||
sparItems.forEach((item) => (item.sorted = false));
|
||||
const total = billaItems.length;
|
||||
while (billaItems.length > 0) {
|
||||
const refItem = billaItems.shift();
|
||||
const similar = knn.findMostSimilarItem(refItem, sparItems);
|
||||
itemsB.forEach((item) => (item.sorted = false));
|
||||
const total = itemsA.length;
|
||||
while (itemsA.length > 0) {
|
||||
const refItem = itemsA.shift();
|
||||
const similar = knn.findMostSimilarItem(refItem, itemsB);
|
||||
if (similar.item != null) {
|
||||
sortedItems.push(refItem);
|
||||
sortedItems.push(similar.item);
|
||||
|
@ -37,32 +22,70 @@ if (!fs.existsSync("patterns/sorted-billa-spar.json")) {
|
|||
}
|
||||
if (sortedItems.length % 100 == 0) console.log(sortedItems.length / 2 + "/" + total);
|
||||
}
|
||||
return sortedItems;
|
||||
}
|
||||
|
||||
function filterSimilarItems(items) {
|
||||
const filteredItems = [];
|
||||
for (let i = 0; i < items.length; i += 2) {
|
||||
const a = items[i];
|
||||
const b = items[i + 1];
|
||||
if (b.priceHistory.some((price) => price.price == a.price) && a.quantity == b.quantity) {
|
||||
filteredItems.push(a);
|
||||
filteredItems.push(b);
|
||||
}
|
||||
}
|
||||
return filteredItems;
|
||||
}
|
||||
|
||||
if (!fs.existsSync("patterns")) fs.mkdirSync("patterns");
|
||||
|
||||
if (!fs.existsSync("patterns/sorted-billa-spar.json")) {
|
||||
const items = analysis.readJSON("data/latest-canonical.json.br");
|
||||
const sortedItems = similaritySort(
|
||||
items,
|
||||
(item) => {
|
||||
if (!(item.store == "billa" || item.store == "spar")) return false;
|
||||
return !["Clever", "S-BUDGET", "Ja! Natürlich", "SPAR", "BILLA"].some((str) => item.name.includes(str));
|
||||
},
|
||||
(item) => item.store === "billa",
|
||||
(item) => item.store === "spar"
|
||||
);
|
||||
analysis.writeJSON("patterns/sorted-billa-spar.json", sortedItems);
|
||||
}
|
||||
|
||||
const sortedItems = analysis.readJSON("patterns/sorted-billa-spar.json");
|
||||
const filteredItems = [];
|
||||
let result = "";
|
||||
for (let i = 0; i < sortedItems.length; i += 2) {
|
||||
const a = sortedItems[i];
|
||||
const b = sortedItems[i + 1];
|
||||
const similarity = knn.dotProduct(a.vector, b.vector);
|
||||
result += "billa " + a.name + "\n";
|
||||
result += "spar " + b.name + " " + similarity.toFixed(5) + "\n\n";
|
||||
|
||||
if (b.priceHistory.some((price) => price.price == a.price) && a.quantity == b.quantity) {
|
||||
filteredItems.push(a);
|
||||
filteredItems.push(b);
|
||||
}
|
||||
{
|
||||
const sortedItems = analysis.readJSON("patterns/sorted-billa-spar.json");
|
||||
const filteredItems = filterSimilarItems(sortedItems);
|
||||
analysis.writeJSON("site/data/billa-spar-cart.json", {
|
||||
name: "Markenprodukte Billa/Spar",
|
||||
items: filteredItems.map((item) => {
|
||||
return { store: item.store, id: item.id };
|
||||
}),
|
||||
});
|
||||
}
|
||||
|
||||
if (!fs.existsSync("patterns/sorted-budget.json")) {
|
||||
const items = analysis.readJSON("data/latest-canonical.json.br");
|
||||
const sortedItems = similaritySort(
|
||||
items,
|
||||
(item) => {
|
||||
if (!(item.store == "billa" || item.store == "spar")) return false;
|
||||
return ["Clever", "S-BUDGET"].some((str) => item.name.includes(str));
|
||||
},
|
||||
(item) => item.store === "billa",
|
||||
(item) => item.store === "spar"
|
||||
);
|
||||
analysis.writeJSON("patterns/sorted-budget.json", sortedItems);
|
||||
}
|
||||
|
||||
{
|
||||
const sortedItems = analysis.readJSON("patterns/sorted-budget.json");
|
||||
const filteredItems = filterSimilarItems(sortedItems);
|
||||
analysis.writeJSON("site/data/budget-cart.json", {
|
||||
name: "Diskont-Marken Produkte Billa/Spar",
|
||||
items: filteredItems.map((item) => {
|
||||
return { store: item.store, id: item.id };
|
||||
}),
|
||||
});
|
||||
}
|
||||
console.log("Sorted: " + sortedItems.length);
|
||||
analysis.writeJSON("patterns/sorted-billa-spar-cart.json", { name: "Billa Spar Sortiert", items: sortedItems });
|
||||
console.log("Filtered: " + filteredItems.length);
|
||||
analysis.writeJSON("patterns/sorted-billa-spar-filtered-cart.json", { name: "Billa Spar Sortiert Gefiltert", items: filteredItems });
|
||||
analysis.writeJSON("site/data/billa-spar-cart.json", {
|
||||
name: "Markenprodukte Billa/Spar",
|
||||
items: filteredItems.map((item) => {
|
||||
return { store: item.store, id: item.id };
|
||||
}),
|
||||
});
|
||||
fs.writeFileSync("patterns/sorted-billa-spar.txt", result, "utf-8");
|
||||
|
|
|
@ -88,7 +88,7 @@ class ItemsList extends View {
|
|||
elements.json.addEventListener("click", (event) => {
|
||||
event.preventDefault();
|
||||
if (!this.model) return;
|
||||
this.download(this.model.filteredItems);
|
||||
this.download(this.model.filteredItems, true);
|
||||
});
|
||||
|
||||
elements.csv.addEventListener("click", (event) => {
|
||||
|
|
Loading…
Reference in New Issue
Block a user