urdu-text-utils 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/index.cjs +478 -157
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +37 -1
- package/dist/index.d.ts +37 -1
- package/dist/index.iife.js +1 -1
- package/dist/index.iife.js.map +1 -1
- package/dist/index.js +476 -158
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -15,60 +15,74 @@ var ASCII_DIGITS = "0123456789";
|
|
|
15
15
|
var ANY_DIGIT_RE_G = new RegExp(`[${ASCII_DIGITS}${URDU_DIGITS}${ARABIC_INDIC_DIGITS}]`, "gu");
|
|
16
16
|
var SENTENCE_SPLIT_RE = /[۔؟?!.…]+/u;
|
|
17
17
|
var WORD_SPLIT_RE = /[\s،؛؟۔٫٬…!-\/:-@\[-`{-~‐-‧«»‘’“”]+/u;
|
|
18
|
+
var URDU_LETTERS = [
|
|
19
|
+
{ ch: "\u0627", roman: "a", vowel: true, aliases: ["\u0623", "\u0625", "\u0671", "\u0672", "\u0673"] },
|
|
20
|
+
// alef + hamza/wasla forms
|
|
21
|
+
{ ch: "\u0622", roman: "aa", vowel: true },
|
|
22
|
+
// alef madda — a real Urdu letter
|
|
23
|
+
{ ch: "\u0628", roman: "b" },
|
|
24
|
+
{ ch: "\u067E", roman: "p" },
|
|
25
|
+
{ ch: "\u062A", roman: "t" },
|
|
26
|
+
{ ch: "\u0679", roman: "t" },
|
|
27
|
+
{ ch: "\u062B", roman: "s" },
|
|
28
|
+
{ ch: "\u062C", roman: "j" },
|
|
29
|
+
{ ch: "\u0686", roman: "ch" },
|
|
30
|
+
{ ch: "\u062D", roman: "h" },
|
|
31
|
+
{ ch: "\u062E", roman: "kh" },
|
|
32
|
+
{ ch: "\u062F", roman: "d" },
|
|
33
|
+
{ ch: "\u0688", roman: "d" },
|
|
34
|
+
{ ch: "\u0630", roman: "z" },
|
|
35
|
+
{ ch: "\u0631", roman: "r" },
|
|
36
|
+
{ ch: "\u0691", roman: "r" },
|
|
37
|
+
{ ch: "\u0632", roman: "z" },
|
|
38
|
+
{ ch: "\u0698", roman: "zh" },
|
|
39
|
+
{ ch: "\u0633", roman: "s" },
|
|
40
|
+
{ ch: "\u0634", roman: "sh" },
|
|
41
|
+
{ ch: "\u0635", roman: "s" },
|
|
42
|
+
{ ch: "\u0636", roman: "z" },
|
|
43
|
+
{ ch: "\u0637", roman: "t" },
|
|
44
|
+
{ ch: "\u0638", roman: "z" },
|
|
45
|
+
{ ch: "\u0639", roman: "a", vowel: true },
|
|
46
|
+
{ ch: "\u063A", roman: "gh" },
|
|
47
|
+
{ ch: "\u0641", roman: "f" },
|
|
48
|
+
{ ch: "\u0642", roman: "q" },
|
|
49
|
+
{ ch: "\u06A9", roman: "k", aliases: ["\u0643", "\u06AA"] },
|
|
50
|
+
// arabic kaf, swash kaf
|
|
51
|
+
{ ch: "\u06AF", roman: "g" },
|
|
52
|
+
{ ch: "\u0644", roman: "l" },
|
|
53
|
+
{ ch: "\u0645", roman: "m" },
|
|
54
|
+
{ ch: "\u0646", roman: "n" },
|
|
55
|
+
{ ch: "\u06BA", roman: "n" },
|
|
56
|
+
// noon ghunna
|
|
57
|
+
{ ch: "\u0648", roman: "o", vowel: true, aliases: ["\u06CB", "\u06C6", "\u06C7"] },
|
|
58
|
+
// ve, oe, u
|
|
59
|
+
{ ch: "\u0624", roman: "o", vowel: true, variantOf: "\u0648" },
|
|
60
|
+
// waw with hamza — kept, hamza is meaningful
|
|
61
|
+
{ ch: "\u06C1", roman: "h", aliases: ["\u0647", "\u06C0", "\u0629", "\u06C3", "\u06D5"] },
|
|
62
|
+
// arabic heh, heh-yeh-above, teh marbuta, ae
|
|
63
|
+
{ ch: "\u06C2", roman: "h", vowel: true, variantOf: "\u06C1" },
|
|
64
|
+
// heh goal with hamza above
|
|
65
|
+
{ ch: "\u06BE", roman: "h" },
|
|
66
|
+
// do-chashmi heh — distinct letter, aspirates the consonant before it
|
|
67
|
+
{ ch: "\u0621", roman: "" },
|
|
68
|
+
// hamza
|
|
69
|
+
{ ch: "\u06CC", roman: "i", vowel: true, aliases: ["\u064A", "\u0649", "\u06CD", "\u06D0", "\u0620"] },
|
|
70
|
+
// arabic yeh, alef maksura, yeh-with-tail, pashto e, kashmiri yeh
|
|
71
|
+
{ ch: "\u0626", roman: "i", vowel: true, variantOf: "\u06CC" },
|
|
72
|
+
// yeh with hamza above
|
|
73
|
+
{ ch: "\u06D2", roman: "e", vowel: true },
|
|
74
|
+
// bari ye — distinct letter
|
|
75
|
+
{ ch: "\u06D3", roman: "e", vowel: true, variantOf: "\u06D2" }
|
|
76
|
+
// bari ye with hamza
|
|
77
|
+
];
|
|
18
78
|
|
|
19
79
|
// src/normalize.ts
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
// yeh family -> ی. Note ے (U+06D2 bari ye) is a distinct letter and is preserved.
|
|
27
|
-
"\u064A": URDU_YEH,
|
|
28
|
-
// ي arabic yeh
|
|
29
|
-
"\u0649": URDU_YEH,
|
|
30
|
-
// ى alef maksura
|
|
31
|
-
"\u06CD": URDU_YEH,
|
|
32
|
-
// ۍ yeh with tail
|
|
33
|
-
"\u06D0": URDU_YEH,
|
|
34
|
-
// ې pashto e
|
|
35
|
-
"\u0620": URDU_YEH,
|
|
36
|
-
// ؠ kashmiri yeh
|
|
37
|
-
// kaf family -> ک
|
|
38
|
-
"\u0643": URDU_KEHEH,
|
|
39
|
-
// ك arabic kaf
|
|
40
|
-
"\u06AA": URDU_KEHEH,
|
|
41
|
-
// ڪ swash kaf
|
|
42
|
-
// heh family -> ہ. ھ (U+06BE do-chashmi heh) is a distinct letter and is preserved.
|
|
43
|
-
"\u0647": URDU_HEH_GOAL,
|
|
44
|
-
// ه arabic heh
|
|
45
|
-
"\u06C0": URDU_HEH_GOAL,
|
|
46
|
-
// ۀ heh with yeh above
|
|
47
|
-
"\u0629": URDU_HEH_GOAL,
|
|
48
|
-
// ة teh marbuta
|
|
49
|
-
"\u06C3": URDU_HEH_GOAL,
|
|
50
|
-
// ۃ teh marbuta goal
|
|
51
|
-
"\u06D5": URDU_HEH_GOAL,
|
|
52
|
-
// ە ae
|
|
53
|
-
// alef family -> ا. آ (U+0622 alef madda) is a real Urdu letter and is preserved.
|
|
54
|
-
"\u0623": ALEF,
|
|
55
|
-
// أ alef with hamza above
|
|
56
|
-
"\u0625": ALEF,
|
|
57
|
-
// إ alef with hamza below
|
|
58
|
-
"\u0671": ALEF,
|
|
59
|
-
// ٱ alef wasla
|
|
60
|
-
"\u0672": ALEF,
|
|
61
|
-
// ٲ alef with wavy hamza above
|
|
62
|
-
"\u0673": ALEF,
|
|
63
|
-
// ٳ alef with wavy hamza below
|
|
64
|
-
// waw family -> و. ؤ (U+0624) is preserved: it carries hamza meaningfully in Urdu.
|
|
65
|
-
"\u06CB": WAW,
|
|
66
|
-
// ۋ ve
|
|
67
|
-
"\u06C6": WAW,
|
|
68
|
-
// ۆ oe
|
|
69
|
-
"\u06C7": WAW
|
|
70
|
-
// ۇ u
|
|
71
|
-
};
|
|
80
|
+
var LETTER_MAP = {};
|
|
81
|
+
for (const { ch, aliases } of URDU_LETTERS) {
|
|
82
|
+
for (const alias of aliases ?? []) {
|
|
83
|
+
LETTER_MAP[alias] = ch;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
72
86
|
var digitTargets = {
|
|
73
87
|
urdu: URDU_DIGITS,
|
|
74
88
|
english: ASCII_DIGITS,
|
|
@@ -626,65 +640,15 @@ function removeStopWords(text, customStopWords) {
|
|
|
626
640
|
}
|
|
627
641
|
|
|
628
642
|
// src/collate.ts
|
|
629
|
-
var
|
|
630
|
-
"\u0627",
|
|
631
|
-
"\u0622",
|
|
632
|
-
"\u0628",
|
|
633
|
-
"\u067E",
|
|
634
|
-
"\u062A",
|
|
635
|
-
"\u0679",
|
|
636
|
-
"\u062B",
|
|
637
|
-
"\u062C",
|
|
638
|
-
"\u0686",
|
|
639
|
-
"\u062D",
|
|
640
|
-
"\u062E",
|
|
641
|
-
"\u062F",
|
|
642
|
-
"\u0688",
|
|
643
|
-
"\u0630",
|
|
644
|
-
"\u0631",
|
|
645
|
-
"\u0691",
|
|
646
|
-
"\u0632",
|
|
647
|
-
"\u0698",
|
|
648
|
-
"\u0633",
|
|
649
|
-
"\u0634",
|
|
650
|
-
"\u0635",
|
|
651
|
-
"\u0636",
|
|
652
|
-
"\u0637",
|
|
653
|
-
"\u0638",
|
|
654
|
-
"\u0639",
|
|
655
|
-
"\u063A",
|
|
656
|
-
"\u0641",
|
|
657
|
-
"\u0642",
|
|
658
|
-
"\u06A9",
|
|
659
|
-
"\u06AF",
|
|
660
|
-
"\u0644",
|
|
661
|
-
"\u0645",
|
|
662
|
-
"\u0646",
|
|
663
|
-
"\u06BA",
|
|
664
|
-
"\u0648",
|
|
665
|
-
"\u06C1",
|
|
666
|
-
"\u06BE",
|
|
667
|
-
"\u0621",
|
|
668
|
-
"\u06CC",
|
|
669
|
-
"\u06D2"
|
|
670
|
-
];
|
|
671
|
-
var VARIANTS = {
|
|
672
|
-
"\u0624": ["\u0648", 1],
|
|
673
|
-
// ؤ waw with hamza
|
|
674
|
-
"\u0626": ["\u06CC", 1],
|
|
675
|
-
// ئ yeh with hamza
|
|
676
|
-
"\u06C2": ["\u06C1", 1],
|
|
677
|
-
// ۂ heh goal with hamza
|
|
678
|
-
"\u06D3": ["\u06D2", 1]
|
|
679
|
-
// ۓ bari ye with hamza
|
|
680
|
-
};
|
|
643
|
+
var PRIMARY_LETTERS = URDU_LETTERS.filter((letter) => letter.variantOf === void 0);
|
|
681
644
|
var WEIGHTS = /* @__PURE__ */ new Map();
|
|
682
|
-
|
|
683
|
-
for (const
|
|
684
|
-
|
|
685
|
-
|
|
645
|
+
PRIMARY_LETTERS.forEach((letter, index) => WEIGHTS.set(letter.ch, [(index + 1) * 10, 0]));
|
|
646
|
+
for (const letter of URDU_LETTERS) {
|
|
647
|
+
if (letter.variantOf === void 0) continue;
|
|
648
|
+
const baseWeight = WEIGHTS.get(letter.variantOf);
|
|
649
|
+
if (baseWeight) WEIGHTS.set(letter.ch, [baseWeight[0], 1]);
|
|
686
650
|
}
|
|
687
|
-
var NON_LETTER_BASE = (
|
|
651
|
+
var NON_LETTER_BASE = (PRIMARY_LETTERS.length + 1) * 10;
|
|
688
652
|
function weightsOf(text) {
|
|
689
653
|
const out = [];
|
|
690
654
|
for (const ch of text) {
|
|
@@ -854,7 +818,7 @@ var WORD_DICTIONARY = {
|
|
|
854
818
|
"\u062C\u0646\u06C1\u0648\u06BA": "jinhon",
|
|
855
819
|
"\u0627\u0646\u06C1\u0648\u06BA": "unhon",
|
|
856
820
|
"\u0627\u067E\u0646\u0627": "apna",
|
|
857
|
-
"\
|
|
821
|
+
"\u0627\u067E\u0646\u06CC": "apni",
|
|
858
822
|
"\u0627\u067E\u0646\u06D2": "apnay",
|
|
859
823
|
"\u062E\u0648\u062F": "khud",
|
|
860
824
|
"\u06A9\u0648\u0646": "kaun",
|
|
@@ -3759,53 +3723,12 @@ var DIGRAPHS = {
|
|
|
3759
3723
|
"\u0646\u06BE": "nh",
|
|
3760
3724
|
"\u0631\u06BE": "rh"
|
|
3761
3725
|
};
|
|
3762
|
-
var LETTERS = {
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
3767
|
-
|
|
3768
|
-
"\u0679": "t",
|
|
3769
|
-
"\u062B": "s",
|
|
3770
|
-
"\u062C": "j",
|
|
3771
|
-
"\u0686": "ch",
|
|
3772
|
-
"\u062D": "h",
|
|
3773
|
-
"\u062E": "kh",
|
|
3774
|
-
"\u062F": "d",
|
|
3775
|
-
"\u0688": "d",
|
|
3776
|
-
"\u0630": "z",
|
|
3777
|
-
"\u0631": "r",
|
|
3778
|
-
"\u0691": "r",
|
|
3779
|
-
"\u0632": "z",
|
|
3780
|
-
"\u0698": "zh",
|
|
3781
|
-
"\u0633": "s",
|
|
3782
|
-
"\u0634": "sh",
|
|
3783
|
-
"\u0635": "s",
|
|
3784
|
-
"\u0636": "z",
|
|
3785
|
-
"\u0637": "t",
|
|
3786
|
-
"\u0638": "z",
|
|
3787
|
-
"\u0639": "a",
|
|
3788
|
-
"\u063A": "gh",
|
|
3789
|
-
"\u0641": "f",
|
|
3790
|
-
"\u0642": "q",
|
|
3791
|
-
"\u06A9": "k",
|
|
3792
|
-
"\u06AF": "g",
|
|
3793
|
-
"\u0644": "l",
|
|
3794
|
-
"\u0645": "m",
|
|
3795
|
-
"\u0646": "n",
|
|
3796
|
-
"\u06BA": "n",
|
|
3797
|
-
"\u0648": "o",
|
|
3798
|
-
"\u06C1": "h",
|
|
3799
|
-
"\u06BE": "h",
|
|
3800
|
-
"\u0621": "",
|
|
3801
|
-
"\u06CC": "i",
|
|
3802
|
-
"\u0626": "i",
|
|
3803
|
-
"\u06D2": "e",
|
|
3804
|
-
"\u06D3": "e",
|
|
3805
|
-
"\u0624": "o",
|
|
3806
|
-
"\u06C2": "h"
|
|
3807
|
-
};
|
|
3808
|
-
var VOWEL_LETTERS = /* @__PURE__ */ new Set(["\u0627", "\u0622", "\u0648", "\u06CC", "\u06D2", "\u0624", "\u0626", "\u06D3", "\u06C2", "\u0639"]);
|
|
3726
|
+
var LETTERS = {};
|
|
3727
|
+
var VOWEL_LETTERS = /* @__PURE__ */ new Set();
|
|
3728
|
+
for (const { ch, roman, vowel } of URDU_LETTERS) {
|
|
3729
|
+
LETTERS[ch] = roman;
|
|
3730
|
+
if (vowel) VOWEL_LETTERS.add(ch);
|
|
3731
|
+
}
|
|
3809
3732
|
function romanizeWord(word) {
|
|
3810
3733
|
const dictionary = WORD_DICTIONARY[word];
|
|
3811
3734
|
if (dictionary) return dictionary;
|
|
@@ -4394,6 +4317,401 @@ function stemUrduText(text, options = {}) {
|
|
|
4394
4317
|
}).join("");
|
|
4395
4318
|
}
|
|
4396
4319
|
|
|
4320
|
+
// src/names.ts
|
|
4321
|
+
var URDU_FIRST_NAMES = {
|
|
4322
|
+
// Male names
|
|
4323
|
+
"\u0645\u062D\u0645\u062F": "Muhammad",
|
|
4324
|
+
"\u0627\u062D\u0645\u062F": "Ahmed",
|
|
4325
|
+
"\u0639\u0644\u06CC": "Ali",
|
|
4326
|
+
"\u0639\u0645\u0631": "Umar",
|
|
4327
|
+
"\u0639\u062B\u0645\u0627\u0646": "Usman",
|
|
4328
|
+
"\u0627\u0628\u0648\u0628\u06A9\u0631": "Abubakar",
|
|
4329
|
+
"\u06CC\u0648\u0633\u0641": "Yusuf",
|
|
4330
|
+
"\u06CC\u0639\u0642\u0648\u0628": "Yaquob",
|
|
4331
|
+
"\u0627\u0633\u0645\u0627\u0639\u06CC\u0644": "Ismail",
|
|
4332
|
+
"\u0627\u0628\u0631\u0627\u06C1\u06CC\u0645": "Ibrahim",
|
|
4333
|
+
"\u0627\u0633\u062D\u0627\u0642": "Ishaq",
|
|
4334
|
+
"\u062D\u0633\u06CC\u0646": "Hussain",
|
|
4335
|
+
"\u062D\u0633\u0646": "Hasan",
|
|
4336
|
+
"\u0632\u06CC\u062F": "Zaid",
|
|
4337
|
+
"\u062D\u0645\u0632\u06C1": "Hamza",
|
|
4338
|
+
"\u0633\u0644\u0645\u0627\u0646": "Salman",
|
|
4339
|
+
"\u0641\u0631\u062D\u0627\u0646": "Farhan",
|
|
4340
|
+
"\u0627\u062F\u0646\u0627\u0646": "Adnan",
|
|
4341
|
+
"\u0628\u0644\u0627\u0644": "Bilal",
|
|
4342
|
+
"\u0637\u0627\u0631\u0642": "Tariq",
|
|
4343
|
+
"\u062C\u0627\u0648\u06CC\u062F": "Javed",
|
|
4344
|
+
"\u0639\u0631\u0641\u0627\u0646": "Irfan",
|
|
4345
|
+
"\u06A9\u0627\u0634\u0641": "Kashif",
|
|
4346
|
+
"\u0646\u062F\u06CC\u0645": "Nadeem",
|
|
4347
|
+
"\u06CC\u0627\u0633\u0631": "Yasir",
|
|
4348
|
+
"\u0631\u0636\u0648\u0627\u0646": "Rizwan",
|
|
4349
|
+
"\u0641\u06CC\u0635\u0644": "Faisal",
|
|
4350
|
+
"\u062E\u0627\u0644\u062F": "Khalid",
|
|
4351
|
+
"\u0631\u0627\u0634\u062F": "Rashid",
|
|
4352
|
+
"\u0634\u0627\u06C1\u062F": "Shahid",
|
|
4353
|
+
"\u0633\u0639\u06CC\u062F": "Saeed",
|
|
4354
|
+
"\u0646\u0639\u06CC\u0645": "Naeem",
|
|
4355
|
+
"\u0648\u0633\u06CC\u0645": "Waseem",
|
|
4356
|
+
"\u0631\u0641\u06CC\u0642": "Rafiq",
|
|
4357
|
+
"\u062C\u0645\u06CC\u0644": "Jamil",
|
|
4358
|
+
"\u0632\u0628\u06CC\u0631": "Zubair",
|
|
4359
|
+
"\u0637\u0627\u06C1\u0631": "Tahir",
|
|
4360
|
+
"\u0639\u0627\u0631\u0641": "Arif",
|
|
4361
|
+
"\u0646\u0639\u0645\u0627\u0646": "Noman",
|
|
4362
|
+
"\u062B\u0627\u0642\u0628": "Saqib",
|
|
4363
|
+
"\u0639\u062F\u06CC\u0644": "Adeel",
|
|
4364
|
+
"\u0639\u0645\u0631\u0627\u0646": "Imran",
|
|
4365
|
+
"\u0641\u0648\u0627\u062F": "Fawad",
|
|
4366
|
+
"\u0622\u0635\u0641": "Asif",
|
|
4367
|
+
"\u0634\u0639\u06CC\u0628": "Shoaib",
|
|
4368
|
+
"\u0632\u0627\u06C1\u062F": "Zahid",
|
|
4369
|
+
"\u0639\u0627\u0645\u0631": "Amer",
|
|
4370
|
+
"\u0645\u062C\u06CC\u062F": "Majid",
|
|
4371
|
+
"\u0633\u0631\u0641\u0631\u0627\u0632": "Sarfraz",
|
|
4372
|
+
"\u062D\u0645\u06CC\u062F": "Hamid",
|
|
4373
|
+
"\u0646\u0638\u06CC\u0631": "Nazir",
|
|
4374
|
+
"\u0642\u06CC\u0635\u0631": "Qaiser",
|
|
4375
|
+
"\u0644\u0637\u06CC\u0641": "Latif",
|
|
4376
|
+
"\u062A\u0646\u0648\u06CC\u0631": "Tanveer",
|
|
4377
|
+
"\u0633\u0644\u06CC\u0645\u0627\u0646": "Suleman",
|
|
4378
|
+
"\u0627\u0641\u062A\u062E\u0627\u0631": "Iftikhar",
|
|
4379
|
+
"\u0634\u0628\u06CC\u0631": "Shabbir",
|
|
4380
|
+
"\u0633\u0627\u062C\u062F": "Sajid",
|
|
4381
|
+
"\u0645\u0646\u0635\u0648\u0631": "Mansoor",
|
|
4382
|
+
"\u0633\u0644\u0637\u0627\u0646": "Sultan",
|
|
4383
|
+
"\u0646\u0635\u06CC\u0631": "Nasir",
|
|
4384
|
+
"\u062D\u0628\u06CC\u0628": "Habib",
|
|
4385
|
+
"\u0645\u0642\u0635\u0648\u062F": "Maqsood",
|
|
4386
|
+
"\u0645\u0633\u0639\u0648\u062F": "Masood",
|
|
4387
|
+
"\u0633\u06C1\u06CC\u0644": "Sohail",
|
|
4388
|
+
"\u0627\u0634\u0631\u0641": "Ashraf",
|
|
4389
|
+
"\u0645\u0628\u0627\u0631\u06A9": "Mubarak",
|
|
4390
|
+
"\u0641\u06C1\u062F": "Fahad",
|
|
4391
|
+
"\u0627\u0638\u06C1\u0631": "Azhar",
|
|
4392
|
+
"\u0648\u06A9\u06CC\u0644": "Wakeel",
|
|
4393
|
+
"\u0631\u0624\u0641": "Rauf",
|
|
4394
|
+
"\u062F\u0627\u0646\u06CC\u0627\u0644": "Daniyal",
|
|
4395
|
+
"\u0630\u06CC\u0634\u0627\u0646": "Zeeshan",
|
|
4396
|
+
"\u0645\u0635\u0637\u0641\u06CC": "Mustafa",
|
|
4397
|
+
// Female names
|
|
4398
|
+
"\u0641\u0627\u0637\u0645\u06C1": "Fatima",
|
|
4399
|
+
"\u0639\u0627\u0626\u0634\u06C1": "Ayesha",
|
|
4400
|
+
"\u062E\u062F\u06CC\u062C\u06C1": "Khadija",
|
|
4401
|
+
"\u062D\u0633\u0646\u0627": "Husna",
|
|
4402
|
+
"\u0632\u06CC\u0646\u0628": "Zainab",
|
|
4403
|
+
"\u0622\u0645\u0646\u06C1": "Amina",
|
|
4404
|
+
"\u0633\u0627\u0631\u0627": "Sara",
|
|
4405
|
+
"\u0627\u062F\u06CC\u06C1": "Adia",
|
|
4406
|
+
"\u0646\u0648\u0631": "Noor",
|
|
4407
|
+
"\u062D\u0631\u0627": "Hira",
|
|
4408
|
+
"\u0627\u0642\u0635\u06CC": "Aqsa",
|
|
4409
|
+
"\u0645\u0627\u06C1\u0645": "Maham",
|
|
4410
|
+
"\u0627\u06CC\u0645\u0627\u0646": "Iman",
|
|
4411
|
+
"\u0644\u0627\u0626\u0628\u06C1": "Laiba",
|
|
4412
|
+
"\u06C1\u0627\u0646\u06CC\u06C1": "Hania",
|
|
4413
|
+
"\u0631\u0645\u0634\u06C1": "Rimsha",
|
|
4414
|
+
"\u0645\u06CC\u0645\u0648\u0646\u06C1": "Memoona",
|
|
4415
|
+
"\u062B\u0646\u0627": "Sana",
|
|
4416
|
+
"\u062D\u0646\u0627": "Hina",
|
|
4417
|
+
"\u0627\u0642\u0631\u0627": "Iqra",
|
|
4418
|
+
"\u0641\u06CC\u0632\u0627": "Fiza",
|
|
4419
|
+
"\u0641\u0636\u06C1": "Fizza",
|
|
4420
|
+
"\u0633\u062F\u0631\u06C1": "Sidra",
|
|
4421
|
+
"\u0631\u062F\u0627": "Rida",
|
|
4422
|
+
"\u0646\u062F\u0627": "Nida",
|
|
4423
|
+
"\u0645\u0648\u0645\u06CC\u0646\u06C1": "Momina",
|
|
4424
|
+
"\u062B\u0648\u0628\u06CC\u06C1": "Sobia",
|
|
4425
|
+
"\u0646\u0627\u0626\u0644\u06C1": "Naila",
|
|
4426
|
+
"\u0628\u0634\u0631\u06CC": "Bushra",
|
|
4427
|
+
"\u0631\u062E\u0633\u0627\u0646\u06C1": "Rukhsana",
|
|
4428
|
+
"\u0634\u0627\u0632\u06CC\u06C1": "Shazia",
|
|
4429
|
+
"\u0646\u0627\u06C1\u06CC\u062F": "Naheed",
|
|
4430
|
+
"\u067E\u0631\u0648\u06CC\u0646": "Parveen",
|
|
4431
|
+
"\u0641\u0631\u0632\u0627\u0646\u06C1": "Farzana",
|
|
4432
|
+
"\u0646\u0627\u0632\u06CC\u06C1": "Nazia",
|
|
4433
|
+
"\u0635\u0628\u06CC\u062D\u06C1": "Sabiha",
|
|
4434
|
+
"\u0631\u0628\u0627\u0628": "Rubab",
|
|
4435
|
+
"\u0635\u0627\u0626\u0645\u06C1": "Saima",
|
|
4436
|
+
"\u0645\u06C1\u0631\u06CC\u0646": "Mehreen",
|
|
4437
|
+
"\u0639\u0646\u0628\u0631\u06CC\u0646": "Ambreen",
|
|
4438
|
+
"\u06A9\u0627\u0626\u0646\u0627\u062A": "Kainat",
|
|
4439
|
+
"\u0637\u0627\u06C1\u0631\u06C1": "Tahira",
|
|
4440
|
+
"\u0633\u0645\u06CC\u0639\u06C1": "Samia",
|
|
4441
|
+
"\u0633\u0627\u0645\u06CC\u06C1": "Samiya",
|
|
4442
|
+
"\u0633\u0644\u0645\u06CC": "Salma",
|
|
4443
|
+
"\u0631\u0648\u0632\u06CC\u0646\u06C1": "Rozina",
|
|
4444
|
+
"\u0645\u0631\u06CC\u0645": "Maryam",
|
|
4445
|
+
"\u0631\u0627\u0628\u0639\u06C1": "Rabia",
|
|
4446
|
+
"\u062A\u0633\u0644\u06CC\u0645": "Tasleem",
|
|
4447
|
+
"\u0627\u0633\u0645\u0627\u0621": "Asma",
|
|
4448
|
+
"\u0627\u0631\u0645": "Iram",
|
|
4449
|
+
"\u0646\u0627\u0632": "Naaz",
|
|
4450
|
+
"\u0641\u0631\u062D": "Farah",
|
|
4451
|
+
"\u0646\u0627\u062F\u06CC\u06C1": "Nadia",
|
|
4452
|
+
"\u0633\u06CC\u0645\u0627": "Seema",
|
|
4453
|
+
"\u06C1\u0645\u0627": "Huma",
|
|
4454
|
+
"\u0646\u0632\u06C1\u062A": "Nuzhat",
|
|
4455
|
+
"\u0639\u0638\u0645\u06CC": "Uzma",
|
|
4456
|
+
"\u06A9\u0631\u0646": "Kiran",
|
|
4457
|
+
"\u0633\u0645\u06CC\u0631\u0627": "Sumaira",
|
|
4458
|
+
"\u0641\u0631\u062E\u0646\u062F\u06C1": "Farkhanda",
|
|
4459
|
+
"\u062A\u0633\u0646\u06CC\u0645": "Tasneem",
|
|
4460
|
+
"\u0632\u0628\u06CC\u062F\u06C1": "Zubaida",
|
|
4461
|
+
"\u062C\u0648\u06CC\u0631\u06CC\u06C1": "Javeria",
|
|
4462
|
+
"\u0645\u06C1\u0648\u0634": "Mehwish",
|
|
4463
|
+
"\u0639\u0627\u0644\u06CC\u06C1": "Alia"
|
|
4464
|
+
};
|
|
4465
|
+
var URDU_FAMILY_NAMES = {
|
|
4466
|
+
"\u062E\u0627\u0646": "Khan",
|
|
4467
|
+
"\u0634\u0627\u06C1": "Shah",
|
|
4468
|
+
"\u0686\u0648\u06C1\u062F\u0631\u06CC": "Chaudhry",
|
|
4469
|
+
"\u0645\u0644\u06A9": "Malik",
|
|
4470
|
+
"\u0634\u06CC\u062E": "Sheikh",
|
|
4471
|
+
"\u0642\u0631\u06CC\u0634\u06CC": "Qureshi",
|
|
4472
|
+
"\u0633\u06CC\u062F": "Syed",
|
|
4473
|
+
"\u0646\u06CC\u0627\u0632\u06CC": "Niazi",
|
|
4474
|
+
"\u062C\u062F\u0648\u0646": "Jadoon",
|
|
4475
|
+
"\u0633\u0648\u0627\u062A\u06CC": "Swati",
|
|
4476
|
+
"\u06A9\u06BE\u0679\u06A9": "Khattak",
|
|
4477
|
+
"\u06CC\u0648\u0633\u0641\u0632\u0626\u06CC": "Yusufzai",
|
|
4478
|
+
"\u06A9\u06BE\u0648\u0633\u06C1": "Khosa",
|
|
4479
|
+
"\u062A\u0627\u0644\u067E\u0648\u0631": "Talpur",
|
|
4480
|
+
"\u062C\u0648\u0646\u06CC\u062C\u0648": "Junejo",
|
|
4481
|
+
"\u0628\u06BE\u0679\u06CC": "Bhatti",
|
|
4482
|
+
"\u0631\u0627\u062C\u067E\u0648\u062A": "Rajput",
|
|
4483
|
+
"\u0633\u0648\u0645\u0631\u0648": "Soomro",
|
|
4484
|
+
"\u062F\u06C1\u0627\u0631": "Dahar",
|
|
4485
|
+
"\u06AF\u06CC\u0644\u0627\u0646\u06CC": "Gillani",
|
|
4486
|
+
"\u0679\u0648\u0627\u0646\u0627\u0633": "Tiwanas",
|
|
4487
|
+
"\u0679\u0648\u0627\u0646\u06C1": "Tiwana",
|
|
4488
|
+
"\u062F\u0648\u0644\u062A\u0627\u0646\u06CC": "Doltani",
|
|
4489
|
+
"\u062F\u0627\u0644\u062A\u0627\u0646\u06CC": "Daltani",
|
|
4490
|
+
"\u06AF\u0648\u0631\u0686\u0627\u0646\u06CC": "Gurchani",
|
|
4491
|
+
"\u0631\u0646\u062F": "Rind",
|
|
4492
|
+
"\u0628\u06AF\u0679\u06CC": "Bugti",
|
|
4493
|
+
"\u0645\u0631\u06CC": "Marri",
|
|
4494
|
+
"\u0628\u0632\u06CC\u0646\u062C\u0648": "Bizenjo",
|
|
4495
|
+
"\u0645\u06CC\u0646\u06AF\u0644": "Mengal",
|
|
4496
|
+
"\u0632\u0631\u062F\u0627\u0631\u06CC": "Zardari",
|
|
4497
|
+
"\u0628\u06BE\u0679\u0648": "Bhutto",
|
|
4498
|
+
"\u0634\u0631\u06CC\u0641": "Sharif"
|
|
4499
|
+
};
|
|
4500
|
+
var HONORIFICS = {
|
|
4501
|
+
"\u062C\u0646\u0627\u0628": "Janab",
|
|
4502
|
+
"\u0635\u0627\u062D\u0628": "Sahib",
|
|
4503
|
+
"\u0627\u0633\u062A\u0627\u062F": "Ustad",
|
|
4504
|
+
"\u062D\u06A9\u06CC\u0645": "Hakim",
|
|
4505
|
+
"\u0688\u0627\u06A9\u0679\u0631": "Dr.",
|
|
4506
|
+
"\u067E\u0631\u0648\u0641\u06CC\u0633\u0631": "Prof.",
|
|
4507
|
+
"\u0627\u0646\u062C\u06CC\u0646\u0626\u0631": "Eng.",
|
|
4508
|
+
"\u0627\u06CC\u0688\u0648\u0648\u06A9\u06CC\u0679": "Adv.",
|
|
4509
|
+
"\u0631\u06CC\u0679\u0627\u0626\u0631\u0688": "Retd.",
|
|
4510
|
+
"\u0634\u06C1\u06CC\u062F": "Shaheed"
|
|
4511
|
+
};
|
|
4512
|
+
var NAME_PREFIXES = {
|
|
4513
|
+
"\u0633\u06CC\u062F": "Syed",
|
|
4514
|
+
"\u0634\u06CC\u062E": "Sheikh",
|
|
4515
|
+
"\u0686\u0648\u06C1\u062F\u0631\u06CC": "Chowdhury",
|
|
4516
|
+
"\u0645\u0644\u06A9": "Malik",
|
|
4517
|
+
"\u0645\u06CC\u0627\u06BA": "Mian",
|
|
4518
|
+
"\u062E\u0627\u0646": "Khan",
|
|
4519
|
+
"\u0628\u06CC\u06AF\u0645": "Begum",
|
|
4520
|
+
"\u0635\u0627\u062D\u0628": "Sahib"
|
|
4521
|
+
};
|
|
4522
|
+
var ENGLISH_TO_URDU = /* @__PURE__ */ new Map();
|
|
4523
|
+
for (const table of [HONORIFICS, URDU_FIRST_NAMES, URDU_FAMILY_NAMES, NAME_PREFIXES]) {
|
|
4524
|
+
for (const [urduWord, englishWord] of Object.entries(table)) {
|
|
4525
|
+
ENGLISH_TO_URDU.set(englishWord.toLowerCase(), urduWord);
|
|
4526
|
+
}
|
|
4527
|
+
}
|
|
4528
|
+
var ENGLISH_NAME_ALIASES = {
|
|
4529
|
+
hassan: "\u062D\u0633\u0646",
|
|
4530
|
+
// vs. canonical Hasan
|
|
4531
|
+
omar: "\u0639\u0645\u0631",
|
|
4532
|
+
// vs. canonical Umar
|
|
4533
|
+
omer: "\u0639\u0645\u0631",
|
|
4534
|
+
// vs. canonical Umar
|
|
4535
|
+
yaqoob: "\u06CC\u0639\u0642\u0648\u0628",
|
|
4536
|
+
// vs. canonical Yaquob
|
|
4537
|
+
jameel: "\u062C\u0645\u06CC\u0644",
|
|
4538
|
+
// vs. canonical Jamil
|
|
4539
|
+
majeed: "\u0645\u062C\u06CC\u062F",
|
|
4540
|
+
// vs. canonical Majid
|
|
4541
|
+
amna: "\u0622\u0645\u0646\u06C1",
|
|
4542
|
+
// vs. canonical Amina
|
|
4543
|
+
gilani: "\u06AF\u06CC\u0644\u0627\u0646\u06CC",
|
|
4544
|
+
// vs. canonical Gillani
|
|
4545
|
+
sahab: "\u0635\u0627\u062D\u0628",
|
|
4546
|
+
// vs. canonical Sahib
|
|
4547
|
+
doctor: "\u0688\u0627\u06A9\u0679\u0631",
|
|
4548
|
+
// vs. canonical Dr.
|
|
4549
|
+
professor: "\u067E\u0631\u0648\u0641\u06CC\u0633\u0631",
|
|
4550
|
+
// vs. canonical Prof.
|
|
4551
|
+
engineer: "\u0627\u0646\u062C\u06CC\u0646\u0626\u0631",
|
|
4552
|
+
// vs. canonical Eng.
|
|
4553
|
+
advocate: "\u0627\u06CC\u0688\u0648\u0648\u06A9\u06CC\u0679",
|
|
4554
|
+
// vs. canonical Adv.
|
|
4555
|
+
retd: "\u0631\u06CC\u0679\u0627\u0626\u0631\u0688"
|
|
4556
|
+
// vs. canonical Retd.
|
|
4557
|
+
};
|
|
4558
|
+
function transliterateSingleName(urduName) {
|
|
4559
|
+
const normalized = removeDiacritics(normalizeUrdu(urduName));
|
|
4560
|
+
const words = normalized.split(/\s+/).filter((w) => w.length > 0);
|
|
4561
|
+
const result = [];
|
|
4562
|
+
for (const word of words) {
|
|
4563
|
+
const honorific = HONORIFICS[word];
|
|
4564
|
+
if (honorific) {
|
|
4565
|
+
result.push(honorific);
|
|
4566
|
+
continue;
|
|
4567
|
+
}
|
|
4568
|
+
const firstName = URDU_FIRST_NAMES[word];
|
|
4569
|
+
if (firstName) {
|
|
4570
|
+
result.push(firstName);
|
|
4571
|
+
continue;
|
|
4572
|
+
}
|
|
4573
|
+
const familyName = URDU_FAMILY_NAMES[word];
|
|
4574
|
+
if (familyName) {
|
|
4575
|
+
result.push(familyName);
|
|
4576
|
+
continue;
|
|
4577
|
+
}
|
|
4578
|
+
const prefix = NAME_PREFIXES[word];
|
|
4579
|
+
if (prefix) {
|
|
4580
|
+
result.push(prefix);
|
|
4581
|
+
continue;
|
|
4582
|
+
}
|
|
4583
|
+
result.push(transliterateNameWord(word));
|
|
4584
|
+
}
|
|
4585
|
+
return result.join(" ");
|
|
4586
|
+
}
|
|
4587
|
+
function transliterateNameWord(word) {
|
|
4588
|
+
if (!word) return "";
|
|
4589
|
+
const consonants = {
|
|
4590
|
+
"\u0628": "b",
|
|
4591
|
+
"\u067E": "p",
|
|
4592
|
+
"\u062A": "t",
|
|
4593
|
+
"\u0679": "t",
|
|
4594
|
+
"\u062C": "j",
|
|
4595
|
+
"\u0686": "ch",
|
|
4596
|
+
"\u062D": "h",
|
|
4597
|
+
"\u062E": "kh",
|
|
4598
|
+
"\u062F": "d",
|
|
4599
|
+
"\u0688": "d",
|
|
4600
|
+
"\u0631": "r",
|
|
4601
|
+
"\u0691": "r",
|
|
4602
|
+
"\u0632": "z",
|
|
4603
|
+
"\u0633": "s",
|
|
4604
|
+
"\u0634": "sh",
|
|
4605
|
+
"\u0635": "s",
|
|
4606
|
+
"\u0636": "z",
|
|
4607
|
+
"\u0637": "t",
|
|
4608
|
+
"\u0638": "z",
|
|
4609
|
+
"\u0639": "a",
|
|
4610
|
+
"\u063A": "gh",
|
|
4611
|
+
"\u0641": "f",
|
|
4612
|
+
"\u0642": "q",
|
|
4613
|
+
"\u06A9": "k",
|
|
4614
|
+
"\u06AF": "g",
|
|
4615
|
+
"\u0644": "l",
|
|
4616
|
+
"\u0645": "m",
|
|
4617
|
+
"\u0646": "n",
|
|
4618
|
+
"\u0648": "w",
|
|
4619
|
+
"\u06C1": "h",
|
|
4620
|
+
"\u06BE": "h",
|
|
4621
|
+
"\u06CC": "y"
|
|
4622
|
+
};
|
|
4623
|
+
let result = "";
|
|
4624
|
+
const chars = [...word];
|
|
4625
|
+
for (let i = 0; i < chars.length; i++) {
|
|
4626
|
+
const ch = chars[i];
|
|
4627
|
+
const next = chars[i + 1];
|
|
4628
|
+
if (next === "\u06BE" && consonants[ch]) {
|
|
4629
|
+
const base = consonants[ch];
|
|
4630
|
+
result += base + "h";
|
|
4631
|
+
i++;
|
|
4632
|
+
continue;
|
|
4633
|
+
}
|
|
4634
|
+
if (ch === "\u0622") {
|
|
4635
|
+
result += "Aa";
|
|
4636
|
+
continue;
|
|
4637
|
+
}
|
|
4638
|
+
if (ch === "\u0627" && i === 0) {
|
|
4639
|
+
result += "A";
|
|
4640
|
+
continue;
|
|
4641
|
+
}
|
|
4642
|
+
if (ch === "\u0627") {
|
|
4643
|
+
result += "a";
|
|
4644
|
+
continue;
|
|
4645
|
+
}
|
|
4646
|
+
if (ch === "\u06CC" && i === chars.length - 1) {
|
|
4647
|
+
result += "i";
|
|
4648
|
+
continue;
|
|
4649
|
+
}
|
|
4650
|
+
if (ch === "\u06CC" && next === "\u06BA") {
|
|
4651
|
+
result += "ain";
|
|
4652
|
+
i++;
|
|
4653
|
+
continue;
|
|
4654
|
+
}
|
|
4655
|
+
if (ch === "\u0648" && i === 0) {
|
|
4656
|
+
result += "W";
|
|
4657
|
+
continue;
|
|
4658
|
+
}
|
|
4659
|
+
if (ch === "\u0648") {
|
|
4660
|
+
result += "o";
|
|
4661
|
+
continue;
|
|
4662
|
+
}
|
|
4663
|
+
if (consonants[ch]) {
|
|
4664
|
+
result += consonants[ch];
|
|
4665
|
+
continue;
|
|
4666
|
+
}
|
|
4667
|
+
result += ch;
|
|
4668
|
+
}
|
|
4669
|
+
return result.charAt(0).toUpperCase() + result.slice(1);
|
|
4670
|
+
}
|
|
4671
|
+
function transliterateNameToEnglish(urduName, options = {}) {
|
|
4672
|
+
if (!urduName) return "";
|
|
4673
|
+
const { preserveCase = true, includeHonorifics = true } = options;
|
|
4674
|
+
const result = transliterateSingleName(urduName);
|
|
4675
|
+
if (!includeHonorifics) {
|
|
4676
|
+
return result.split(/\s+/).filter((word) => !Object.values(HONORIFICS).includes(word)).join(" ");
|
|
4677
|
+
}
|
|
4678
|
+
return preserveCase ? result : result.toLowerCase();
|
|
4679
|
+
}
|
|
4680
|
+
function transliterateNameToUrdu(englishName) {
|
|
4681
|
+
if (!englishName) return "";
|
|
4682
|
+
const words = englishName.split(/\s+/).filter((w) => w.length > 0);
|
|
4683
|
+
return words.map((word) => reverseTransliterateName(word)).join(" ");
|
|
4684
|
+
}
|
|
4685
|
+
function reverseTransliterateName(englishName) {
|
|
4686
|
+
const lower = englishName.toLowerCase();
|
|
4687
|
+
return ENGLISH_TO_URDU.get(lower) ?? ENGLISH_NAME_ALIASES[lower] ?? englishName;
|
|
4688
|
+
}
|
|
4689
|
+
function extractNameParts(fullName) {
|
|
4690
|
+
const normalized = removeDiacritics(normalizeUrdu(fullName));
|
|
4691
|
+
const words = normalized.split(/\s+/).filter((w) => w.length > 0);
|
|
4692
|
+
const honorifics = Object.keys(HONORIFICS);
|
|
4693
|
+
const suffixes = ["sahib", "sahab", "\u0628\u06CC\u06AF\u0645", "begum"];
|
|
4694
|
+
let honorific;
|
|
4695
|
+
let suffix;
|
|
4696
|
+
const nameWords = [];
|
|
4697
|
+
for (const word of words) {
|
|
4698
|
+
if (honorifics.includes(word)) {
|
|
4699
|
+
if (!honorific) {
|
|
4700
|
+
honorific = word;
|
|
4701
|
+
} else {
|
|
4702
|
+
suffix = word;
|
|
4703
|
+
}
|
|
4704
|
+
} else if (suffixes.includes(word)) {
|
|
4705
|
+
suffix = word;
|
|
4706
|
+
} else {
|
|
4707
|
+
nameWords.push(word);
|
|
4708
|
+
}
|
|
4709
|
+
}
|
|
4710
|
+
const familyName = nameWords.length > 1 ? nameWords[nameWords.length - 1] : void 0;
|
|
4711
|
+
const firstName = nameWords.length > 1 ? nameWords.slice(0, -1).join(" ") : nameWords[0] || "";
|
|
4712
|
+
return { honorific, firstName, familyName, suffix };
|
|
4713
|
+
}
|
|
4714
|
+
|
|
4397
4715
|
exports.URDU_MONTHS_GREGORIAN = URDU_MONTHS_GREGORIAN;
|
|
4398
4716
|
exports.URDU_MONTHS_HIJRI = URDU_MONTHS_HIJRI;
|
|
4399
4717
|
exports.URDU_PREFIXES = URDU_PREFIXES;
|
|
@@ -4406,6 +4724,7 @@ exports.convertNumbers = convertNumbers;
|
|
|
4406
4724
|
exports.countSentences = countSentences;
|
|
4407
4725
|
exports.countWords = countWords;
|
|
4408
4726
|
exports.editDistance = editDistance;
|
|
4727
|
+
exports.extractNameParts = extractNameParts;
|
|
4409
4728
|
exports.filterStopWords = filterStopWords;
|
|
4410
4729
|
exports.foldUrdu = foldUrdu;
|
|
4411
4730
|
exports.formatUrduDate = formatUrduDate;
|
|
@@ -4434,6 +4753,8 @@ exports.timeAgoUrdu = timeAgoUrdu;
|
|
|
4434
4753
|
exports.toArabicIndicDigits = toArabicIndicDigits;
|
|
4435
4754
|
exports.toEnglishDigits = toEnglishDigits;
|
|
4436
4755
|
exports.toUrduDigits = toUrduDigits;
|
|
4756
|
+
exports.transliterateNameToEnglish = transliterateNameToEnglish;
|
|
4757
|
+
exports.transliterateNameToUrdu = transliterateNameToUrdu;
|
|
4437
4758
|
exports.urduRatio = urduRatio;
|
|
4438
4759
|
exports.urduSlug = urduSlug;
|
|
4439
4760
|
//# sourceMappingURL=index.cjs.map
|