urdu-text-utils 0.1.3 → 0.1.5

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 CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.5
4
+
5
+ - Expand transliteration dictionary to 1,700+ entries across classical/poetic register, commerce & digital terminology, law & governance, geography, and rich verbal inflections.
6
+ - Expand `ROMAN_VARIANTS` with popular Roman Urdu texting and chat conventions (`kidhr`, `thek`, `sahi`, `behtareen`, `mashaallah`, `jazakallah`, etc.).
7
+ - Add automated sitemap generation, OpenGraph metadata, and JSON-LD structured data for docs.
8
+
9
+ ## 0.1.4
10
+
11
+ - Add Urdu stop words module (`URDU_STOP_WORDS`, `isStopWord`, `filterStopWords`, `removeStopWords`) with a curated set of 130+ canonical functional words.
12
+ - Enhance sentence segmentation in `splitSentences` and `countSentences` with abbreviation & honorific protection (e.g. `ڈاکٹر.`, `پروفیسر.`, `صاحب.`), numeric decimal protection, and optional `preserveTerminators` option.
13
+
3
14
  ## 0.1.3
4
15
 
5
16
  - Significantly expand transliteration dictionary coverage across pronouns & oblique forms (`مجھے`, `ہمیں`, `انہیں`, `اسے`, `جسے`), everyday verbs and inflections, calendar & weekdays, numbers & ordinals, food, household objects, health, geography, and common Pakistani names.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # urdu-text-utils
1
+ # urdu-text-utils — Urdu Text Processing Toolkit for JavaScript & TypeScript
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/urdu-text-utils?style=flat-square&color=157f52&label=npm)](https://www.npmjs.com/package/urdu-text-utils)
4
4
  [![CI](https://img.shields.io/github/actions/workflow/status/Zaid-maker/urdu-text-utils/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/Zaid-maker/urdu-text-utils/actions/workflows/ci.yml)
@@ -7,9 +7,9 @@
7
7
  [![downloads](https://img.shields.io/npm/dm/urdu-text-utils?style=flat-square)](https://www.npmjs.com/package/urdu-text-utils)
8
8
  [![license](https://img.shields.io/npm/l/urdu-text-utils?style=flat-square)](./LICENSE)
9
9
 
10
- Urdu text processing toolkit for JavaScript and TypeScript. Normalization, detection, digits, diacritics, collation, search, statistics and transliteration.
10
+ A complete, lightweight **Urdu text processing toolkit for JavaScript and TypeScript** (Node.js, Deno, Bun, and browsers). Zero runtime dependencies. Provides Unicode normalization, Roman Urdu transliteration, Urdu stop words, script detection, Urdu digit conversion, diacritics (aerab / harakat) removal, alphabetical collation / sorting, fuzzy search, and text statistics.
11
11
 
12
- Zero runtime dependencies. ESM + CJS. Ships its own types.
12
+ Zero runtime dependencies. ESM + CJS. Fully typed.
13
13
 
14
14
  **[Documentation and live playground →](https://zaid-maker.github.io/urdu-text-utils/)**
15
15
 
@@ -20,8 +20,14 @@ npm install urdu-text-utils
20
20
  ```ts
21
21
  import {
22
22
  normalizeUrdu,
23
+ romanize,
24
+ romanToUrdu,
25
+ urduSlug,
26
+ isStopWord,
27
+ removeStopWords,
23
28
  isUrdu,
24
29
  countWords,
30
+ splitSentences,
25
31
  convertNumbers,
26
32
  removeDiacritics,
27
33
  sortUrdu,
@@ -76,14 +82,30 @@ hasUrduSpecificLetters("لڑکی"); // true — ڑ does not exist in Arabic
76
82
  hasUrduSpecificLetters("كتاب مدرسة"); // false
77
83
  ```
78
84
 
79
- ## Word and sentence counting
85
+ ## Word and sentence tokenization
80
86
 
81
87
  ```ts
82
88
  countWords("پاکستان ایک خوبصورت ملک ہے"); // 5
83
89
  countWords("آپ کیسے ہیں؟"); // 3 — attached punctuation is not a word
84
90
  countSentences("یہ پہلا جملہ ہے۔ یہ دوسرا ہے۔"); // 2
85
91
  splitWords(text); // string[]
86
- splitSentences(text); // string[]
92
+ splitSentences(text); // string[] — protects abbreviations like ڈاکٹر. and decimals
93
+ splitSentences(text, { preserveTerminators: true }); // preserves ending punctuation
94
+ ```
95
+
96
+ ## Stop words
97
+
98
+ ```ts
99
+ import { isStopWord, filterStopWords, removeStopWords, URDU_STOP_WORDS } from "urdu-text-utils";
100
+
101
+ isStopWord("اور"); // true
102
+ isStopWord("کتاب"); // false
103
+
104
+ filterStopWords(["یہ", "ایک", "بہترین", "کتاب", "ہے"]);
105
+ // ["بہترین", "کتاب"]
106
+
107
+ removeStopWords("پاکستان ایک خوبصورت ملک ہے");
108
+ // "پاکستان خوبصورت ملک"
87
109
  ```
88
110
 
89
111
  ## Urdu numbers
package/dist/index.cjs CHANGED
@@ -300,12 +300,51 @@ function splitWords(input) {
300
300
  if (!input) return [];
301
301
  return input.split(WORD_SPLIT_RE).map((w) => w.trim()).filter((w) => w.length > 0);
302
302
  }
303
- function countSentences(input) {
304
- return splitSentences(input).length;
303
+ var ABBREVIATIONS = [
304
+ "\u0688\u0627\u06A9\u0679\u0631",
305
+ "\u067E\u0631\u0648\u0641\u06CC\u0633\u0631",
306
+ "\u0627\u0646\u062C\u06CC\u0646\u0626\u0631",
307
+ "\u0627\u06CC\u0688\u0648\u0648\u06A9\u06CC\u0679",
308
+ "\u062C\u0646\u0627\u0628",
309
+ "\u0635\u0627\u062D\u0628",
310
+ "\u0635\u0627\u062D\u0628\u06C1",
311
+ "\u0645\u062D\u062A\u0631\u0645",
312
+ "\u0645\u062D\u062A\u0631\u0645\u06C1",
313
+ "\u0645\u0648\u0644\u0627\u0646\u0627",
314
+ "\u0645\u0641\u062A\u06CC",
315
+ "\u0639\u0644\u0627\u0645\u06C1",
316
+ "\u0628\u06CC\u06AF\u0645",
317
+ "\u0648\u063A\u06CC\u0631\u06C1",
318
+ "\u0631\u062D\u0645\u062A\u06C1",
319
+ "\u0631\u0636\u06CC",
320
+ "\u062A\u0639\u0627\u0644\u06CC",
321
+ "\u062A\u0639\u0627\u0644\u06CC\u0670",
322
+ "\u0639\u0644\u06CC\u06C1",
323
+ "\u0627\u0644\u0633\u0644\u0627\u0645",
324
+ "\u0635\u0644\u06CC",
325
+ "\u0648\u0633\u0644\u0645"
326
+ ];
327
+ var ABBREV_PATTERN = new RegExp(`(?:${ABBREVIATIONS.join("|")})[.\u06D4]`, "gu");
328
+ function countSentences(input, options) {
329
+ return splitSentences(input, options).length;
305
330
  }
306
- function splitSentences(input) {
331
+ function splitSentences(input, options = {}) {
307
332
  if (!input) return [];
308
- return input.split(SENTENCE_SPLIT_RE).map((s) => s.trim()).filter((s) => s.length > 0);
333
+ const { preserveTerminators = false } = options;
334
+ const PROTECTED_DOT = "\uE000";
335
+ const PROTECTED_URDU_FULL_STOP = "\uE001";
336
+ let sanitized = input.replace(/(\d)\.(\d)/gu, `$1${PROTECTED_DOT}$2`).replace(ABBREV_PATTERN, (match) => {
337
+ return match.replace(/\./g, PROTECTED_DOT).replace(/۔/g, PROTECTED_URDU_FULL_STOP);
338
+ });
339
+ if (preserveTerminators) {
340
+ const matches = sanitized.match(/[^۔؟?!.…]+[۔؟?!.…]+|[^۔؟?!.…]+$/gu) ?? [];
341
+ return matches.map(
342
+ (s) => s.replace(new RegExp(PROTECTED_DOT, "gu"), ".").replace(new RegExp(PROTECTED_URDU_FULL_STOP, "gu"), "\u06D4").trim()
343
+ ).filter((s) => s.length > 0);
344
+ }
345
+ return sanitized.split(SENTENCE_SPLIT_RE).map(
346
+ (s) => s.replace(new RegExp(PROTECTED_DOT, "gu"), ".").replace(new RegExp(PROTECTED_URDU_FULL_STOP, "gu"), "\u06D4").trim()
347
+ ).filter((s) => s.length > 0);
309
348
  }
310
349
  function analyzeUrdu(input) {
311
350
  const text = input ?? "";
@@ -328,6 +367,264 @@ function analyzeUrdu(input) {
328
367
  };
329
368
  }
330
369
 
370
+ // src/stopwords.ts
371
+ var URDU_STOP_WORDS = /* @__PURE__ */ new Set([
372
+ // Tense auxiliaries & copulas
373
+ "\u06C1\u06D2",
374
+ "\u06C1\u06CC\u06BA",
375
+ "\u06C1\u0648\u06BA",
376
+ "\u06C1\u0648",
377
+ "\u062A\u06BE\u0627",
378
+ "\u062A\u06BE\u06CC",
379
+ "\u062A\u06BE\u06D2",
380
+ "\u062A\u06BE\u06CC\u06BA",
381
+ "\u06C1\u0648\u06AF\u0627",
382
+ "\u06C1\u0648\u06AF\u06CC",
383
+ "\u06C1\u0648\u0646\u06AF\u06D2",
384
+ "\u06C1\u0648\u06BA\u06AF\u06D2",
385
+ "\u06C1\u0648\u0646\u0627",
386
+ "\u06C1\u0648\u0646\u06D2",
387
+ "\u06C1\u0648\u0627",
388
+ "\u06C1\u0648\u0626\u06CC",
389
+ "\u06C1\u0648\u0626\u06D2",
390
+ // Postpositions, relations & prepositions
391
+ "\u06A9\u0627",
392
+ "\u06A9\u06CC",
393
+ "\u06A9\u06D2",
394
+ "\u06A9\u0648",
395
+ "\u0646\u06D2",
396
+ "\u0633\u06D2",
397
+ "\u067E\u0631",
398
+ "\u062A\u06A9",
399
+ "\u0645\u06CC\u06BA",
400
+ "\u0644\u06CC\u06D2",
401
+ "\u0633\u0627\u062A\u06BE",
402
+ "\u0628\u063A\u06CC\u0631",
403
+ "\u0637\u0631\u062D",
404
+ "\u0637\u0631\u0641",
405
+ "\u0628\u0627\u0631\u06D2",
406
+ "\u0628\u0639\u062F",
407
+ "\u067E\u06C1\u0644\u06D2",
408
+ "\u062F\u0648\u0631\u0627\u0646",
409
+ "\u062F\u0631\u0645\u06CC\u0627\u0646",
410
+ "\u0639\u0644\u0627\u0648\u06C1",
411
+ "\u0633\u0648\u0627\u0626\u06D2",
412
+ "\u0633\u0648\u0627",
413
+ "\u0645\u0637\u0627\u0628\u0642",
414
+ "\u0628\u0627\u0639\u062B",
415
+ "\u0630\u0631\u06CC\u0639\u06D2",
416
+ "\u062A\u062D\u062A",
417
+ "\u0627\u0648\u067E\u0631",
418
+ "\u0646\u06CC\u0686\u06D2",
419
+ "\u0622\u06AF\u06D2",
420
+ "\u067E\u06CC\u0686\u06BE\u06D2",
421
+ "\u0627\u0646\u062F\u0631",
422
+ "\u0628\u0627\u06C1\u0631",
423
+ "\u067E\u0627\u0633",
424
+ "\u0642\u0631\u06CC\u0628",
425
+ "\u0646\u0632\u062F\u06CC\u06A9",
426
+ // Conjunctions & discourse markers
427
+ "\u0627\u0648\u0631",
428
+ "\u06CC\u0627",
429
+ "\u0627\u06AF\u0631",
430
+ "\u0644\u06CC\u06A9\u0646",
431
+ "\u0645\u06AF\u0631",
432
+ "\u062A\u0648",
433
+ "\u0628\u06BE\u06CC",
434
+ "\u06C1\u06CC",
435
+ "\u0646\u06C1",
436
+ "\u0646\u06C1\u06CC\u06BA",
437
+ "\u0645\u062A",
438
+ "\u0646\u0627",
439
+ "\u0628\u0644\u06A9\u06C1",
440
+ "\u062D\u0627\u0644\u0627\u0646\u06A9\u06C1",
441
+ "\u0686\u0648\u0646\u06A9\u06C1",
442
+ "\u06A9\u06CC\u0648\u0646\u06A9\u06C1",
443
+ "\u062A\u0627\u06A9\u06C1",
444
+ "\u0648\u0631\u0646\u06C1",
445
+ "\u0627\u0644\u0628\u062A\u06C1",
446
+ "\u0645\u062B\u0644\u0627\u064B",
447
+ "\u06CC\u0639\u0646\u06CC",
448
+ "\u062E\u0635\u0648\u0635\u0627\u064B",
449
+ "\u0639\u0645\u0648\u0645\u0627\u064B",
450
+ "\u0686\u0646\u0627\u0646\u0686\u06C1",
451
+ "\u062E\u0648\u0627\u06C1",
452
+ "\u0686\u0627\u06C1\u06D2",
453
+ "\u06AF\u0648\u06CC\u0627",
454
+ "\u062A\u0627\u06C1\u0645",
455
+ "\u0646\u06CC\u0632",
456
+ "\u062D\u062A\u06CC",
457
+ "\u0648\u063A\u06CC\u0631\u06C1",
458
+ "\u0635\u0631\u0641",
459
+ "\u0645\u062D\u0636",
460
+ "\u0641\u0642\u0637",
461
+ // Pronouns, determiners & question words
462
+ "\u06C1\u0645",
463
+ "\u062A\u0645",
464
+ "\u0622\u067E",
465
+ "\u0648\u06C1",
466
+ "\u06CC\u06C1",
467
+ "\u0645\u06CC\u0631\u0627",
468
+ "\u0645\u06CC\u0631\u06CC",
469
+ "\u0645\u06CC\u0631\u06D2",
470
+ "\u06C1\u0645\u0627\u0631\u0627",
471
+ "\u06C1\u0645\u0627\u0631\u06CC",
472
+ "\u06C1\u0645\u0627\u0631\u06D2",
473
+ "\u062A\u0645\u06C1\u0627\u0631\u0627",
474
+ "\u062A\u0645\u06C1\u0627\u0631\u06CC",
475
+ "\u062A\u0645\u06C1\u0627\u0631\u06D2",
476
+ "\u0622\u067E\u06A9\u0627",
477
+ "\u0622\u067E\u06A9\u06CC",
478
+ "\u0622\u067E\u06A9\u06D2",
479
+ "\u0627\u0633",
480
+ "\u0627\u0633\u06A9\u0627",
481
+ "\u0627\u0633\u06A9\u06CC",
482
+ "\u0627\u0633\u06A9\u06D2",
483
+ "\u0627\u0633\u06D2",
484
+ "\u0627\u0646",
485
+ "\u0627\u0646\u06A9\u0627",
486
+ "\u0627\u0646\u06A9\u06CC",
487
+ "\u0627\u0646\u06A9\u06D2",
488
+ "\u0627\u0646\u06C1\u06CC\u06BA",
489
+ "\u0645\u062C\u06BE\u06D2",
490
+ "\u06C1\u0645\u06CC\u06BA",
491
+ "\u062A\u0645\u06C1\u06CC\u06BA",
492
+ "\u062C\u0633",
493
+ "\u062C\u0633\u06A9\u0627",
494
+ "\u062C\u0633\u06A9\u06CC",
495
+ "\u062C\u0633\u06A9\u06D2",
496
+ "\u062C\u0633\u06D2",
497
+ "\u062C\u0646",
498
+ "\u062C\u0646\u06A9\u0627",
499
+ "\u062C\u0646\u06A9\u06CC",
500
+ "\u062C\u0646\u06A9\u06D2",
501
+ "\u062C\u0646\u06C1\u0648\u06BA",
502
+ "\u0627\u0646\u06C1\u0648\u06BA",
503
+ "\u06A9\u0633",
504
+ "\u06A9\u0633\u06A9\u0627",
505
+ "\u06A9\u0633\u06A9\u06CC",
506
+ "\u06A9\u0633\u06A9\u06D2",
507
+ "\u06A9\u0633\u06D2",
508
+ "\u06A9\u0633\u06A9\u0648",
509
+ "\u06A9\u0648\u0646",
510
+ "\u06A9\u06CC\u0627",
511
+ "\u06A9\u06C1\u0627\u06BA",
512
+ "\u06A9\u062F\u06BE\u0631",
513
+ "\u0627\u062F\u06BE\u0631",
514
+ "\u062C\u062F\u06BE\u0631",
515
+ "\u06A9\u0628",
516
+ "\u06A9\u06CC\u0648\u06BA",
517
+ "\u06A9\u06CC\u0633\u06D2",
518
+ "\u06A9\u06CC\u0633\u0627",
519
+ "\u06A9\u06CC\u0633\u06CC",
520
+ "\u06A9\u062A\u0646\u0627",
521
+ "\u06A9\u062A\u0646\u06CC",
522
+ "\u06A9\u062A\u0646\u06D2",
523
+ "\u062C\u0648",
524
+ "\u0633\u0628",
525
+ "\u0633\u0628\u06BE\u06CC",
526
+ "\u06A9\u0648\u0626\u06CC",
527
+ "\u06A9\u0686\u06BE",
528
+ "\u06C1\u0631",
529
+ "\u0627\u06CC\u06A9",
530
+ "\u0627\u067E\u0646\u0627",
531
+ "\u0627\u067E\u0646\u06CC",
532
+ "\u0627\u067E\u0646\u06D2",
533
+ "\u062E\u0648\u062F",
534
+ // Common light/auxiliary verb forms
535
+ "\u06A9\u0631\u0646\u0627",
536
+ "\u06A9\u0631\u062A\u0627",
537
+ "\u06A9\u0631\u062A\u06CC",
538
+ "\u06A9\u0631\u062A\u06D2",
539
+ "\u06A9\u0631\u06CC\u06BA",
540
+ "\u06A9\u0631\u0648",
541
+ "\u06A9\u0631",
542
+ "\u06A9\u0631\u0646\u06D2",
543
+ "\u06A9\u06CC\u06D2",
544
+ "\u062C\u0627\u0646\u0627",
545
+ "\u062C\u0627\u062A\u0627",
546
+ "\u062C\u0627\u062A\u06CC",
547
+ "\u062C\u0627\u062A\u06D2",
548
+ "\u062C\u0627\u0626\u06D2",
549
+ "\u062C\u0627\u0626\u06CC\u06BA",
550
+ "\u062C\u0627\u0624",
551
+ "\u062C\u0627",
552
+ "\u062C\u0627\u0646\u06D2",
553
+ "\u06AF\u06CC\u0627",
554
+ "\u06AF\u0626\u06CC",
555
+ "\u06AF\u0626\u06D2",
556
+ "\u0622\u0646\u0627",
557
+ "\u0622\u062A\u0627",
558
+ "\u0622\u062A\u06CC",
559
+ "\u0622\u062A\u06D2",
560
+ "\u0622\u0626\u06D2",
561
+ "\u0622\u0626\u06CC\u06BA",
562
+ "\u0622\u06CC\u0627",
563
+ "\u0622\u0626\u06CC",
564
+ "\u0622\u0646\u06D2",
565
+ "\u0622\u0624",
566
+ "\u0622",
567
+ "\u062F\u06CC\u0646\u0627",
568
+ "\u062F\u06CC\u062A\u0627",
569
+ "\u062F\u06CC\u062A\u06CC",
570
+ "\u062F\u06CC\u062A\u06D2",
571
+ "\u062F\u06CC\u0627",
572
+ "\u062F\u06CC\u06D2",
573
+ "\u062F\u06D2",
574
+ "\u062F\u0648",
575
+ "\u062F\u06CC\u06BA",
576
+ "\u062F\u06CC\u0646\u06D2",
577
+ "\u0644\u06CC\u0646\u0627",
578
+ "\u0644\u06CC\u062A\u0627",
579
+ "\u0644\u06CC\u062A\u06CC",
580
+ "\u0644\u06CC\u062A\u06D2",
581
+ "\u0644\u06CC\u0627",
582
+ "\u0644\u06D2",
583
+ "\u0644\u0648",
584
+ "\u0644\u06CC\u06BA",
585
+ "\u0644\u06CC\u0646\u06D2",
586
+ "\u0631\u06C1\u0646\u0627",
587
+ "\u0631\u06C1\u0627",
588
+ "\u0631\u06C1\u06CC",
589
+ "\u0631\u06C1\u06D2",
590
+ "\u0631\u06C1\u062A\u0627",
591
+ "\u0631\u06C1\u062A\u06CC",
592
+ "\u0631\u06C1\u062A\u06D2",
593
+ "\u0631\u06C1\u0646\u06D2",
594
+ "\u0633\u06A9\u0646\u0627",
595
+ "\u0633\u06A9\u062A\u0627",
596
+ "\u0633\u06A9\u062A\u06CC",
597
+ "\u0633\u06A9\u062A\u06D2",
598
+ "\u0648\u0627\u0644\u0627",
599
+ "\u0648\u0627\u0644\u06CC",
600
+ "\u0648\u0627\u0644\u06D2"
601
+ ]);
602
+ function toStopWordSet(custom) {
603
+ if (!custom) return URDU_STOP_WORDS;
604
+ if (custom instanceof Set) return custom;
605
+ return new Set(custom.map((w) => normalizeUrdu(w.trim())));
606
+ }
607
+ function isStopWord(word, customStopWords) {
608
+ if (!word) return false;
609
+ const normalized = normalizeUrdu(word.trim());
610
+ const stopSet = toStopWordSet(customStopWords);
611
+ return stopSet.has(normalized);
612
+ }
613
+ function filterStopWords(words, customStopWords) {
614
+ if (!words || words.length === 0) return [];
615
+ const stopSet = toStopWordSet(customStopWords);
616
+ return words.filter((w) => {
617
+ const normalized = normalizeUrdu(w.trim());
618
+ return normalized.length > 0 && !stopSet.has(normalized);
619
+ });
620
+ }
621
+ function removeStopWords(text, customStopWords) {
622
+ if (!text) return "";
623
+ const words = splitWords(text);
624
+ const filtered = filterStopWords(words, customStopWords);
625
+ return filtered.join(" ");
626
+ }
627
+
331
628
  // src/collate.ts
332
629
  var ALPHABET = [
333
630
  "\u0627",
@@ -2588,7 +2885,191 @@ var WORD_DICTIONARY = {
2588
2885
  "\u0641\u0631\u0632\u0627\u0646\u06C1": "farzana",
2589
2886
  "\u0637\u0627\u06C1\u0631\u06C1": "tahira",
2590
2887
  "\u0639\u0635\u0645\u062A": "ismat",
2591
- "\u0646\u0635\u0631\u062A": "nusrat"
2888
+ "\u0646\u0635\u0631\u062A": "nusrat",
2889
+ // ---- classical, poetic and literary vocabulary ----
2890
+ "\u06AF\u0644\u0633\u062A\u0627\u06BA": "gulistan",
2891
+ "\u06AF\u0644\u0634\u0646": "gulshan",
2892
+ "\u0628\u06C1\u0627\u0631\u0627\u06BA": "baharan",
2893
+ "\u067E\u0631\u0648\u0627\u0646\u06C1": "parwana",
2894
+ "\u0634\u0645\u0639": "shama",
2895
+ "\u0633\u0627\u0642\u06CC": "saqi",
2896
+ "\u0645\u06CC\u062E\u0627\u0646\u06C1": "maikhana",
2897
+ "\u062C\u0627\u0645": "jaam",
2898
+ "\u0635\u0631\u0627\u062D\u06CC": "surahi",
2899
+ "\u0631\u0646\u062F": "rind",
2900
+ "\u0645\u062D\u062A\u0633\u0628": "muhtasib",
2901
+ "\u0642\u0627\u0635\u062F": "qasid",
2902
+ "\u067E\u06CC\u0627\u0645\u0628\u0631": "payambar",
2903
+ "\u0631\u0642\u06CC\u0628": "raqeeb",
2904
+ "\u062D\u0628\u06CC\u0628": "habeeb",
2905
+ "\u0645\u062D\u0628\u0648\u0628": "mahboob",
2906
+ "\u0645\u0639\u0634\u0648\u0642": "mashooq",
2907
+ "\u0635\u0646\u0645": "sanam",
2908
+ "\u0633\u0646\u06AF\u062F\u0644": "sangdil",
2909
+ "\u0628\u06CC\u062F\u0631\u062F": "bedard",
2910
+ "\u063A\u0645\u06AF\u0633\u0627\u0631": "ghamgusar",
2911
+ "\u0645\u0633\u06CC\u062D\u0627": "maseeha",
2912
+ "\u0646\u0627\u0635\u062D": "nasih",
2913
+ "\u0648\u0627\u0639\u0638": "waiz",
2914
+ "\u062A\u0634\u0646\u06C1": "tishna",
2915
+ "\u06AF\u06CC\u0633\u0648": "gesu",
2916
+ "\u0632\u0644\u0641": "zulf",
2917
+ "\u062F\u06CC\u062F\u0627\u0631": "deedar",
2918
+ "\u062C\u0644\u0648\u06C1": "jalwa",
2919
+ "\u062D\u062C\u0627\u0628": "hijab",
2920
+ "\u0646\u0642\u0627\u0628": "niqab",
2921
+ "\u0633\u0648\u0632": "soz",
2922
+ "\u0622\u06C1\u0646\u06AF": "aahang",
2923
+ "\u0646\u063A\u0645\u06C1": "naghma",
2924
+ "\u062A\u0631\u0627\u0646\u06C1": "tarana",
2925
+ "\u062F\u0627\u0633\u062A\u0627\u06BA": "dastan",
2926
+ "\u062D\u0648\u0631": "hoor",
2927
+ "\u067E\u0631\u06CC": "pari",
2928
+ "\u062F\u06CC\u0648": "deo",
2929
+ "\u062C\u0627\u062F\u0648": "jadoo",
2930
+ "\u0637\u0644\u0633\u0645": "tilism",
2931
+ "\u0627\u0641\u0633\u0648\u0646": "afsoon",
2932
+ "\u0633\u062D\u0631\u0627\u0646\u06AF\u06CC\u0632": "sehrangeez",
2933
+ "\u0641\u0633\u0648\u06BA": "fusoon",
2934
+ "\u062C\u0646\u0648\u06BA": "junoon",
2935
+ "\u0633\u0648\u062F\u0627": "sauda",
2936
+ "\u0648\u062D\u0634\u062A": "wahshat",
2937
+ "\u0627\u0631\u0645\u0627\u0646": "arman",
2938
+ "\u0630\u0648\u0642": "zauq",
2939
+ "\u0648\u062C\u062F": "wajd",
2940
+ "\u0645\u0633\u062A\u06CC": "masti",
2941
+ "\u06A9\u06CC\u0641": "kaif",
2942
+ "\u062E\u0645\u0627\u0631": "khumar",
2943
+ "\u0646\u0634\u06C1": "nasha",
2944
+ "\u0628\u06D2\u062E\u0648\u062F\u06CC": "bekhudi",
2945
+ // ---- commerce, finance and modern technology ----
2946
+ "\u062E\u0631\u06CC\u062F\u0627\u0631\u06CC": "khareedari",
2947
+ "\u0641\u0631\u0648\u062E\u062A": "farokht",
2948
+ "\u0633\u0631\u0645\u0627\u06CC\u06C1": "sarmaya",
2949
+ "\u0642\u0631\u0636\u06C1": "qarza",
2950
+ "\u0628\u06CC\u0646\u06A9\u0627\u0631\u06CC": "bainkari",
2951
+ "\u0642\u0633\u0637": "qist",
2952
+ "\u0627\u062F\u0627\u0626\u06CC\u06AF\u06CC": "adaigi",
2953
+ "\u0622\u0645\u062F\u0646\u06CC": "aamdani",
2954
+ "\u062E\u0631\u0686\u06C1": "kharcha",
2955
+ "\u0628\u0686\u062A": "bachat",
2956
+ "\u0645\u062D\u0635\u0648\u0644": "mahsool",
2957
+ "\u0645\u0627\u0644\u06CC\u062A": "maliyat",
2958
+ "\u06A9\u062A\u0627\u0628\u062A": "kitabat",
2959
+ "\u0645\u0646\u0688\u06CC": "mandi",
2960
+ "\u0646\u06CC\u0644\u0627\u0645\u06CC": "neelami",
2961
+ "\u0628\u0648\u0644\u06CC": "boli",
2962
+ "\u0634\u0631\u0627\u06A9\u062A": "sharakat",
2963
+ "\u062D\u0635\u0635": "hisas",
2964
+ "\u0627\u0633\u0679\u0627\u06A9": "stock",
2965
+ "\u062F\u0648\u0644\u062A": "daulat",
2966
+ "\u062B\u0631\u0648\u062A": "sarwat",
2967
+ "\u063A\u0631\u0628\u062A": "ghurbat",
2968
+ "\u0627\u0641\u0644\u0627\u0633": "iflas",
2969
+ "\u067E\u0631\u0648\u0641\u0627\u0626\u0644": "profile",
2970
+ "\u0633\u06CC\u0679\u0646\u06AF\u0632": "settings",
2971
+ "\u0646\u0648\u0679\u06CC\u0641\u06A9\u06CC\u0634\u0646": "notification",
2972
+ "\u0633\u0627\u0626\u0679": "site",
2973
+ "\u067E\u0648\u0631\u0679\u0644": "portal",
2974
+ // ---- administration, law, governance and politics ----
2975
+ "\u0639\u062F\u0644\u06CC\u06C1": "adliya",
2976
+ "\u0645\u0642\u0646\u0646\u06C1": "muqannana",
2977
+ "\u0627\u0646\u062A\u0638\u0627\u0645\u06CC\u06C1": "intizamia",
2978
+ "\u062D\u06A9\u0645\u0631\u0627\u0646\u06CC": "hukmrani",
2979
+ "\u062C\u0645\u06C1\u0648\u0631\u06CC\u06C1": "jamhooria",
2980
+ "\u0635\u062F\u0627\u0631\u062A": "sadarat",
2981
+ "\u0648\u0632\u0627\u0631\u062A": "wazarat",
2982
+ "\u0633\u0641\u0627\u0631\u062A": "safarat",
2983
+ "\u0642\u0648\u0646\u0635\u0644": "consul",
2984
+ "\u0633\u0641\u0627\u0631\u062A\u062E\u0627\u0646\u06C1": "safaratkhana",
2985
+ "\u0622\u0626\u06CC\u0646\u06CC": "aaeeni",
2986
+ "\u062F\u0633\u062A\u0648\u0631\u06CC": "dastoori",
2987
+ "\u0641\u0648\u062C\u062F\u0627\u0631\u06CC": "faujdari",
2988
+ "\u062F\u06CC\u0648\u0627\u0646\u06CC": "deewani",
2989
+ "\u0645\u0642\u062F\u0645\u06C1": "muqaddama",
2990
+ "\u0633\u0645\u0627\u0639\u062A": "samaat",
2991
+ "\u062F\u0631\u062E\u0648\u0627\u0633\u062A": "darkhwast",
2992
+ "\u0627\u067E\u06CC\u0644": "appeal",
2993
+ "\u0636\u0645\u0627\u0646\u062A": "zamanat",
2994
+ "\u0628\u0631\u06CC\u062A": "bariyat",
2995
+ "\u0639\u0645\u0631\u0642\u06CC\u062F": "umrqaid",
2996
+ "\u067E\u06BE\u0627\u0646\u0633\u06CC": "phansi",
2997
+ "\u0648\u06A9\u0627\u0644\u062A": "wukalat",
2998
+ "\u062D\u0642\u0648\u0642": "huqooq",
2999
+ "\u0641\u0631\u0627\u0626\u0636": "faraiz",
3000
+ "\u0634\u06C1\u0631\u06CC": "shahri",
3001
+ "\u0634\u06C1\u0631\u06CC\u062A": "shahriyat",
3002
+ "\u0634\u0646\u0627\u062E\u062A": "shanakht",
3003
+ "\u0646\u0627\u062F\u0631\u0627": "nadra",
3004
+ "\u0645\u062C\u0644\u0633": "majlis",
3005
+ "\u0634\u0648\u0631\u06CC": "shoora",
3006
+ "\u062D\u0644\u06CC\u0641": "haleef",
3007
+ "\u0645\u062E\u0627\u0644\u0641": "mukhalif",
3008
+ "\u0628\u063A\u0627\u0648\u062A": "baghawat",
3009
+ // ---- geography, nature and terrain ----
3010
+ "\u062E\u0637\u06C1": "khitta",
3011
+ "\u0635\u0648\u0628\u06C1": "sooba",
3012
+ "\u0636\u0644\u0639": "zila",
3013
+ "\u062A\u062D\u0635\u06CC\u0644": "tehsil",
3014
+ "\u06CC\u0648\u0646\u06CC\u0646": "union",
3015
+ "\u06A9\u0648\u0646\u0633\u0644": "council",
3016
+ "\u0642\u0631\u06CC\u06C1": "qarya",
3017
+ "\u0628\u0633\u062A\u06CC": "basti",
3018
+ "\u0634\u06C1\u0631\u0633\u062A\u0627\u0646": "shehristan",
3019
+ "\u0646\u062E\u0644\u0633\u062A\u0627\u0646": "nakhalistan",
3020
+ "\u06A9\u0648\u06C1\u0633\u0627\u0631": "kohsar",
3021
+ "\u06A9\u06C1\u0633\u0627\u0631": "kuhsar",
3022
+ "\u06AF\u06BE\u0627\u0679\u06CC": "ghati",
3023
+ "\u0648\u0627\u062F\u06CC\u0627\u06BA": "wadiyan",
3024
+ "\u06A9\u06BE\u0627\u0626\u06CC": "khaai",
3025
+ "\u062E\u0644\u06CC\u062C": "khaleej",
3026
+ "\u0631\u0627\u0633": "raas",
3027
+ // ---- verbs and verbal inflections ----
3028
+ "\u0645\u0627\u0646\u062A\u06D2": "mante",
3029
+ "\u0645\u0627\u0646\u062A\u06CC": "manti",
3030
+ "\u0645\u0627\u0646\u0648": "mano",
3031
+ "\u0679\u06BE\u06C1\u0631\u0646\u0627": "theharna",
3032
+ "\u0679\u06BE\u06C1\u0631\u0627": "thehra",
3033
+ "\u0679\u06BE\u06C1\u0631\u0648": "thehro",
3034
+ "\u0679\u06BE\u06C1\u0631\u062A\u06D2": "thehrte",
3035
+ "\u0633\u0645\u062C\u06BE\u0627\u0624": "samjhao",
3036
+ "\u067E\u06C1\u0646\u0686\u0627\u0624": "pohonchao",
3037
+ "\u0644\u0679\u0627\u0646\u0627": "lutana",
3038
+ "\u0644\u0679\u0627\u06CC\u0627": "lutaya",
3039
+ "\u0644\u0648\u0679\u0627": "loota",
3040
+ "\u067E\u06A9\u0627\u0631\u0627": "pukara",
3041
+ "\u067E\u06A9\u0627\u0631\u0648": "pukaro",
3042
+ "\u062C\u06BE\u06A9\u0646\u0627": "jhukna",
3043
+ "\u062C\u06BE\u06A9\u0627": "jhuka",
3044
+ "\u062C\u06BE\u06A9\u0627\u0624": "jhukao",
3045
+ "\u062C\u06BE\u06A9\u0627\u0646\u0627": "jhukana",
3046
+ "\u062A\u06BE\u0627\u0645\u0646\u0627": "thamna",
3047
+ "\u062A\u06BE\u0627\u0645\u0627": "thama",
3048
+ "\u062A\u06BE\u0627\u0645\u0648": "thamo",
3049
+ "\u0633\u0646\u0648\u0627\u0631\u0646\u0627": "sanwarna",
3050
+ "\u0633\u0646\u0648\u0627\u0631\u0627": "sanwara",
3051
+ "\u0646\u06A9\u06BE\u0627\u0631\u0646\u0627": "nikharna",
3052
+ "\u0646\u06A9\u06BE\u0627\u0631\u0627": "nikhara",
3053
+ "\u0633\u0646\u0628\u06BE\u0627\u0644\u0646\u0627": "sambhalna",
3054
+ "\u0633\u0646\u0628\u06BE\u0627\u0644\u0627": "sambhala",
3055
+ "\u0633\u0646\u0628\u06BE\u0627\u0644\u0648": "sambhalo",
3056
+ "\u067E\u0686\u06BE\u062A\u0627\u0646\u0627": "pachtana",
3057
+ "\u067E\u0686\u06BE\u062A\u0627\u06CC\u0627": "pachtaya",
3058
+ "\u06AF\u06BE\u0628\u0631\u0627\u0646\u0627": "ghabrana",
3059
+ "\u06AF\u06BE\u0628\u0631\u0627\u06CC\u0627": "ghabraya",
3060
+ "\u0645\u0633\u06A9\u0631\u0627\u0646\u0627": "muskurana",
3061
+ "\u0645\u0633\u06A9\u0631\u0627\u06CC\u0627": "muskuraya",
3062
+ "\u0645\u0633\u06A9\u0631\u0627\u06C1\u0679": "muskurahat",
3063
+ "\u062C\u06BE\u0646\u062C\u06BE\u0644\u0627\u0646\u0627": "jhanjhlana",
3064
+ "\u062A\u0644\u0645\u0644\u0627\u0646\u0627": "tilmilana",
3065
+ "\u0628\u0644\u0628\u0644\u0627\u0646\u0627": "bilbilana",
3066
+ "\u06A9\u06BE\u0644\u06A9\u06BE\u0644\u0627\u0646\u0627": "khilkhilana",
3067
+ "\u06A9\u06BE\u0679\u06A9\u06BE\u0679\u0627\u0646\u0627": "khatkhatana",
3068
+ "\u062C\u06BE\u0644\u0645\u0644\u0627\u0646\u0627": "jhilmilana",
3069
+ "\u0686\u0645\u0686\u0645\u0627\u062A\u0627": "chamchamata",
3070
+ "\u0644\u06C1\u0631\u0627\u0646\u0627": "lehrana",
3071
+ "\u0644\u06C1\u0631\u0627\u06CC\u0627": "lehraya",
3072
+ "\u0644\u06C1\u0631": "lehar"
2592
3073
  };
2593
3074
  var ROMAN_VARIANTS = {
2594
3075
  hay: "\u06C1\u06D2",
@@ -2776,7 +3257,35 @@ var ROMAN_VARIANTS = {
2776
3257
  daur: "\u062F\u0648\u0631",
2777
3258
  kurta: "\u06A9\u0631\u062A\u0627",
2778
3259
  haseen: "\u062D\u0633\u06CC\u0646",
2779
- malik: "\u0645\u0644\u06A9"
3260
+ malik: "\u0645\u0644\u06A9",
3261
+ kidhr: "\u06A9\u062F\u06BE\u0631",
3262
+ idhr: "\u0627\u062F\u06BE\u0631",
3263
+ jdhr: "\u062C\u062F\u06BE\u0631",
3264
+ thek: "\u0679\u06BE\u06CC\u06A9",
3265
+ thk: "\u0679\u06BE\u06CC\u06A9",
3266
+ sahi: "\u0635\u062D\u06CC\u062D",
3267
+ galat: "\u063A\u0644\u0637",
3268
+ ghalat: "\u063A\u0644\u0637",
3269
+ sb: "\u0633\u0628",
3270
+ hmsha: "\u06C1\u0645\u06CC\u0634\u06C1",
3271
+ kbhi: "\u06A9\u0628\u06BE\u06CC",
3272
+ aksar: "\u0627\u06A9\u062B\u0631",
3273
+ behtareen: "\u0628\u06C1\u062A\u0631\u06CC\u0646",
3274
+ zabardast: "\u0632\u0628\u0631\u062F\u0633\u062A",
3275
+ shandar: "\u0634\u0627\u0646\u062F\u0627\u0631",
3276
+ khoob: "\u062E\u0648\u0628",
3277
+ khub: "\u062E\u0648\u0628",
3278
+ sharam: "\u0634\u0631\u0645",
3279
+ haya: "\u062D\u06CC\u0627",
3280
+ ghairat: "\u063A\u06CC\u0631\u062A",
3281
+ himmat: "\u06C1\u0645\u062A",
3282
+ hosla: "\u062D\u0648\u0635\u0644\u06C1",
3283
+ mashaallah: "\u0645\u0627\u0634\u0627\u0621\u0627\u0644\u0644\u06C1",
3284
+ inshaallah: "\u0627\u0646\u0634\u0627\u0621\u0627\u0644\u0644\u06C1",
3285
+ mashallah: "\u0645\u0627\u0634\u0627\u0621\u0627\u0644\u0644\u06C1",
3286
+ inshallah: "\u0627\u0646\u0634\u0627\u0621\u0627\u0644\u0644\u06C1",
3287
+ alhamdulillah: "\u0627\u0644\u062D\u0645\u062F\u0644\u0644\u06C1",
3288
+ jazakallah: "\u062C\u0632\u0627\u06A9\u200C\u0627\u0644\u0644\u06C1"
2780
3289
  };
2781
3290
 
2782
3291
  // src/transliterate.ts
@@ -2999,20 +3508,24 @@ function urduSlug(input, options = {}) {
2999
3508
  return slug;
3000
3509
  }
3001
3510
 
3511
+ exports.URDU_STOP_WORDS = URDU_STOP_WORDS;
3002
3512
  exports.analyzeUrdu = analyzeUrdu;
3003
3513
  exports.compareUrdu = compareUrdu;
3004
3514
  exports.convertNumbers = convertNumbers;
3005
3515
  exports.countSentences = countSentences;
3006
3516
  exports.countWords = countWords;
3007
3517
  exports.editDistance = editDistance;
3518
+ exports.filterStopWords = filterStopWords;
3008
3519
  exports.foldUrdu = foldUrdu;
3009
3520
  exports.hasUrduSpecificLetters = hasUrduSpecificLetters;
3010
3521
  exports.highlightUrdu = highlightUrdu;
3522
+ exports.isStopWord = isStopWord;
3011
3523
  exports.isUrdu = isUrdu;
3012
3524
  exports.normalizeUrdu = normalizeUrdu;
3013
3525
  exports.numberToUrduWords = numberToUrduWords;
3014
3526
  exports.parseUrduNumber = parseUrduNumber;
3015
3527
  exports.removeDiacritics = removeDiacritics;
3528
+ exports.removeStopWords = removeStopWords;
3016
3529
  exports.romanToUrdu = romanToUrdu;
3017
3530
  exports.romanize = romanize;
3018
3531
  exports.searchUrdu = searchUrdu;