Амазонське char folding, або як у Сіетлі зневажають поляків
IMDB має автодоповнення пошуку ув <input>. Наприклад, для рядка 'ameli':
$ alias labels='json d | json -a l'
$ curl -s 'https://v2.sg.media-imdb.com/suggestion/a/ameli.json' | labels
Amélie
Amelia Warner (I)
Austin Amelio
Amelia Rose Blaire
Amelia Clarkson
Amelia Bullmore
Amelia Heinle
Amelia EveДокументації на це, звичайно, немає. Character folding, у цьому прикладі (é → e), ми зробили самотужки. Уйоб сайт imdb це робить для користувача самостійно.
Людина ув амазоні, яка писала char folding, ніколи у житті не бачила мов центральної Європи та Балтики. Наприклад, назва польського кена Boże Ciało (я не дивився) містить у собі 2 дуже страшних літери, від яких сайту imdb стає зле.
Якщо ми зробимо запит без char folding, їхній бекенд нас розуміє:
$ curl -s 'https://v2.sg.media-imdb.com/suggestion/b/Boże%20Ciało.json' | labels
Corpus Christi
Corpus Christi
Olecia Obarianyk
Alecia Orsini Lebeda
The Cult: Edie (Ciao Baby)
Zwartboek: The Special
Anne-Marie: Ciao Adios
The C.I.A.: Oblivion(Corpus Christi--переклад назви.)
але якщо надрукувати 'boże ciało' ув бовзері на уйоб сайті, той видає галімат'ю. JS там є ретельно--як це є прийнято ув великих корпораціях та посеред жлобів, котрі корпорації завжди дбайливо косплеять--обфускейшений, але хфункцію, яка робить char folding знайти можна.
Нижче imdb_chfold()--оригінальна амазонівська версія, а
chfold--варіянт на сучасному JS, який робить теж саме, але без
помилок:
$ cat imdb.js
// mein gott, lieber vasisualy
function imdb_chfold(a) {
var G = /[àÀáÁâÂãÃäÄåÅæÆçÇèÈéÉêÊëËìÍíÍîÎïÏðÐñÑòÒóÓôÔõÕöÖøØùÙúÚûÛüÜýÝÿþÞß]/
if (a) {
var b = a.toLowerCase();
return b.length > 20 && (b = b.substr(0, 20)),
b = b.replace(/^\s*/, "").replace(/[ ]+/g, "_"),
G.test(b) && (b = b.replace(/[àÀáÁâÂãÃäÄåÅæÆ]/g, "a")
.replace(/[çÇ]/g, "c").replace(/[èÈéÉêÊëË]/g, "e")
.replace(/[ìÍíÍîÎïÏ]/g, "i").replace(/[ðÐ]/g, "d")
.replace(/[ñÑ]/g, "n").replace(/[òÒóÓôÔõÕöÖøØ]/g, "o")
.replace(/[ùÙúÚûÛüÜ]/g, "u").replace(/[ýÝÿ]/g, "y")
.replace(/[þÞ]/g, "t").replace(/[ß]/g, "ss")),
b = b.replace(/[\W]/g, "")
}
return ""
}
function chfold(s) {
return (s || '').substr(0, 20).normalize('NFD')
.replace(/\p{Diacritic}/gu, '')
.replace(/\u0142/g, "l") // a special case with the letter ł
.trim().replace(/\s+/g, "_").replace(/[\W]/g, '').toLowerCase()
}
console.log(imdb_chfold(process.argv[2]))
console.log(chfold(process.argv[2]))Щоб зрозуміти, чому 'Boże Ciało' не працює:
$ node imdb.js 'Boże Ciało'
boe_ciao
boze_cialoабо трошки інших літер:
$ node imdb.js 'ąśćńżółźćę'
o
ascnzolzceкєк
Net income increased to $8.1 billion in the first quarter, or $15.79 per diluted share, compared with net income of $2.5 billion, or $5.01 per diluted share, in first quarter 2020.

no subject
no subject
турки ув прольоті
no subject
Дякую, я тепер буду знущатися над деякими людьми: буду пропонувати їм вимовити це "слово" (я особисто щойно зміг гг)
no subject
thè ðùðëtté ñévèr çõñtàçtëð më ágáìñ--Î sûsþèçt shë fíñállÿ gót thê hïñt
no subject
no subject
What's a ðùðëtté anyway? (неосилив)
no subject
dudette, це як Dude, тільки жінкиня