Ce face Intl.Segmenter
segment(text) returnează o colecție parcurgibilă de bucăți. Cu granularity: "grapheme" (implicit) bucățile sunt caracterele așa cum le vede omul: un emoji compus (👨👩👧) sau o literă cu semn este o singură bucată, deși ocupă mai multe poziții în length.
Cu "word", fiecare bucată are isWordLike, care deosebește cuvintele de spații și punctuație. Cu "sentence" textul este împărțit în propoziții. Funcționează și pentru limbi fără spații între cuvinte (japoneză, thailandeză).
Parametri
| Parametru | Descriere |
|---|---|
limba |
Opțional. Codul limbii. |
optiuni |
Opțional. granularity: "grapheme", "word" sau "sentence". |
Ce returnează
Un obiect segmentator.
Exemple
Exemplul 1: Caractere vizibile față de length
const text = "Familie: 👨👩👧";
const caractere = [...new Intl.Segmenter("ro").segment(text)].map((s) => s.segment);
console.log(text.length, [...text].length, caractere.length);
console.log(caractere.at(-1));
Rezultat
17 14 10
👨👩👧
Exemplul 2: Numărarea cuvintelor și împărțirea în propoziții
const text = "Bună ziua! Ce mai faci, Ana? Eu sunt bine.";
const cuvinte = new Intl.Segmenter("ro", { granularity: "word" });
console.log([...cuvinte.segment(text)].filter((s) => s.isWordLike).length);
const propozitii = new Intl.Segmenter("ro", { granularity: "sentence" });
console.log([...propozitii.segment(text)].map((s) => s.segment.trim()));
console.log(cuvinte.resolvedOptions().granularity, Intl.Segmenter.supportedLocalesOf("ro"));
Rezultat
9
[ 'Bună ziua!', 'Ce mai faci, Ana?', 'Eu sunt bine.' ]
word [ 'ro' ]
Greșeli frecvente
- Numeri cuvintele cu
text.split(" "). Spațiile duble și punctuația dau numere greșite; foloseștegranularity: "word"cuisWordLike.
Comenzi înrudite
split: Împarte un text în bucăți după un separator și returnează un tablou.length: Numărul de caractere dintr-un șir sau numărul de elemente dintr-un tablou.String.prototype.isWellFormed / toWellFormed: Verifică dacă un text are perechi surogat rupte și le înlocuiește cu caracterul �.