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
68 lines • 8.72 kB
JavaScript
let romanNumerals;
const singleRomanNumeralPattern = /X{1,3}(IX|IV|V?I{0,3})|(IX|IV|VI{0,3})|(I{1,3})/g;
const romanNumeralsListPattern = /(X{1,3}(IX|IV|V?I{0,3})|(IX|IV|VI{0,3})|(I{1,3}))(, ?(X{1,3}(IX|IV|V?I{0,3})|(IX|IV|VI{0,3})|(I{1,3})))+$/;
const romanNumeralsRangePattern = /([IVXLCDM]+) ?- ?([IVXLCDM]+)$/;
export const splitStreetViaRomanNumerals = (input) => {
const list = romanNumeralsListPattern.exec(input);
if (list) {
const streetName = input.substring(0, input.indexOf(list[0])).trim();
return extractRomanNumerals(list[0]).map((numeral) => `${streetName} ${numeral}`);
}
else {
const range = romanNumeralsRangePattern.exec(input);
if (range) {
const streetName = input.substring(0, input.indexOf(range[0])).trim();
const bounds = extractRomanNumerals(range[0]);
if (!romanNumerals) {
romanNumerals = generateRomanNumerals(100);
}
return romanNumerals
.slice(romanNumerals.indexOf(bounds[0]), romanNumerals.indexOf(bounds[1]) + 1)
.map((numeral) => `${streetName} ${numeral}`);
}
}
return [input];
};
const extractRomanNumerals = (input) => {
let n;
const numerals = [];
do {
n = singleRomanNumeralPattern.exec(input);
if (n) {
numerals.push(n[0]);
}
} while (n);
return numerals;
};
// source: ChatGPT
const generateRomanNumerals = (n) => {
const romanNumerals = [];
const romanNumeralsMap = new Map([
[1000, "M"],
[900, "CM"],
[500, "D"],
[400, "CD"],
[100, "C"],
[90, "XC"],
[50, "L"],
[40, "XL"],
[10, "X"],
[9, "IX"],
[5, "V"],
[4, "IV"],
[1, "I"],
]);
for (let i = 1; i <= n; i++) {
let number = i;
let romanNumeral = "";
for (const [value, symbol] of romanNumeralsMap) {
while (number >= value) {
number -= value;
romanNumeral += symbol;
}
}
romanNumerals.push(romanNumeral);
}
return romanNumerals;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9tYW4tbnVtZXJhbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWV0LW1hcmtkb3duL3JvbWFuLW51bWVyYWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUksYUFBdUIsQ0FBQztBQUM1QixNQUFNLHlCQUF5QixHQUM3QixrREFBa0QsQ0FBQztBQUNyRCxNQUFNLHdCQUF3QixHQUM1QiwyR0FBMkcsQ0FBQztBQUM5RyxNQUFNLHlCQUF5QixHQUFHLGdDQUFnQyxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsS0FBYSxFQUFZLEVBQUU7SUFDckUsTUFBTSxJQUFJLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELElBQUksSUFBSSxFQUFFO1FBQ1IsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JFLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUN0QyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxVQUFVLElBQUksT0FBTyxFQUFFLENBQ3hDLENBQUM7S0FDSDtTQUFNO1FBQ0wsTUFBTSxLQUFLLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksS0FBSyxFQUFFO1lBQ1QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RFLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ2xCLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM1QztZQUNELE9BQU8sYUFBYTtpQkFDakIsS0FBSyxDQUNKLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUNyQztpQkFDQSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsVUFBVSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDakQ7S0FDRjtJQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBYSxFQUFZLEVBQUU7SUFDdkQsSUFBSSxDQUF5QixDQUFDO0lBQzlCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNwQixHQUFHO1FBQ0QsQ0FBQyxHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsRUFBRTtZQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckI7S0FDRixRQUFRLENBQUMsRUFBRTtJQUNaLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLGtCQUFrQjtBQUNsQixNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7SUFDMUMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDL0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBQ1gsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO1FBQ1gsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ1YsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO1FBQ1gsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1FBQ1YsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO1FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1FBQ1YsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO1FBQ1QsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ1QsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ1QsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0tBQ1QsQ0FBQyxDQUFDO0lBRUgsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMzQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdEIsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixFQUFFO1lBQzlDLE9BQU8sTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQztnQkFDaEIsWUFBWSxJQUFJLE1BQU0sQ0FBQzthQUN4QjtTQUNGO1FBQ0QsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUNsQztJQUVELE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImxldCByb21hbk51bWVyYWxzOiBzdHJpbmdbXTtcclxuY29uc3Qgc2luZ2xlUm9tYW5OdW1lcmFsUGF0dGVybiA9XHJcbiAgL1h7MSwzfShJWHxJVnxWP0l7MCwzfSl8KElYfElWfFZJezAsM30pfChJezEsM30pL2c7XHJcbmNvbnN0IHJvbWFuTnVtZXJhbHNMaXN0UGF0dGVybiA9XHJcbiAgLyhYezEsM30oSVh8SVZ8Vj9JezAsM30pfChJWHxJVnxWSXswLDN9KXwoSXsxLDN9KSkoLCA/KFh7MSwzfShJWHxJVnxWP0l7MCwzfSl8KElYfElWfFZJezAsM30pfChJezEsM30pKSkrJC87XHJcbmNvbnN0IHJvbWFuTnVtZXJhbHNSYW5nZVBhdHRlcm4gPSAvKFtJVlhMQ0RNXSspID8tID8oW0lWWExDRE1dKykkLztcclxuZXhwb3J0IGNvbnN0IHNwbGl0U3RyZWV0VmlhUm9tYW5OdW1lcmFscyA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xyXG4gIGNvbnN0IGxpc3QgPSByb21hbk51bWVyYWxzTGlzdFBhdHRlcm4uZXhlYyhpbnB1dCk7XHJcbiAgaWYgKGxpc3QpIHtcclxuICAgIGNvbnN0IHN0cmVldE5hbWUgPSBpbnB1dC5zdWJzdHJpbmcoMCwgaW5wdXQuaW5kZXhPZihsaXN0WzBdKSkudHJpbSgpO1xyXG4gICAgcmV0dXJuIGV4dHJhY3RSb21hbk51bWVyYWxzKGxpc3RbMF0pLm1hcChcclxuICAgICAgKG51bWVyYWwpID0+IGAke3N0cmVldE5hbWV9ICR7bnVtZXJhbH1gXHJcbiAgICApO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCByYW5nZSA9IHJvbWFuTnVtZXJhbHNSYW5nZVBhdHRlcm4uZXhlYyhpbnB1dCk7XHJcbiAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgY29uc3Qgc3RyZWV0TmFtZSA9IGlucHV0LnN1YnN0cmluZygwLCBpbnB1dC5pbmRleE9mKHJhbmdlWzBdKSkudHJpbSgpO1xyXG4gICAgICBjb25zdCBib3VuZHMgPSBleHRyYWN0Um9tYW5OdW1lcmFscyhyYW5nZVswXSk7XHJcbiAgICAgIGlmICghcm9tYW5OdW1lcmFscykge1xyXG4gICAgICAgIHJvbWFuTnVtZXJhbHMgPSBnZW5lcmF0ZVJvbWFuTnVtZXJhbHMoMTAwKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcm9tYW5OdW1lcmFsc1xyXG4gICAgICAgIC5zbGljZShcclxuICAgICAgICAgIHJvbWFuTnVtZXJhbHMuaW5kZXhPZihib3VuZHNbMF0pLFxyXG4gICAgICAgICAgcm9tYW5OdW1lcmFscy5pbmRleE9mKGJvdW5kc1sxXSkgKyAxXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5tYXAoKG51bWVyYWwpID0+IGAke3N0cmVldE5hbWV9ICR7bnVtZXJhbH1gKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIFtpbnB1dF07XHJcbn07XHJcblxyXG5jb25zdCBleHRyYWN0Um9tYW5OdW1lcmFscyA9IChpbnB1dDogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xyXG4gIGxldCBuOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xyXG4gIGNvbnN0IG51bWVyYWxzID0gW107XHJcbiAgZG8ge1xyXG4gICAgbiA9IHNpbmdsZVJvbWFuTnVtZXJhbFBhdHRlcm4uZXhlYyhpbnB1dCk7XHJcbiAgICBpZiAobikge1xyXG4gICAgICBudW1lcmFscy5wdXNoKG5bMF0pO1xyXG4gICAgfVxyXG4gIH0gd2hpbGUgKG4pO1xyXG4gIHJldHVybiBudW1lcmFscztcclxufTtcclxuXHJcbi8vIHNvdXJjZTogQ2hhdEdQVFxyXG5jb25zdCBnZW5lcmF0ZVJvbWFuTnVtZXJhbHMgPSAobjogbnVtYmVyKSA9PiB7XHJcbiAgY29uc3Qgcm9tYW5OdW1lcmFscyA9IFtdO1xyXG4gIGNvbnN0IHJvbWFuTnVtZXJhbHNNYXAgPSBuZXcgTWFwKFtcclxuICAgIFsxMDAwLCBcIk1cIl0sXHJcbiAgICBbOTAwLCBcIkNNXCJdLFxyXG4gICAgWzUwMCwgXCJEXCJdLFxyXG4gICAgWzQwMCwgXCJDRFwiXSxcclxuICAgIFsxMDAsIFwiQ1wiXSxcclxuICAgIFs5MCwgXCJYQ1wiXSxcclxuICAgIFs1MCwgXCJMXCJdLFxyXG4gICAgWzQwLCBcIlhMXCJdLFxyXG4gICAgWzEwLCBcIlhcIl0sXHJcbiAgICBbOSwgXCJJWFwiXSxcclxuICAgIFs1LCBcIlZcIl0sXHJcbiAgICBbNCwgXCJJVlwiXSxcclxuICAgIFsxLCBcIklcIl0sXHJcbiAgXSk7XHJcblxyXG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IG47IGkrKykge1xyXG4gICAgbGV0IG51bWJlciA9IGk7XHJcbiAgICBsZXQgcm9tYW5OdW1lcmFsID0gXCJcIjtcclxuICAgIGZvciAoY29uc3QgW3ZhbHVlLCBzeW1ib2xdIG9mIHJvbWFuTnVtZXJhbHNNYXApIHtcclxuICAgICAgd2hpbGUgKG51bWJlciA+PSB2YWx1ZSkge1xyXG4gICAgICAgIG51bWJlciAtPSB2YWx1ZTtcclxuICAgICAgICByb21hbk51bWVyYWwgKz0gc3ltYm9sO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByb21hbk51bWVyYWxzLnB1c2gocm9tYW5OdW1lcmFsKTtcclxuICB9XHJcblxyXG4gIHJldHVybiByb21hbk51bWVyYWxzO1xyXG59O1xyXG4iXX0=