UNPKG

text-to-map

Version:

Text To Map usiluje o lepší, strojově zpracovatelné využití částí vyhlášek s výčtem ulic a dalších lokací. Jde o rozšiřitelnou sadu konceptů a nástrojů, které zajistí hladký převod výčtu ulic a jejich rozsahů v lidsky srozumitelném jazyce do strojově zpra

92 lines 11.1 kB
import { createReadStream } from "fs"; import { once } from "events"; import { createInterface } from "readline"; const pattern = /^([^ –,-]+([ –-][^ ,–-]+)*)( [–-] (lichá č.|sudá č.|č.|č. p.)( (\d+[a-zA-Z]? ?[–-] ?\d+[a-zA-Z]?|(od )?\d+[a-zA-Z]?( a)? výše|\d+[a-zA-Z]?)((, ?| ?a ?)(\d+[a-zA-Z]? ?[–-] ?\d+[a-zA-Z]?|(od )?\d+[a-zA-Z]?( a)? výše|\d+[a-zA-Z]?))*)?((, ?| ?a ?)(lichá č.|sudá č.|č.|č. p.)( (\d+[a-zA-Z]? ?[–-] ?\d+[a-zA-Z]?|(od )?\d+[a-zA-Z]?( a)? výše|\d+[a-zA-Z]?)((, ?| ?a ?)(\d+[a-zA-Z]? ?[–-] ?\d+[a-zA-Z]?|(od )?\d+[a-zA-Z]?( a)? výše|\d+[a-zA-Z]?))*)?)*)?$/; function getNewDistrict(name) { return { name: name, schools: [], }; } function getNewSchool(name) { return { name: name, lines: [], }; } export async function getParsedDistricts(filePath) { const rl = createInterface({ input: createReadStream(filePath), }); let lineNumber = 1; let districts = []; let currentDistrict = null; let currentSchool = null; rl.on("line", function (line) { let s = line .trim() .replace(/ +(?= )/g, "") .replace(/–/g, "-") .replace(/nábř\./g, "nábřeží") .replace(/Nábř\./g, "Nábřeží") .replace(/nám\./g, "náměstí") .replace(/Nám\./g, "Náměstí"); if (s[0] == "#") { if (currentSchool != null) { if (currentDistrict == null) { currentDistrict = getNewDistrict(""); } currentDistrict.schools.push(currentSchool); currentSchool = null; } if (currentDistrict != null) { districts.push(currentDistrict); } currentDistrict = getNewDistrict(s.substring(1).trim()); currentSchool = null; } else if (s == "") { if (currentSchool != null) { if (currentDistrict == null) { currentDistrict = getNewDistrict(""); } currentDistrict.schools.push(currentSchool); currentSchool = null; } } else { if (currentSchool == null) { currentSchool = getNewSchool(s); } else { if (s[0] == "!") { currentSchool.lines.push(s); } else { if (pattern.test(s)) { currentSchool.lines.push(s); } else { console.error("Invalid street line on line " + lineNumber + ": " + s); } } } } lineNumber++; }); rl.on("close", function () { if (currentSchool != null) { if (currentDistrict == null) { currentDistrict = getNewDistrict(""); } currentDistrict.schools.push(currentSchool); } if (currentDistrict != null) { districts.push(currentDistrict); } // console.log(JSON.stringify(districts)); }); await once(rl, "close"); return districts; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHh0LXRvLWpzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc21kLXRvLWNzdi90eHQtdG8tanNvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDdEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTNDLE1BQU0sT0FBTyxHQUNYLCtiQUErYixDQUFDO0FBRWxjLFNBQVMsY0FBYyxDQUFDLElBQUk7SUFDMUIsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJO1FBQ1YsT0FBTyxFQUFFLEVBQUU7S0FDWixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBQUk7SUFDeEIsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJO1FBQ1YsS0FBSyxFQUFFLEVBQUU7S0FDVixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsUUFBUTtJQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUM7UUFDekIsS0FBSyxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztLQUNsQyxDQUFDLENBQUM7SUFFSCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDbkIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ25CLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztJQUMzQixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFFekIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJO1FBQzFCLElBQUksQ0FBQyxHQUFHLElBQUk7YUFDVCxJQUFJLEVBQUU7YUFDTixPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQzthQUN2QixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQzthQUNsQixPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQzthQUM3QixPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQzthQUM3QixPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQzthQUM1QixPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRTtZQUNmLElBQUksYUFBYSxJQUFJLElBQUksRUFBRTtnQkFDekIsSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFO29CQUMzQixlQUFlLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN0QztnQkFDRCxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDNUMsYUFBYSxHQUFHLElBQUksQ0FBQzthQUN0QjtZQUVELElBQUksZUFBZSxJQUFJLElBQUksRUFBRTtnQkFDM0IsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNqQztZQUVELGVBQWUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRXhELGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDdEI7YUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO2dCQUN6QixJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7b0JBQzNCLGVBQWUsR0FBRyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3RDO2dCQUNELGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1QyxhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3RCO1NBQ0Y7YUFBTTtZQUNMLElBQUksYUFBYSxJQUFJLElBQUksRUFBRTtnQkFDekIsYUFBYSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUU7b0JBQ2YsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzdCO3FCQUFNO29CQUNMLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDbkIsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzdCO3lCQUFNO3dCQUNMLE9BQU8sQ0FBQyxLQUFLLENBQ1gsOEJBQThCLEdBQUcsVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLENBQ3ZELENBQUM7cUJBQ0g7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsVUFBVSxFQUFFLENBQUM7SUFDZixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFO1FBQ2IsSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO1lBQ3pCLElBQUksZUFBZSxJQUFJLElBQUksRUFBRTtnQkFDM0IsZUFBZSxHQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN0QztZQUNELGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFO1lBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDakM7UUFFRCwwQ0FBMEM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEIsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0gfSBmcm9tIFwiZnNcIjtcclxuaW1wb3J0IHsgb25jZSB9IGZyb20gXCJldmVudHNcIjtcclxuaW1wb3J0IHsgY3JlYXRlSW50ZXJmYWNlIH0gZnJvbSBcInJlYWRsaW5lXCI7XHJcblxyXG5jb25zdCBwYXR0ZXJuID1cclxuICAvXihbXiDigJMsLV0rKFsg4oCTLV1bXiAs4oCTLV0rKSopKCBb4oCTLV0gKGxpY2jDoSDEjS58c3Vkw6EgxI0ufMSNLnzEjS4gcC4pKCAoXFxkK1thLXpBLVpdPyA/W+KAky1dID9cXGQrW2EtekEtWl0/fChvZCApP1xcZCtbYS16QS1aXT8oIGEpPyB2w73FoWV8XFxkK1thLXpBLVpdPykoKCwgP3wgP2EgPykoXFxkK1thLXpBLVpdPyA/W+KAky1dID9cXGQrW2EtekEtWl0/fChvZCApP1xcZCtbYS16QS1aXT8oIGEpPyB2w73FoWV8XFxkK1thLXpBLVpdPykpKik/KCgsID98ID9hID8pKGxpY2jDoSDEjS58c3Vkw6EgxI0ufMSNLnzEjS4gcC4pKCAoXFxkK1thLXpBLVpdPyA/W+KAky1dID9cXGQrW2EtekEtWl0/fChvZCApP1xcZCtbYS16QS1aXT8oIGEpPyB2w73FoWV8XFxkK1thLXpBLVpdPykoKCwgP3wgP2EgPykoXFxkK1thLXpBLVpdPyA/W+KAky1dID9cXGQrW2EtekEtWl0/fChvZCApP1xcZCtbYS16QS1aXT8oIGEpPyB2w73FoWV8XFxkK1thLXpBLVpdPykpKik/KSopPyQvO1xyXG5cclxuZnVuY3Rpb24gZ2V0TmV3RGlzdHJpY3QobmFtZSkge1xyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lOiBuYW1lLFxyXG4gICAgc2Nob29sczogW10sXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TmV3U2Nob29sKG5hbWUpIHtcclxuICByZXR1cm4ge1xyXG4gICAgbmFtZTogbmFtZSxcclxuICAgIGxpbmVzOiBbXSxcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGFyc2VkRGlzdHJpY3RzKGZpbGVQYXRoKSB7XHJcbiAgY29uc3QgcmwgPSBjcmVhdGVJbnRlcmZhY2Uoe1xyXG4gICAgaW5wdXQ6IGNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpLFxyXG4gIH0pO1xyXG5cclxuICBsZXQgbGluZU51bWJlciA9IDE7XHJcbiAgbGV0IGRpc3RyaWN0cyA9IFtdO1xyXG4gIGxldCBjdXJyZW50RGlzdHJpY3QgPSBudWxsO1xyXG4gIGxldCBjdXJyZW50U2Nob29sID0gbnVsbDtcclxuXHJcbiAgcmwub24oXCJsaW5lXCIsIGZ1bmN0aW9uIChsaW5lKSB7XHJcbiAgICBsZXQgcyA9IGxpbmVcclxuICAgICAgLnRyaW0oKVxyXG4gICAgICAucmVwbGFjZSgvICsoPz0gKS9nLCBcIlwiKVxyXG4gICAgICAucmVwbGFjZSgv4oCTL2csIFwiLVwiKVxyXG4gICAgICAucmVwbGFjZSgvbsOhYsWZXFwuL2csIFwibsOhYsWZZcW+w61cIilcclxuICAgICAgLnJlcGxhY2UoL07DoWLFmVxcLi9nLCBcIk7DoWLFmWXFvsOtXCIpXHJcbiAgICAgIC5yZXBsYWNlKC9uw6FtXFwuL2csIFwibsOhbcSbc3TDrVwiKVxyXG4gICAgICAucmVwbGFjZSgvTsOhbVxcLi9nLCBcIk7DoW3Em3N0w61cIik7XHJcblxyXG4gICAgaWYgKHNbMF0gPT0gXCIjXCIpIHtcclxuICAgICAgaWYgKGN1cnJlbnRTY2hvb2wgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChjdXJyZW50RGlzdHJpY3QgPT0gbnVsbCkge1xyXG4gICAgICAgICAgY3VycmVudERpc3RyaWN0ID0gZ2V0TmV3RGlzdHJpY3QoXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnREaXN0cmljdC5zY2hvb2xzLnB1c2goY3VycmVudFNjaG9vbCk7XHJcbiAgICAgICAgY3VycmVudFNjaG9vbCA9IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjdXJyZW50RGlzdHJpY3QgIT0gbnVsbCkge1xyXG4gICAgICAgIGRpc3RyaWN0cy5wdXNoKGN1cnJlbnREaXN0cmljdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1cnJlbnREaXN0cmljdCA9IGdldE5ld0Rpc3RyaWN0KHMuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XHJcblxyXG4gICAgICBjdXJyZW50U2Nob29sID0gbnVsbDtcclxuICAgIH0gZWxzZSBpZiAocyA9PSBcIlwiKSB7XHJcbiAgICAgIGlmIChjdXJyZW50U2Nob29sICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoY3VycmVudERpc3RyaWN0ID09IG51bGwpIHtcclxuICAgICAgICAgIGN1cnJlbnREaXN0cmljdCA9IGdldE5ld0Rpc3RyaWN0KFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50RGlzdHJpY3Quc2Nob29scy5wdXNoKGN1cnJlbnRTY2hvb2wpO1xyXG4gICAgICAgIGN1cnJlbnRTY2hvb2wgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoY3VycmVudFNjaG9vbCA9PSBudWxsKSB7XHJcbiAgICAgICAgY3VycmVudFNjaG9vbCA9IGdldE5ld1NjaG9vbChzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoc1swXSA9PSBcIiFcIikge1xyXG4gICAgICAgICAgY3VycmVudFNjaG9vbC5saW5lcy5wdXNoKHMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAocGF0dGVybi50ZXN0KHMpKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTY2hvb2wubGluZXMucHVzaChzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgXCJJbnZhbGlkIHN0cmVldCBsaW5lIG9uIGxpbmUgXCIgKyBsaW5lTnVtYmVyICsgXCI6IFwiICsgc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxpbmVOdW1iZXIrKztcclxuICB9KTtcclxuXHJcbiAgcmwub24oXCJjbG9zZVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoY3VycmVudFNjaG9vbCAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChjdXJyZW50RGlzdHJpY3QgPT0gbnVsbCkge1xyXG4gICAgICAgIGN1cnJlbnREaXN0cmljdCA9IGdldE5ld0Rpc3RyaWN0KFwiXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnREaXN0cmljdC5zY2hvb2xzLnB1c2goY3VycmVudFNjaG9vbCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGN1cnJlbnREaXN0cmljdCAhPSBudWxsKSB7XHJcbiAgICAgIGRpc3RyaWN0cy5wdXNoKGN1cnJlbnREaXN0cmljdCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGlzdHJpY3RzKSk7XHJcbiAgfSk7XHJcblxyXG4gIGF3YWl0IG9uY2UocmwsIFwiY2xvc2VcIik7XHJcbiAgcmV0dXJuIGRpc3RyaWN0cztcclxufVxyXG4iXX0=