-
Notifications
You must be signed in to change notification settings - Fork 2
/
Persian text editor.py
1401 lines (1181 loc) · 85.6 KB
/
Persian text editor.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#!/usr/bin/env python2.7
# Distributed under the terms of MIT License (MIT)
# Based on fa.wikipedia's AbarAbzar tool
##https://fa.wikipedia.org/wiki/Mediawiki:Gadget-Extra-Editbuttons-persianwikitools.js
##https://fa.wikipedia.org/wiki/Mediawiki:Gadget-Extra-Editbuttons-persiantools.js
##https://fa.wikipedia.org/wiki/Mediawiki:Gadget-Extra-Editbuttons-dictionary.js
# This tool edits Persian texts and solve some of the wrong dictation, typo and ZWNJ problems
# It is not suitable for Mediawiki's syntax for editing in Mediawiki environment use fa_cosmetic_changes_core.py
import re
arabicDigits = ur'0123456789'
arabicIndicDigits = ur'٠١٢٣٤٥٦٧٨٩'
# نویسه\u200cهای غیرفارسی ي-ك-ە و موارد مشابه پیش از تبدیل به نویسهٔ فارسی در سایر ریجکس\u200cها باید به عنوان کاراکتر فارسی شناخته شوند.
similarPersianCharacters = ur'\u0643\uFB91\uFB90\uFB8F\uFB8E\uFEDC\uFEDB\uFEDA\uFED9\u0649\uFEEF\u064A\u06C1\u06D5\u06BE\uFEF0-\uFEF4'
vowels = ur'\u064B-\u0650\u0652\u0670'
persianCharacters = ur'\u0621-\u0655\u067E\u0686\u0698\u06AF\u06A9\u0643\u06AA\uFED9\uFEDA\u06CC\uFEF1\uFEF2' + similarPersianCharacters
persianCharactersNoVowels = ur'\u0621-\u064A\u0653-\u0655\u067E\u0686\u0698\u06AF\u06A9\u0643\u06AA\uFED9\uFEDA\u06CC\uFEF1\uFEF2' + similarPersianCharacters
persianDigits = ur'۰۱۲۳۴۵۶۷۸۹'
hamza = ur'\u0654'
NASB = u'\u064b'
ZAMM = u'\u064c'
persianPastVerbs = ur'(' \
+ ur'ارزید|افتاد|افراشت|افروخت|افزود|افسرد|افشاند|افکند|انباشت|انجامید|انداخت|اندوخت|اندود|اندیشید|انگاشت|انگیخت|انگیزاند|اوباشت|ایستاد' \
+ ur'|آراست|آراماند|آرامید|آرمید|آزرد|آزمود|آسود|آشامید|آشفت|آشوبید|آغازید|آغشت|آفرید|آکند|آگند|آلود|آمد|آمرزید|آموخت|آموزاند' \
+ ur'|آمیخت|آهیخت|آورد|آویخت|باخت|باراند|بارید|بافت|بالید|باوراند|بایست|بخشود|بخشید|برازید|برد|برید|بست|بسود|بسیجید|بلعید' \
+ ur'|بود|بوسید|بویید|بیخت|پاشاند|پاشید|پالود|پایید|پخت|پذیراند|پذیرفت|پراکند|پراند|پرداخت|پرستید|پرسید|پرهیزید|پروراند|پرورد|پرید' \
+ ur'|پژمرد|پژوهید|پسندید|پلاسید|پلکید|پناهید|پنداشت|پوسید|پوشاند|پوشید|پویید|پیچاند|پیچانید|پیچید|پیراست|پیمود|پیوست|تاباند|تابید|تاخت' \
+ ur'|تاراند|تازاند|تازید|تافت|تپاند|تپید|تراشاند|تراشید|تراوید|ترساند|ترسید|ترشید|ترکاند|ترکید|تکاند|تکانید|تنید|توانست|جَست|جُست' \
+ ur'|جست|جنباند|جنبید|جنگید|جهاند|جهید|جوشاند|جوشید|جوید|چاپید|چایید|چپاند|چپید|چراند|چربید|چرخاند|چرخید|چرید|چسباند|چسبید' \
+ ur'|چشاند|چشید|چکاند|چکید|چلاند|چلانید|چمید|چید|خاراند|خارید|خاست|خایید|خراشاند|خراشید|خرامید|خروشید|خرید|خزید|خست|خشکاند' \
+ ur'|خشکید|خفت|خلید|خمید|خنداند|خندانید|خندید|خواباند|خوابانید|خوابید|خواست|خواند|خوراند|خورد|خوفید|خیساند|خیسید|داد|داشت|دانست' \
+ ur'|درخشانید|درخشید|دروید|درید|دزدید|دمید|دواند|دوخت|دوشید|دوید|دید|دیدم|راند|ربود|رخشید|رساند|رسانید|رست|رَست|رُست' \
+ ur'|رسید|رشت|رفت|رُفت|رقصاند|رقصید|رمید|رنجاند|رنجید|رندید|رهاند|رهانید|رهید|روبید|روفت|رویاند|رویید|ریخت|رید|ریسید' \
+ ur'|زاد|زارید|زایید|زد|زدود|زیست|سابید|ساخت|سپارد|سپرد|سپوخت|ستاند|ستد|سترد|ستود|ستیزید|سرایید|سرشت|سرود|سرید' \
+ ur'|سزید|سفت|سگالید|سنجید|سوخت|سود|سوزاند|شاشید|شایست|شتافت|شد|شست|شکافت|شکست|شکفت|شکیفت|شگفت|شمارد|شمرد|شناخت' \
+ ur'|شناساند|شنید|شوراند|شورید|طپید|طلبید|طوفید|غارتید|غرید|غلتاند|غلتانید|غلتید|غلطاند|غلطانید|غلطید|غنود|فرستاد|فرسود|فرمود|فروخت' \
+ ur'|فریفت|فشاند|فشرد|فهماند|فهمید|قاپید|قبولاند|کاست|کاشت|کاوید|کرد|کشاند|کشانید|کشت|کشید|کفت|کفید|کند|کوبید|کوچید' \
+ ur'|کوشید|کوفت|گَزید|گُزید|گایید|گداخت|گذارد|گذاشت|گذراند|گذشت|گرازید|گرایید|گرداند|گردانید|گردید|گرفت|گروید|گریاند|گریخت|گریست' \
+ ur'|گزارد|گزید|گسارد|گستراند|گسترد|گسست|گسیخت|گشت|گشود|گفت|گمارد|گماشت|گنجاند|گنجانید|گنجید|گندید|گوارید|گوزید|لرزاند|لرزید' \
+ ur'|لغزاند|لغزید|لمباند|لمدنی|لمید|لندید|لنگید|لهید|لولید|لیسید|ماسید|مالاند|مالید|ماند|مانست|مرد|مکشید|مکید|مولید|مویید' \
+ ur'|نازید|نالید|نامید|نشاند|نشست|نکوهید|نگاشت|نگریست|نمایاند|نمود|نهاد|نهفت|نواخت|نوردید|نوشاند|نوشت|نوشید|نیوشید|هراسید|هشت' \
+ ur'|ورزید|وزاند|وزید|یارست|یازید|یافت' + ur')'
persianPresentVerbs = ur'(' \
+ ur'ارز|افت|افراز|افروز|افزا|افزای|افسر|افشان|افکن|انبار|انباز|انجام|انداز|اندای|اندوز|اندیش|انگار|انگیز|انگیزان' \
+ ur'|اوبار|ایست|آرا|آرام|آرامان|آرای|آزار|آزما|آزمای|آسا|آسای|آشام|آشوب|آغار|آغاز|آفرین|آکن|آگن|آلا|آلای' \
+ ur'|آمرز|آموز|آموزان|آمیز|آهنج|آور|آویز|آی|بار|باران|باز|باش|باف|بال|باوران|بای|باید|بخش|بخشا|بخشای' \
+ ur'|بر|بَر|بُر|براز|بساو|بسیج|بلع|بند|بو|بوس|بوی|بیز|بین|پا|پاش|پاشان|پالا|پالای|پذیر|پذیران' \
+ ur'|پر|پراکن|پران|پرداز|پرس|پرست|پرهیز|پرور|پروران|پز|پژمر|پژوه|پسند|پلاس|پلک|پناه|پندار|پوس|پوش|پوشان' \
+ ur'|پوی|پیچ|پیچان|پیرا|پیرای|پیما|پیمای|پیوند|تاب|تابان|تاران|تاز|تازان|تپ|تپان|تراش|تراشان|تراو|ترس|ترسان' \
+ ur'|ترش|ترک|ترکان|تکان|تن|توان|توپ|جنب|جنبان|جنگ|جه|جهان|جو|جوش|جوشان|جوی|چاپ|چای|چپ|چپان' \
+ ur'|چر|چران|چرب|چرخ|چرخان|چسب|چسبان|چش|چشان|چک|چکان|چل|چلان|چم|چین|خار|خاران|خای|خر|خراش' \
+ ur'|خراشان|خرام|خروش|خز|خست|خشک|خشکان|خل|خم|خند|خندان|خواب|خوابان|خوان|خواه|خور|خوران|خوف|خیز|خیس' \
+ ur'|خیسان|دار|درخش|درخشان|درو|دزد|دم|ده|دو|دوان|دوز|دوش|ران|ربا|ربای|رخش|رس|رسان' \
+ ur'|رشت|رقص|رقصان|رم|رنج|رنجان|رند|ره|رهان|رو|روب|روی|رویان|ریز|ریس|رین|زا|زار|زای|زدا' \
+ ur'|زدای|زن|زی|ساب|ساز|سای|سپار|سپر|سپوز|ستا|ستان|ستر|ستیز|سر|سرا|سرای|سرشت|سز|سگال|سنب' \
+ ur'|سنج|سوز|سوزان|شاش|شای|شتاب|شکاف|شکف|شکن|شکوف|شکیب|شمار|شمر|شناس|شناسان|شنو|شو|شور|شوران|شوی' \
+ ur'|طپ|طلب|طوف|غارت|غر|غلت|غلتان|غلط|غلطان|غنو|فرسا|فرسای|فرست|فرما|فرمای|فروش|فریب|فشار|فشان|فشر' \
+ ur'|فهم|فهمان|قاپ|قبولان|کار|کاه|کاو|کش|کَش|کُش|کِش|کشان|کف|کن|کوب|کوچ|کوش|گا|گای|گداز' \
+ ur'|گذار|گذر|گذران|گرا|گراز|گرای|گرد|گردان|گرو|گری|گریان|گریز|گز|گزار|گزین|گسار|گستر|گستران|گسل|گشا' \
+ ur'|گشای|گمار|گنج|گنجان|گند|گو|گوار|گوز|گوی|گیر|لرز|لرزان|لغز|لغزان|لم|لمبان|لند|لنگ|له|لول' \
+ ur'|لیس|ماس|مال|مان|مک|مول|موی|میر|ناز|نال|نام|نشان|نشین|نکوه|نگار|نگر|نما|نمای|نمایان|نه' \
+ ur'|نهنب|نواز|نورد|نوش|نوشان|نویس|نیوش|هراس|هست|هل|ورز|وز|وزان|یاب|یار|یاز' \
+ ur')'
persianComplexPastVerbs = { # bug: در گذشته
ur'باز': u'آفرید|آمد|آموخت|آورد|ایستاد|تابید|جست|خواند|داشت|رساند|ستاند|شمرد|ماند|نمایاند|نهاد|نگریست|پرسید|گذارد' \
+ ur'|گرداند|گردید|گرفت|گشت|گشود|گفت|یافت',
ur'در': u'بر ?داشت|بر ?گرفت|آمد|آمیخت|آورد|آویخت|افتاد|افکند|انداخت|رفت|ماند|نوردید|کشید|گرفت',
ur'بر': u'آشفت|آمد|آورد|افتاد|افراشت|افروخت|افشاند|افکند|انداخت|انگیخت|تاباند|تابید|تافت|تنید|جهید|خاست|خواست|خورد' \
+ ur'|داشت|دمید|شمرد|نهاد|چید|کرد|کشید|گرداند|گردانید|گردید|گزید|گشت|گشود|گمارد|گماشت',
ur'فرو': u'آمد|خورد|داد|رفت|نشاند|کرد|گذارد|گذاشت',
ur'وا': u'داشت|رهاند|ماند|نهاد|کرد',
ur'ور': u'آمد|افتاد|رفت',
ur'یاد': u'گرفت',
ur'پدید': u'آورد',
ur'پراکنده': u'ساخت',
ur'زمین': u'خورد',
ur'گول': u'زد',
ur'لخت': u'کرد',
}
persianComplexPresentVerbs = { # مشکل با: در روم باستان، در ده
# مشکل با : بر گردن
ur'باز': u'آفرین|آموز|آور|ایست|تاب|جو|خوان|دار|رس|ستان|شمار|مان|نمایان|نه|نگر|پرس|گذار|گردان|گرد|گشا|گو|گیر|یاب',
ur'در': u'بر ?دار|بر ?گیر|آمیز|آور|آویز|افت|افکن|انداز|مان|نورد|کش|گذر|گیر',
ur'بر': u'آشوب|آور|افت|افراز|افروز|افشان|افکن|انداز|انگیز|تابان|تاب|تن|جه|خواه|خور|خیز|دار|دم|شمار|نه|چین|کش|کن' \
+ ur'|گردان|گزین|گشا|گمار',
ur'فرو': u'خور|ده|رو|نشین|کن|گذار',
ur'وا': u'دار|رهان|مان|نه|کن',
ur'ور': u'افت|رو',
ur'یاد': u'گیر',
ur'پدید': u'آور',
ur'پراکنده': u'ساز',
ur'زمین': u'خور',
ur'گول': u'زن',
ur'لخت': u'کن',
}
adjective = \
ur'اخمو|ارزان|ارغه|الکن|الکی|انبوه|آبدار|(نا)?آرام|آرغنده|(نا)?آشکار|(نا)?آماده|آهسته|(بی\u200c|با)انضباط|باریک|بد|بدحساب|بددل|بدریخت' \
+ ur'|بر|براق|برخوردار|برومند|بزدل|بلند|بیآلایش|بی دست و پا|بیچاره|بیدار|بیمار|پخ|پخش|پخمه|پرت|پرنور|پست|پشمالو|پلید|پوچ|(سر|نا)?پوشیده|پوک' \
+ ur'|پیر|پیروز|تار|تپل|ترد|ترسو|تفت|تلخ|تنبل|تندرو|تنک|تنگ|تنها|تهی|تیره|جلو|چابک|چاپلوس|چالاک|چپ|چرند|چسبان|چفته|چیره|خام|خانم|خراب' \
+ ur'|خرم|خسته|خشک|(نا)?خفته|خفن|خل|خنگ|(نا)?خوانا|خوب|خوشکل|خوشگوار|خیراندیش|دراز|درخور|درستکار|دلباخته|دلیر|دوست|دون|رحیم|رسمی|روانی|روشن' \
+ ur'|ریغو|زبر|زبردست|زبل|زشت|زیبا|زیرک|ژرف|ژنده|ساده|(نا)?سالم|ساکت|سبک|سخاوتمند|سر|سرکش|سفت|سوسول|شایسته|شکیبا|شل|شور|طولانی|عالم|فراوان|فرز' \
+ ur'|فنی|قرتی|قشنگ|قلنبه|قهرمان|کارکن|کال|کبود|کج|کچل|کر|کلان|کلفت|کم|کند|کنس|کوتاه|کوتوله|کوچک|کوچولو|کودن|گدا|گران|گرسنه|گشاد' \
+ ur'|گنگ|گود|گیج|لاغر|لبریز|لخت|لغزنده|له|مات|مچاله|مچل|(نا)?مرد|مردمی|مردنی|مست|مشکوک|مفید|ناپدید|ناپسند|ناتوان|ناجنس|ناجور|ناچیز|ناخوش' \
+ ur'|نادان|(نا)?درست|نازک|ناسپاس|نافرمان|ناگوار|نامرد|نرم|نیازمند|نیرومند|هشیار|هیز|واژگون|ول|ولرم|ولنگار|یکپارچه|یکدست|یکرنگ|(نا)?پیدا' \
+ ur'|گناهکار|ریز|دانا|کثیف|آقا|(با|بی\u200c)سواد|عاشق|(با|بی\u200c)محبت|صاف|زمخت|فریبنده|پیچیده|سخت|دشوار|تمیز|(نا)?پاکیزه|بزرگ|پهن|پخته|بیمورد' \
+ ur'|بینیاز|(بی\u200c|با|)تجربه'
personNames = \
ur'الله|محمد|علی|حسن|حسین|جواد|باقر|مهدی|تقی|نقی|نازی|نجم|' \
+ ur'اکرم|کاظم|عباس|منصور|خسرو|محمود|شمس|ملک|شوکت|' \
+ ur'نصر|همت|جهان|جلال|موسی|ابراهیم|جعفر|احمد|قاسم|کمال|هاشم|' \
+ ur'شفیع|صمد|شیخ|اسماعیل|ربیع|سلیمان|رستم|شاهرخ|فرخ|شریف|نعمت|' \
+ ur'امیر|خلیل|جلیل|مجید|اسد|شوکت|رضا|عجل|ید|عبد|سهیل|معصوم|عظیم' \
+ ur'اکبر|اصغر|بهمن|قلی'
wordsWithA = \
ur'ورامدن|هرزاب|هراینه|هجوامیز|نوشاذر|نواوری|نواموز|نهراب|میراخور|میراب|میاید|میاورند|مرات' \
+ ur'|ماخذ|مابی|لسانجلس|گلاذین|گزنداور|گرداوری|گرداوردن|گرداورد|گردامدن|کنداور|کفرامیز|فرودامدن|عطراگین|طنزامیز' \
+ ur'|شیرابه|شهرا[یئ]ین|شهراشوب|سوداور|سراوردن|سرامدن|سرامد|سراشپز|سحرامیز|زیرابی|زوراور|زهرالود|زهراگین|زردالو|دوداهنگ|دواتشه' \
+ ur'|دژاهنگ|دژالود|درداور|دردالود|درایند|دراید|دراویختن|دراوری|دراورنده|دراورند|دراوردن|درامده|درامدن|درامد|خیزاب|خشمالود' \
+ ur'|چندشاور|جگراور|تیراهن|تهورامیز|تنفراور|تنداب|پسندامدن|پرنداور|پردرامد|پراشوب|پراب|بیاب|بوا|بنداوردن' \
+ ur'|بنداور|سرامدن|برایند|براورده|براوردن|براورد|برامده|برامدن|برامدگی|برامد|براشفته|براشفتن|براشفتگی|براسودن|بداهنگ' \
+ ur'|بداموزی|بدامدن|بدامد|ائورت|ائسه|ا[یئ]ینه|ا[یئ]یننامه|ا[یئ]ین|ایهیاب|ایه|اینهدار|اینده|ایندگان|ایفون' \
+ ur'|ایروپلن|ایدین|ایتم|ایتالله|ایت|ایات|اویشن|اویسا|اویژه|اویزون|اویزه|اویزند|اویزگر|اویزش' \
+ ur'|اویزدار|اویزان|اویز|اویخته|اویختنی|اویختن|اویختگی|اویخت|اویتخه|اووکادو|اونگون|اونگان|اونگ|اوند|اوریل' \
+ ur'|اوریدن|اورنده|اورند|اورنجن|اوردیدن|اورده|اوردنی|اوردن|اوردگه|اوردگاه|اوردجو|اورد' \
+ ur'|اوایش|اوانویس|اوانگارد|اوانتاژ|اواکس|اواشناس|اوازهخوان|اوازهای|اوازه|اوازخوان|اواز|اواره|اوارگی|اوارگان' \
+ ur'|اوار|اهو|اهنین|اهنگساز|اهنگرخانه|اهنگر|اهنگ|اهنفروش|اهنربا' \
+ ur'|اهنپاره|اهنبر|اهنالات|اهن|اهکسازی|اهکپزی|اهکپز|اهک|اهسته|اهستگی|اهای|اهان' \
+ ur'|انیون|انوقت|انود|انها|انگه|انگاه|انکه|انکس|انکارا|انقدر|انفولانزا|انفلوانزا' \
+ ur'|انفارکتوس|انطور|انطرف|انسو|انژیوگرافی|انژین|انزیم|انروی|انروز|انرو|اندوسکوپی|انچه|انجا|انتیل|انتیک' \
+ ur'|انتی|انتن|انتریک|انتراکت|انتراسیت|انتالیا|اناهیتا|اناناس|انان|انالیز|انالوگ|انارشیسم|اناتومی|اناتولی' \
+ ur'|انابولیسم|امینه|امیغه|امیغ|امیزه|امیزگار|امیزش|امیز|امیخته|امیختن|امیختگی|امیب|امونیوم|امونیت|امونیاک|امون' \
+ ur'|اموکسی|اموزه|اموزنده|اموزگان|اموزگار|اموزشیار|اموزشگاه|اموزشکده|اموزش|اموزانه|اموزاندن|اموز|اموده|امودن|امودریا' \
+ ur'|اموخته|اموختن|اموختگی|اموختار|امله|امریکا|امرزیده|امرزیدن|امرزیدگی|امرزنده|امرزگار|امرزش|امرز|امرانه' \
+ ur'|امدید|امدوشد|امدورفت|امده|امدن|امدگی|امدکردن|امد|امخته|امپلی|امپرسنج|امپر|امبولی|امبولانس|امایه|امایش|امال' \
+ ur'|اماسیده|اماسیدن|اماسانیدن|اماس|امازون|امارگیر|امارگر|امارشناسی|امارشناس|امادهکردن|اماده|امادگی|امادگاه' \
+ ur'|اماجگاه|اماج|اماتور|الیداد|الیاژهای|الیاژ|الونک|الومینیوم|الومینیم|الوزرد|الوده|الودن|الودگی|الودگر|الود|الوچه' \
+ ur'|الوبخارا|الما|الفرد|الفا|الرژی|التو|الترناتیو|الت|الپ|البومین|البوم|البانی|البالوئی|البالو|الا[یئ]یدن' \
+ ur'|الایشی|الایش|الای|الاسکا|الاخون|الاچیق|الات|الاباما|اگنه|اگنده|اگندن|اگاهینامه|اگاهیدادن|اگاهی|اگاهگان' \
+ ur'|اگاهانیدن|اگاهانه|اگاهاندن|اگاه|اکوستیک|اکوردئون|اکواریوم|اکنه|اکنش|اکنده|اکندن|اکله|اکسفورد|اکروبات|اکتئون' \
+ ur'|اکتینیوم|اکانتاسه|اکادمیک|اکادمی|اقبانو|اقائی|اقایان|اقامنشانه|اقامنش|اقاسی|اقازاده|اقاجان|اقا' \
+ ur'|افریننده|افرینش|افرین|افریکانس|افریقا|افریده|افریدن|افریدگار|افتومات|افتابه|افتابمهتاب|افتابگیر' \
+ ur'|افتابگردان|افتابزده|افتابزدگی|افتابرو|افتابخورده|افتابپرست|افتاب|افاقی|افاق|افات|اغول|اغوشیدن|اغوش|اغل' \
+ ur'|اغشته|اغشتن|اغشتگی|اغش|اغالش|اغاسی|اغازین|اغازیدن|اغازیان|اغازی|اغازه|اغازگر|اغاز|اغاجی|اغا|اشیل|اشیانی|اشیانه' \
+ ur'|اشیانبندی|اشیان|اشور|اشوبیدن|اشوبناک|اشوبگرانه|اشوبگر|اشوبکن|اشوبطلب|اشوبانگیز|اشوب|اشنایان|اشناوری' \
+ ur'|اشناگر|اشناسازی|اشنا|اشکوخیدن|اشکاره|اشکارگر|اشکارساز|اشکارا|اشکار|اشفته|اشفتن|اشفتگی|اشغالدان|اشتی' \
+ ur'|اشفتگی|اشپزخانه|اشپز|اشامیدنی|اشامیدن|اشامه|اشامنده|اشام|اشاب|اسیمه|اسیمگی|اسیبزدن' \
+ ur'|اسیبدیده|اسیب|اسیاکردن|اسیاسنگ|اسیازنه|اسیاچرخ|اسیابان|اسیاب|اسیا|اسودهخاطر|اسودهحال|اسوده|اسودن' \
+ ur'|اسودگی|اسمون|اسمانه|اسمانسنجی|اسمانخراش|اسمانخانه|اسمان|اسکاریس|اسفالت|استینه|استرکاری' \
+ ur'|استردوز|استانه|اسپیرین|اسپرین|اسائی|اسا[یئ]یدن|اساینده|اسایشگاه|اسایش|اسانگیری|اسانسورچی' \
+ ur'|اسانسور|اسان|اژیرهوائی|اژیر|اژیانه|اژنگ|اژند|اژفنداک|اژدار|اژانس|ازیدن|ازیتا|ازوقه|ازمونگر|ازمونگاه|ازمون|ازموده' \
+ ur'|ازمودن|ازمودگی|ازمندی|ازمند|ازمائی|ازمایه|ازماینده|ازمایشی|ازمایشو|ازمایشگاه|ازمایشات|ازمایش|ازمابنده|ازما|ازگار' \
+ ur'|ازرده|ازردن|ازردگی|ازرد|ازاریدن|ازارنده|ازاررسان|ازاردهنده|ازار|ازادیخواه|ازادوار' \
+ ur'|ازاده|ازادمنش|ازادمرد|ازادگی|ازادگان|ازادکامی|ازادانه|ازاد|اریانا|اریان|اریا|ار[و]غ' \
+ ur'|ارواره|ارنولد|ارنگ|ارنج|ارنائوت|ارمینا|ارمین|ارمیس|ارمیده|ارمیدن|ارمیدگی|ارمیچر|ارمه|ارمانشهر|ارماگدون|ارگون' \
+ ur'|ارکاد|ارشیو|ارشیتکت|ارشه|ارشام|ارش|ارستن|ارسان|ارژانتین|ارزومندانه|ارزومند|ارزوخواه|ارزو|ارتین|ارتیشو|ارتیست' \
+ ur'|ارتور|ارتمیس|ارتروز|ارا[یئ]یدن|ارایهگر|ارایشی|ارایشگر|ارایشگاه|ارایش|ارامیدن|ارامگاه|ارامگان|ارامکردن' \
+ ur'|ارامش|ارامانیدن|ارام|اراسته|اراستن|اراستگی|ارارات|اراء|اذین|اذرین|اذرنوش|اذرنگ|اذرگون|اذرشهر|اذرسنجی' \
+ ur'|اذرروز|اذرخش|اذربرزین|اذربایجان|اذر|ادینه|ادیس|ادونیس|ادنیس|ادمیگرا|ادمیزاد' \
+ ur'|ادمیرال|ادمیت|ادمگرا|ادمکش|ادمک|ادمفروش|ادمربا|ادمخوار|ادرنالین|ادرس|ادامس|اداب|اخوندک|اخوند' \
+ ur'|اخور|اخرین|اخرسالار|اخرزمان|اخرتشناسی|اخرت|اخرالدواء|اخرالامر|اخر|اختن|احاد|اچمز|اچارکشی|اچاردار|اچار|اجیل|اجودان' \
+ ur'|اجرنما|اجرکاری|اجرچین|اجرپز|اجان|اثار|اتیه|اتیکا|اتیسا|اتلیه|اتشین|اتشناک|اتشگیره|اتشگیر' \
+ ur'|اتشگون|اتشگرفتن|اتشگاه|اتشکده|اتشکار|اتشفشان|اتشزنه|اتشزدن|اتشزا|اتشدان|اتشخوار|اتشخانه|اتشپاره|اتشبان|اتشبازی|اتشبار' \
+ ur'|اتش|اتریوم|اتروپین|اتابای|اپولو|اپوستروف|اپاندیسیت|اپاندیس|اپارتمان|اپارتاید|اپارات|ابیار|ابونه|ابونمان' \
+ ur'|ابها|ابنوس|ابنمک|ابنما|اب[ن]شدنی|ابنبات|ابمیوهگیر|ابمیوه|ابلیمو|ابلهکوب|ابلهرو|ابگینه|ابگیر|ابگونه|ابگونساز' \
+ ur'|ابگوشت|ابگرمکن|ابگردان|ابگذر|ابگاه|ابکش|ابکانه|ابکامه|ابکار|ابفشان|ابغوره|ابشی|ابشور|ابشنگولی|ابشش|ابشدنی' \
+ ur'|ابشخور|ابشتگاه|ابشار|ابسوار|ابسه|ابسکون|ابستن|ابسالان|ابسال|ابزیگاه|ابزیدان|ابزی|ابریزگاه|ابریزگان|ابریزش' \
+ ur'|ابریز|ابرومند|ابروریزی|ابرنگ|ابرفت|ابراهه|ابراهک|ابراه|ابدیده|ابدزدک|ابدانک|ابدان|ابداری|ابدارخانه|ابدارچی' \
+ ur'|ابدارباشی|ابدار|ابخیز|ابخوری|ابجی|ابجوفروشی|ابجوساز|ابجوساختن|ابجو|ابتین|ابتنی|ابپنیر|اگهی' \
+ ur'|ابپاش|اببها|اببند|ابباز|ابانبار|ابان|اباژور|اباده|ابادکردن|ابادسازی|ابادان|اباد|اباء' # first charcter should be آ
# removed ان for [[ان بی سی]]
# match ZWNJ also as a space or optional
wordsWithA = wordsWithA.replace(ur"\u200c", u'[\u200c ]?')
PresentVerbsWithA = \
ur'ارا|ارام|ارامان|ارای|ازار|ازما|ازمای|اسا|اسای|اشام|اشوب|اغار|اغاز|افرین|اکن|اگن|الای' \
+ ur'|امرز|اموز|اموزان|امیز|اهنج|اور|اویز'
PastVerbsWithA = \
ur'اراماند|ارامید|ارمید|ازرد|ازمود|اشامید|اشفت|اشوبید|اغازید|اغشت|افرید|اکند|اگند|الود' \
+ ur'|امد|امرزید|اموخت|اموزاند|امیخت|اهیخت|اورد|اویخت'
needsNasb = \
ur'اتفاقا|الزاما|لزوما|یقینا|قطعا|حتما|قاعدتا|طبیعتا|طبعا|قهرا|جدّا|حقیقتا|واقعا|مطمئنا|واضحا|مسلما|تماما|کاملا' \
+ ur'|عینا|اکیدا|مطلقا|دقیقا|مستقیما|اصولا|اصلا|اصالتا|نسبا|نسبتا|تقریبا|حدودا|معمولا|قانونا|شرعا|اخلاقا|خلقا|احتمالا' \
+ ur'|استثنائا|اساسا|کلّ?ا|جزئا|مجموعا|جمعا|اجماعا|شدیدا|نهایتا|اقلا|اکثرا|غالبا|عمدتا|ندرتا|بعضا|گاها|صریحا|صراحتا|عموما' \
+ ur'|اختصاصا|خصوصا|مجملا|اجمالا|اختصارا|مختصرا|مشروحا|ظاهرا|باطنا|عمیقا|ذاتا|فطرتا|جسما|ابتدائا|مقدمتا|بدوا|بعدا|قبلا' \
+ ur'|جدیدا|سابقا|اخیرا|ابدا|عمرا|تلویحا|علنا|حضورا|غیابا|نیابتا|لطفا|اجبارا|اختیارا|عالما|عمدا|عامدا|تعمدا|متعمدا|عادتا' \
+ ur'|مستقلا|احتیاطا|احیانا|غفلتا|سهوا|اشتباها|عاجلا|عجالتا|مرتجلا|ارتجالا|سریعا|فورا|دا[یئ]ما|ضرورتا|نقدا|منحصرا|صرفا|دفعتا' \
+ ur'|کرارا|مکررا|مجددا|مرتبا|مستمرا|متواترا|تدریجا|تصادفا|عملا|فعلا|موقتا|ضمنا|نتیجتا|نوعا|اصطلاحا|جسارتا|بالا ?غیرتا|م[وؤ]کدا' \
+ ur'|ذیلا|شخصا|مشترکا|مفصلا|رسما|ترجیحا|قلبا|ر[اأ]سا|تو[اأ]ما|متناوبا|متوالیا|متقابلا|متعاقبا|متّ?فقا|مثلا|فرضا|ایضا|مضافا' \
+ ur'|مصرّ?ا|ارفاقا|انصافا|جهارا|طولا|متدرجا|غانما|احتراما|ناچارا|سفارشا|تلفنا|زبانا|کتبا|شفاها|چهارما|ثانیا|ثالثا' \
+ ur'|رابعا|خامسا|سادسا|سابعا|ثامنا|تاسعا|عاشرا|مخصوصا' # اولا و سوما میتواند یک نام خاص باشد.
HamzehZam = \
ur'امیرالمومنین|مومن|رویا|فواد|موذن|مودب|موخر|مواخذه|مولف|موثر|مونث|موکد|موسس(?! خورناتسی)|سوال|موسسه' # for[[ران مودی]]removedمودی
HamzehZam = HamzehZam.replace(ur'\u0648', ur'وء?')
HamzehNasb = \
ur'تاکید|تالیف|تاسیس|تاسیسات|تامل|تفال|تاهل|تامین|تا[یئ]ید|تادیب|تاثیر|تاثر|تاثیرات|تاثیرگذار|تاجیل' \
+ ur'|تاخر|تاخیر|توام|ماوا|مستاجر|مبدا|منشا|متاسفانه|متاسف|متاثر|مساله|متاهل|خلا|ملا عام|رافت|ماخذ|مایوس|ماخوذ' \
+ ur'|مامور|مامورین|ماموران|ماموریت|مامون|مانوس' # removed راس، تالم
HamzehAtEnd = \
ur'اجزا|احشا|ارتجا|ارتقا|ازا|استثنا|استغنا|استقرا|استمنا|استهزا|اشبا|اشقیا|اشیا|اطبا|اطفا|اعتلا' \
+ ur'|اغوا|افترا|اقتضا|امنا|انبیا|انقضا|اولیا|ماورا' # re املا-انشا-اعضا-امضا-انزوا-ابتلا-استعفا-اعلا-اعتنا بدون همزه متداولترند، ابدا میتواند با همزه یا نتوین باشد در نتیجه برداشته شد
HamzehAtInside = {ur'سو': u'استفاده|تعبیر|تفاهم|برداشت',
ur'ما': u'الشعیر', ur'ماورا': u'الطبیعه|النهر'}
AlefMaghsooreh = \
ur'یحیا|حتا|خنثا|مبرا|مرتضا|مصطفا|موسا|مجتبا|عیسا|عظما|علارغم' # removed اولا- الا
colorsNames = \
ur'زرد|قرمز|آبی|سفید|سیاه|بنفش|سرخ|گلگون|ازرق|ابیض|نارنجی|توسی|کبود|ارغوانی|سورمهای|سپید|مشکی|کرم|قهوهای|سبز|طلا[یئ]ی'
persianNumbers = \
ur'یک|دو|سه|چهار|پنج|شش|هفت|هشت|نه|ده|یازده|دوازده|سیزده|چهارده|' \
+ ur'پانزده|شانزده|هفده|هجده|نوزده|بیست|سی|چهل|پنجاه|شصت|هفتاد|هشتاد|نود|صد|هزار'
addToAbad = ur'گلون|افضل|رقی|خیر|دل|حاجی|سید|مبارک|گنج|نهنگ|چنگ|' \
+ ur'سرخ|جنگل|خرم|خونی|دولت|به|نیاز|حفظ|عیش|نجم|بلاش|شیار|' \
+ ur'فتح|فضل|خدر|ساق|کج|زین|اسلام|بالش|پارس|اسکل|یاخچی|مهندس|قوژد'
firstNameComplex = {
ur'حمید|احمد|محمود': u'رضا',
ur'خدا': ur'بنده|داد',
ur'امیر': ur'علی|حسین|محمد|رضا|مهدی|عباس',
ur'محمد': ur'حسین|رضا|مهدی|جواد|باقر|کاظم|حسن|علی|امیر|طاها|هادی|وحید|حمید',
ur'علی': ur'رضا|محمد|اصغر|اکبر|قلی',
}
complexes = { # اسم خاص
# اسم مرکب
# فعل
# صفت مرکب
# 'با': u'پرستیژ|ابهت|احساس|اخلاق|ادب|ارزش|استعداد|استقامت|اصالت|اقتدار|اهمیت|تدبیر|تربیت|تسلط|تعصب|تقوی',
# 'باقی|ته': u'مانده', bug > باقی مانده بود- ته مانده بود.
# طبق بندهای شماره ..
# 'طبق|زمان': u'بند',
# 'مادر|خواهر|برادر|فرزند|پدر': u'خوانده', # bug > وی پدر خوانده شد.(پدر صدا زده شد)
ur'ویکی': u'پدیا|مدیا|انبار|واژه|نبشته|خبر|کتاب|داده|دیتا|سفر|تراول|دانشگاه',
ur'ایده': u'آل',
ur'سخت|نرم|پای|جنگ|نوشت|بد|ماشین': u'افزار',
ur'جنگ': u'افروز',
ur'پیاده': u'روی|رو|نظام',
ur'انسان|روان|گیاه|زیست|جانور|نماد|زمین|هوا|ریخت|خدا|جامعه|رفتار|فرهنگ|معرفت|زبان|کتاب|ستاره|اختر|شرق|اسلام|ریشه|آسیب|باستان|حق': u'شناس',
ur'بهره|نتیجه|فاصله|اندازه|مچ|رونق|دست|پا|پاچه|آبمیوه|آتش|آمار|اوج|کشتی|رأی|رای|یار|تصمیم': u'گیر',
ur'بهره': u'مند|کشی|دهی',
ur'اوج': u'دهی',
ur'آزاد|بد|نیک|مثبت|مصلحت': u'اندیش',
ur'هم': u'اندیشی|ارزی|راهی|سانی|رزم|خانه|نشین|سان|بند|مرز|سایه|مسلک|زمان|معنی|گام',
ur'گرم|نرم|سرد|جمع|خنک|خشک|مرطوب|ضرب|تقسیم|کم|سرگرم|خوشحال|ناراحت|سخت|روان|باز|زیبا|زشت|مصرف|تولید': u'کننده|کنندگی|کنندگان',
ur'خود|درون|پیه': u'سوز|خواه',
ur'دل': u'افروز|آزار|آرا|آزرده|بریده|افسرده|ربا|سوز|خواه|گشا',
ur'تفریق|افزایش|کاهش|ویرایش|کوزه|سفال|غارت|چپاول|صنعت|امداد|توطئه|حساب|افسون|ریخته': u'گر',
ur'آهن': u'ربا',
ur'طیف|امکان|اقتصاد|نور|زمان|عمق|گرما|فشار|قطر': u'سنج',
ur'فیزیک|شیمی|ریاضی|تاریخ|قلم|کتاب': u'دان',
ur'نام|اسم|سیاهه|خود|فیلمنامه|فیلمنامه|کتاب|روان|نسخه': u'نویس',
ur'بار|سرمایه|تخم|کتاب|خواب': u'گذار',
ur'شهر': u'بانو|زاد|ناز|نوش',
ur'اسد|اسماء?|اسم|امان|امر|امیر|امین|انصار|انعام|اهل|اولیاء?|اکرم|باب|بدیع|برات|بقیة|بهاء?|جار|جند|حبیب|حجت|حزب|حفظ|حمد|خلق|خلیل|خیر|ذبیح|ذکر|رام|رحمت|رحم|رسول|روح|سیف|شمس|شکر|صدق|صدیق|عبد|عزت|عزیز|عین|فتح|فرج|فضل|قدرت|لطف|لعنت|نصرت|نصر|نظیر|نعمت|نور|هیبت|ولی|کلام|کلیم|ید|یوم': u'الله|اللهی',
ur'مستند|هوا|روان|جریان|کار|مجسمه|ایمن|پیاده|مقاوم|امن|ساده|بهینه|مرتب|شبیه|ویکی|پل|جاده|راه': u'ساز',
ur'احترام|اختلاف|اضطراب|اعجاب|افتخار|بحث|بر|تحسین|ترحم|تعجب|تعصب|تنفر|ت[اأ]ثر|ت[اأ]سف|ت[اأ]مل|جالب|جدل|جنجال|حزن|حیرت|خفت|خوف|خیال|چالش|دل|رعب|رقت|روح|شهوت|شور|شوق|شگفت|طرب|عبرت|غرور|غم|فرح|ملال|مهر|نشاط|نفرت|هراس|هوس|وحشت|ی[اأ]س': u'برانگیز|انگیز',
ur'چهره|دور|تاریخ|خبر|روزنامه|روز|لرزه': u'نگار',
ur'خود|روان|پاک|چرک|دست|پشت|زیر|پا|داستان': u'نویس',
ur'زود|آرام|آب|کله|آش|بخار': u'پز',
ur'مه|پیمان|یخ|سنگ|بت|صف': u'شکن',
ur'خون': u'آشام|خوار|بار|گرم|سرد|بها',
ur'شیطان|خدا|بت|خورشید|مهر|آتش|یزدان|ایزد|گاو|خود|آفتاب|یکتا|پول|حق|مال|میهن|نژاد': u'پرست',
ur'پا[یئ]ین|بالا|عقب|جلو|کنار|ساده|بزرگ|کوچک|عمیق|رقیق|ضخیم|فهیم|گسترده': u'تر',
ur'برگشت|انحنا|برش|انعطاف|مهمان|امکان|تفکیک|تغییر|آسیب|تأثیر|دل|سازش|مهاجر': u'پذیر|ناپذیر',
ur'دانش': u'آموخته|پژوه|آموختگی',
ur'بی': u'آلایش|ابهت|احترام|احساس|اختیار|اخلاق|ادب|اراده|ارزش|استعداد|استقامت|اصالت|اعتماد|اعتبار|اقتدار|امان|امنیت|انتها|اهمیت|بها|بو|تدبیر|تربیت|تسلط|تعصب|تقوی|توجه|ثبات|جنبه|حس|دریغ|دست و پا|دین|رنگ|روح|رویه|سابقه|سیم|شرف|شعور|لیاقت|مایه|مبالات|مزد|مزه|مصرف|معرفت|معنی|مقدار|مورد|نتیجه|نزاکت|نهایت|نیاز|وجدان|پایه|پرستیژ|پناه|پول|چاره|چیز|کار|دلیل|خبر',
ur'می': u'دانم',
ur'عرضه': u'کننده|کنندگان',
ur'ابرو': u'کمان|قیطان',
ur'ابله': u'گونه',
ur'ابن': u'الیوم|الوقت|السبیل|عباس',
ur'اغراق|خشونت': u'آمیز',
ur'اجاق': u'کور|زاده|سوز',
ur'اجل': u'برگشته',
ur'اسفل': u'السافلین',
ur'اطلاع': u'رسان|رسانی|دهی',
ur'انگشت': u'نما|نشان|پیچ',
ur'سپاس|نام': u'گزار',
ur'گوشت|گیاه|علف|شیر': u'خوار',
ur'آدم': u'برفی|فروش|ربا|خوار',
ur'آب': u'لمبو|تنی',
ur'آتشین': u'پنجه',
ur'ریش|سنگ|قلم': u'تراش',
ur'آزرده': u'جان',
ur'آسوده': u'خاطر|وجدان',
ur'آسیمه': u'سر',
ur'آش': u'دهن|خور|پز',
ur'آشفته': u'سامان|دماغ|روز',
ur'آکنده': u'گوش|پهلو',
ur'آلاخون': u'والاخون',
ur'آمد': u'نیامد|شد',
ur'باب': u'الحوائج',
ur'باد': u'نشسته|گرفته',
ur'بار': u'خاطر',
ur'بالا|پایین|پائین': u'تنه',
ur'برنامه': u'نویس',
ur'برنامه|طرح|بتون': u'ریز',
ur'بزرگ': u'سال|مرد',
ur'بزن': u'دررو|بهادر',
ur'بد|خوش': u'سیرت|اخلاق|تراش|ترکیب|ریخت|ادا|استیل|اندام|بو|بینانه|بینی|پخت|برخورد|یمن|خوراک|خیم|رکاب|حال|مزه|حساب|پوش|اقبال|قلق|منظر|نام|نما',
ur'بد': u'انجام|پیله|خوی|عنق|کاره|گمان|گوهر|لگام|مسب|مست|مهر',
ur'بن': u'بست',
ur'به': u'غایت',
ur'حمله|بهره|پیشه|شعله|طاعت|طالع': u'ور',
ur'بین': u'النهرین|الملل|الممالک',
ur'پاچه': u'ورمالیده',
ur'تکه|پاره|آتش|آهن|جگر|چهار': u'پاره',
ur'ترویج|امداد|جهاد': u'گران|گر',
ur'جهان|خدا|سود|شفا|نیرو|گرما|سرما': u'بخش',
ur'پاک': u'نفس|سرشت|دامن|سیرت|منش|دیده',
ur'پالان': u'سا[یئ]یده|دوز',
ur'پراگنده|تاریک|شکسته|آشفته|آزرده|آسوده|بد|خوش|خونین|سیاه|نازک': u'دل',
ur'پری': u'نژاد|چهر',
ur'نیک|پست': u'فطرت',
ur'پی': u'گم|گرد|فراخ|سپید|نوشت',
ur'پیچ': u'واپیچ|پیچ',
ur'سفید|سیاه|قهوهای|قرمز|زرد|سبز|بنفش|گلگون|سرخ|پیروزه|مشک|نیل|مشکین': u'فام',
ur'پیش': u'مرگ|کسوت',
ur'تازه': u'وارد|خط|نفس|کار',
ur'تام': u'الاختیار',
ur'خوش|زشت|ترش': u'رو',
ur'ترگل': u'ور گل',
ur'تکه': u'تکه',
ur'تن': u'فروش|آسان|آرا|تن|پرور',
ur'تند': u'خو|خوی',
ur'تنگ': u'چشم',
ur'تی': u'تیش',
ur'پا|تن|زیر|سبز|سرخ|قرمز': u'پوش',
ur'تیره': u'روز',
ur'جامع': u'الشرایط|الاطراف',
ur'جان': u'سخت|جانی',
ur'یدک|فرو|نسل|آدم|ویروس|نقشه|سر|آب|آچار': u'کش',
ur'کشتی|گرده|دشت|نگه|دید|زمین|جنگل|دروازه': u'بان',
ur'چابک': u'سوار|دست',
ur'نقاره|چاپ': u'چی',
ur'چرب': u'زبان|ترازو',
ur'چشمه': u'چشمه',
ur'چل': u'کلید|تاج|تکه',
ur'ناقاره|چوبک|دف|دمبک|ساز|نی|سنتور|تار|گیتار|ارگ': u'زن',
ur'چیره': u'دست',
ur'پول|فنگ|قالی|ظرف|خشک|لباس': u'شو[ئی]ی',
ur'چیز': u'فهم',
ur'حرف': u'شنو',
ur'حق': u'السکوت|التدریس|الزحمه',
ur'حکیم': u'باشی',
ur'حرام|حلال': u'زاده',
ur'حیرت': u'زده',
ur'حیرت|نام|مقام|یاد|خواب|درد|شگفت|جمع': u'آور',
ur'خاله': u'زنک',
ur'خام': u'طمع|طبع',
ur'خشک': u'سر',
ur'خنده': u'رو|خریش',
ur'خواجه': u'سرا|تاش',
ur'سگ|مرغ|خوک': u'دانی',
ur'خونین': u'جگر|چشم|شهر',
ur'دایم': u'الخمر',
ur'دائم': u'الصوم|الخمر',
ur'درشت': u'خو',
ur'دست': u'نویس|خوش|پاچه|چین|آورد',
ur'دم': u'کلفت',
ur'دندان': u'گرد',
ur'دودوزه': u'باز',
ur'ذوات': u'الارحام|الاذناب',
ur'ذوی': u'القربی|الاوتار|العقول',
ur'ذی': u'نفع|صلاحیت|فقار|ربط|قیمت|شعور|علاقه|حیات|فن|روح|عقل|حق',
ur'چشم|بار|بر|پس|تیر|رو|زیر|غلط': u'انداز',
ur'رای': u'دهنده|دهندگان',
ur'راست': u'راستکی',
ur'رحمت': u'العالمین',
ur'رسم': u'الخط',
ur'رقیق': u'القلب|الفکر',
ur'رنگ': u'وارنگ',
ur'اندود': u'کاری',
ur'سنگ|ریز|دانه|تک|یک|بزرگ|رنگ': u'دانه',
ur'رو[یئ]ین|پاد|نرم|سخت': u'تن',
ur'ریش': u'ریش',
ur'رئیس': u'الوزراء|الرؤسا',
ur'تصویب|کار|اجازه|تکذیب|شب|پایان|اساس|آ[یئ]ین': u'نامه',
ur'زنگی': u'مزاج',
ur'زوار': u'دررفته',
ur'زیست': u'محیط|بوم',
ur'سابق|اخیر|فوق|لازم': u'الذکر',
ur'سابقه': u'سالار',
ur'سبک': u'مغز|سنگ|عنان|روح|لقا|سایه|سنگین|دست',
ur'سربه': u'مهر',
ur'سریع': u'السیر|الانتقال',
ur'سست': u'زخم|رگ|ریش|عنصر',
ur'سنگ': u'فرش',
ur'دو|سه|چهار': u'پایه',
ur'سیاه': u'مست|سوخته|چرده',
ur'سینه': u'چاک',
ur'شب': u'رنگ|پره|اداری',
ur'شبانه': u'روزی',
ur'شکسته': u'ناخن|مزاج',
ur'شلم': u'شوربا',
ur'شوخ': u'طبع|رو|دیده|چشم',
ur'شوم|نیک|بلند|بد': u'اختر|اقبال',
ur'شوی': u'دیده',
ur'شیرین': u'عقل|دهن',
ur'صد': u'شاخ',
ur'قتل|بار': u'عام',
ur'صف': u'آوار',
ur'ضرب': u'المثل|العجل',
ur'طبقه|زمان|درجه|رده|رتبه|دسته|جمله|تقسیم|بسته|آرماتور|اسکلت|امتیاز|بخش|جدول|جمع|جناح|رنگ|ساز|سایز|سرهم|سطح|شرط|شکم|فاز|فصل|قاب|پارتیشن|چشم|کادر|کمر|گاو|نیم': u'بند',
ur'طوطی': u'وار',
ur'طویل': u'المدت',
ur'طی': u'الارض',
ur'هنر|عاشق': u'پیشه',
ur'عالی': u'نسب',
ur'عام': u'المنفعه',
ur'عدیم': u'النظیر',
ur'عقب': u'گرد|نشینی',
ur'علی': u'البدل',
ur'عیال': u'وار',
ur'غلط': u'غلوط',
ur'فارغ': u'الاکناف|التحصیل',
ur'فراخ': u'رو|شکم|بال|کام|دیده|سخن|آهنگ|دست|آستین|ابرو|روزی',
ur'فرخ': u'لقا|دیم|فال|پی',
ur'فرمان': u'روا|بر',
ur'فرنگی': u'مآب',
ur'غیر': u'قابل|متعهد|اخلاقی|شرعی|انسانی|اصولی|مجاز|حضوری|دولتی|نظامی|انتفاعی|منتظره|قانونی|معمولی|ممکن|رسمی|فعال|نفتی|منقول|ارادی|جایز|طبیعی|عادی|عمد|لازم|مسئول|عادلانه|خودی|عاقلانه|کافی',
ur'وفا|فره|نیاز|جفا|خرد|غیرت|باور|ارزش|نعل|درد|علاقه': u'مند',
ur'فرو': u'نهادن|داشت|گذاشت|مایه|بست|پاشی|پاشیده',
ur'فوق': u'الذکر',
ur'خارق|فوق': u'العاده',
ur'کیلو|سانتی|میلی|دسی|نانو|ولت': u'متر|آمپر|گرم',
ur'قاچ': u'قاچ',
ur'قافله': u'سالار',
ur'قایم': u'الزاویه',
ur'قدسی': u'مآب',
ur'قره': u'قاطی',
ur'قریب': u'الوقوع',
ur'کاه|قطره|دله|آفتابه': u'دزد',
ur'قوی': u'پنجه',
ur'قیمه': u'قیمه',
ur'کاسه': u'یکی|سیاه|لیس',
ur'کج': u'نهاد|خلق|کلاه',
ur'کلاه': u'گوشه|گذار',
ur'کله': u'معلق|خشک|گنده|خر|شق|پوک',
ur'زبانه|زمین|ماشین|فرمان|کمان|کنگره|گوشه|دامنه|خانه|پول|مقام|آ[یئ]ینه': u'دار',
ur'کهن': u'سال|دیار',
ur'کینه': u'توز|ورز',
ur'گران': u'مغز|سایه|قدر|رکاب|سرشت|پایه|قیمت|روح|سنگ|جان|سر|فروش',
ur'گربه': u'گون|کوره',
ur'گشاده': u'رو|دست',
ur'گل': u'چهره|ریزان|ریز|گون|باران|آرا|اندام|برگ',
ur'گلوله': u'باران',
ur'ناهم|هم|گندم': u'گون',
ur'لازم': u'الوصول|الاجراء',
ur'مشکوک|معلوم|مجهول|فارغ': u'الحال',
ur'لت': u'لت|انبان|انبار',
ur'لسان': u'الغیب',
ur'مالک': u'الرقاب',
ur'ماه': u'طلعت',
ur'مشغول': u'الذمه',
ur'معظم': u'له|القدر',
ur'ملی|همجنس|زمینه': u'گرا',
ur'میرزا': u'قلمدان|قشمشم|بنویس',
ur'ناخن': u'خشک',
ur'نازک': u'نی|نارنجی|خیال',
ur'جهان|نافه': u'گشا',
ur'ندید': u'بدید',
ur'نظریه|رویا|رؤیا': u'پرداز',
ur'نقشه|وزنه|بهره|کلاه': u'بردار',
ur'نق': u'نقو',
ur'نگون': u'طشت|بخت',
ur'نیک': u'روز|انجام|پی|اختر|بخت',
ur'نیم': u'ته|بسمل',
ur'هرکن': u'پرکن',
ur'همایون': u'فال|آثار|بخت',
ur'همه': u'کاره|جانبه',
ur'هیچ': u'کاره|گاه|یک|کس|کدام',
ur'ول': u'خرج|معطل',
ur'یکه': u'شناس|بزن|سوار|تاز',
ur'ابجد': u'خوان',
ur'ابر': u'آلود|قدرت|ابزار',
ur'ابو': u'العجب|الکلام|الهول',
ur'اولو': u'الالباب|الامر|العزم',
ur'حسب|صاحب|واجب': u'الامر',
ur'گل|آذر': u'گون',
ur'آزاد': u'مرد|وار',
ur'باز': u'خرید|خواست|دید|بین',
ur'بر': u'هم|آشفتگی|آشفته|پایی',
ur'بلند': u'آوازه|پایه',
ur'آتش': u'بس|نشان|سوزی|افروز|افکن|افزار',
ur'پا': u'برجا|برهنه|بست|پتی|کار',
ur'پایه|بنیان': u'گذار|گذاری',
ur'پر': u'ابهام|ابهت|اتلاف|ادا|ادویه|ازدحام|استرس|استقامت|اشک|برخورد|ترانه|تردد|ترشح|تشبیه|تصادف|تعصب|تقلب|تلاش|تملق|شور',
ur'کم': u'محل|بضاعت|کم|یاب',
ur'پر|کم': u'نظیر|کار|تعداد|اشتباه|اشکال|اهمیت|تحرک|تحول|ترافیک|تراکم|تقاضا|تکرار|تنش|تنوع|رو|آب',
ur'تنگا': u'تنگ',
ur'تیز': u'پا|دست|دندان|هوش|بین',
ur'چادر|تخت|زاغه|شهر|ته|آب|کاخ|پایتخت|یکجا|ییلاق': u'نشین',
ur'چهار': u'شانه',
ur'ویروس': u'شناس|یاب',
ur'یاد': u'داشت|دهی',
ur'یار': u'کشی',
ur'ی[اأ]س': u'آلود',
ur'حاضر': u'جواب|یراق',
ur'خرد': u'سال',
ur'دو': u'برجی|تخمه|سره|قلو|بهشک',
ur'ذو': u'الجلال|العرش|القدر|القوافی|اللسانین|المجد|المکارم|المن|المناقب|المنن|النور|الوجهین|جسدین',
ur'رنگا': u'رنگ',
ur'رو': u'سفید|سیاه|باز',
ur'قهوه|نگار|آبدار|گل|کتاب': u'خانه',
ur'روز': u'افزون|انه',
ur'زود': u'باور',
ur'شاد': u'روان|کام|مان|مانه',
ur'فرا': u'خور|روی',
ur'کد': u'خدا|بانو',
ur'گردا': u'گرد',
ur'لا': u'ابالی|جون|کردار|مذهب|مروت|یتغیر|یتناهی|یزال|یعقل',
ur'نا': u'جوانمرد|خودآگاه|نجیب|امید|آزموده|آشنا|آگاه|برابر|تمام',
ur'ایمن|پیاده|مقاوم|امن|ساده|بهینه|مرتب|آماده|رها|آگاه|زیبا|یکسان|روان|ذخیره|استاندار|متمایز|جدا|شخصی|انبوه|خصوصی': u'سازی',
}
# ----------------------------------------Wrong dictations-----------------------
forReplace = { # 'میسیسیپی': u'میسیسیپی',
# 'هاوی': u'حاوی', ممکن است اسم خاص باشد
# 'سوماً': u'سوم',
# 'سوما': u'سوم',
# 'دوماً': u'دوم',
# 'دوما': u'دوم',
# 'جانا': u'جانی', باگ در [[جانا رودین]]
# 'طوسی': u'توسی', خواجه نصیرالدین طوسی را به تبدیل می کرد
# برپایه http:#www.persianacademy.ir/fa/pishvand.aspx
# بدل از تنوین
ur'به شخصه': u'بشخصه',
ur'بهشخصه': u'بشخصه',
ur'به عینه': u'بعینه',
ur'بهعینه': u'بعینه',
ur'احمدی نژاد': u'احمدینژاد',
ur'جابه جا': u'جابهجا',
ur'جا به جا': u'جابهجا',
ur'جا بهجا': u'جابهجا',
ur'بی بی سی': u'بیبیسی',
ur'اف بی آی': u'افبیآی',
ur'می سی سی پی': u'میسیسیپی',
ur'ویژهگی': u'ویژگی',
ur'دایرهالمعارف': u'دایرةالمعارف',
ur'دایره المعارف': u'دایرةالمعارف',
ur'تأئید': u'تأیید',
ur'تائید': u'تأیید',
ur'بقیهالله': u'بقیةالله',
ur'بقیه الله': u'بقیةالله',
ur'بقیة الله': u'بقیةالله',
ur'دگمه': u'دکمه',
ur'وحله': u'وهله',
ur'نقطهنظر': u'دیدگاه',
ur'ناچاراً': u'بهناچار',
ur'ناچارا': u'بهناچار',
ur'منیت': u'منی',
ur'منیٔت': u'منی',
ur'فرآیند': u'فرایند',
ur'فرآیندها': u'فرایندها',
ur'کارآیی': u'کارایی',
ur'ملاحضه': u'ملاحظه',
ur'ملیون': u'میلیون',
ur'ملیارد': u'میلیارد',
ur'مطمعن': u'مطمئن',
ur'مرهمت': u'مرحمت',
ur'مرحم': u'مرهم',
ur'محصوب': u'محسوب',
ur'مذبور': u'مزبور',
ur'متعصفانه|متاصفانه': u'متأسفانه',
ur'متغییر': u'متغیر',
ur'لشگر': u'لشکر',
ur'لحجه': u'لهجه',
ur'گاهاً': u'گاهی',
ur'گاها': u'گاهی',
ur'کهکیلویه': u'کهگیلویه',
ur'قائله': u'غائله',
ur'فارقالتحصیل': u'فارغالتحصیل',
ur'علاالدین': u'علاءالدین',
ur'علمشنگه': u'المشنگه',
ur'غلطاندن': u'غلتاندن',
ur'ظبط': u'ضبط',
ur'طنبور': u'تنبور',
ur'طپش': u'تپش',
ur'ضمینه': u'زمینه',
ur'زخامت|ذخامت': u'ضخامت',
ur'زخیم|ذخیم': u'ضخیم',
ur'صحفه': u'صفحه',
ur'سفارشاً': u'سفارشی',
ur'سفارشا': u'سفارشی',
ur'سرلشگر': u'سرلشکر',
ur'سپاسگذار': u'سپاسگزار',
ur'خبرگذار': u'خبرگزار',
ur'ساتع': u'ساطع',
ur'زندهگی': u'زندگی',
ur'زباناً': u'زبانی',
ur'زبانا': u'زبانی',
ur'رهبریت': u'رهبری',
ur'در باره': u'درباره',
ur'دوئیت': u'دوگانگی',
ur'داوطلبین': u'داوطلبان',
ur'خوشنود': u'خشنود',
ur'خوبیت': u'خوبی',
ur'خوانواده': u'خانواده',
ur'خواستگاه': u'خاستگاه',
ur'خرشید': u'خورشید',
ur'خردن': u'خوردن',
ur'خانند': u'خوانند',
ur'خابیدن': u'خوابیدن',
ur'حظور': u'حضور',
ur'حظرت': u'حضرت',
ur'حدلامکان': u'حتیالامکان',
ur'حاظر': u'حاضر',
ur'چهارماً': u'چهارم',
ur'چهارما': u'چهارم',
ur'چارشنبه': u'چهارشنبه',
ur'جاناً': u'جانی',
ur'توجیح': u'توجیه',
ur'توضیع': u'توزیع',
ur'تلوزیون': u'تلویزیون',
ur'تضاهر': u'تظاهر',
ur'ترجیه': u'ترجیح',
ur'پنچ': u'پنج',
ur'پزشگی': u'پزشکی',
ur'پرفسور': u'پروفسور',
ur'پاتوغ': u'پاتوق',
ur'بیمهابا': u'بیمحابا',
ur'بنیانگزار': u'بنیانگذار',
ur'بلقور': u'بلغور',
ur'بلاخره': u'بالاخره',
ur'برخواستن': u'برخاستن',
ur'برعلیه': u'علیه',
ur'برخواست': u'برخاست',
ur'بدیت': u'بدی',
ur'باطلاق': u'باتلاق',
ur'بازرسین': u'بازرسان',
ur'بارگزار': u'بارگذار',
ur'باجناق': u'باجناغ',
ur'باباقوری': u'باباغوری',
ur'آروق': u'آروغ',
ur'انظباط': u'انضباط',
ur'التفاط': u'التفات',
ur'افضلتر': u'بهتر',
ur'افسنطین': u'افسنتین',
ur'اعلمتر': u'داناتر',
ur'اطو': u'اتو',
ur'اطراق': u'اتراق',
ur'اطاق': u'اتاق',
ur'اصطرلاب': u'اسطرلاب',
ur'ارتقاع': u'ارتقا',
ur'اختاپوث': u'اختاپوس',
ur'ابولفضل': u'ابوالفضل',
ur'امپراطور': u'امپراتور',
ur'آزوقه': u'آذوقه',
ur'ذکام': u'زکام',
ur'بگیر و ببند': u'بگیر ببند',
ur'ساز و کار': u'سازوکار',
ur'جر و بحث': u'جربحث',
ur'خوار و بار': u'خواربار',
ur'احجام': u'حجمها',
ur'اقشار': u'قشرها',
ur'لازم به ذکر است': u'لازم است ذکر شود',
ur'بدلیل': u'به دلیل',
ur'آنرا': u'آن را',
ur'اینرا': u'این را',
ur'هیات': u'هیئت',
ur'هیأت': u'هیئت',
ur'رییسه': u'رئیسه',
ur'رییس': u'رئیس',
ur'مساله': u'مسئله',
ur'مسأله': u'مسئله',
ur'همین جا': u'همینجا',
ur'همینجا': u'همینجا',
ur'همینطور': u'همینطور',
ur'همین طور': u'همینطور',
ur'همان جا': u'همانجا',
ur'همانجا': u'همانجا',
ur'همان طور': u'همانطور',
ur'همانطور': u'همانطور',
ur'هیچکدام': u'هیچکدام',
ur'هیچ کدام': u'هیچکدام',
ur'هیچکس': u'هیچکس',
ur'هیچ کس': u'هیچکس',
ur'هیچیک': u'هیچیک',
ur'هیچ یک': u'هیچیک',
ur'همدیگر': u'همدیگر',
ur'آن چه': u'آنچه',
ur'آنچه': u'آنچه',
ur'چنان چه': u'چنانچه',
ur'چنانچه': u'چنانچه',
ur'چنان که': u'چنانکه',
ur'چنانکه': u'چنانکه',
ur'ئیدروژن': u'هیدروژن',
ur'بعضن': u'بعضاً',
ur'غالبن': u'غالباً',
ur'کاملن': u'کاملاً',
ur'احتمالن': u'احتمالاً',
ur'اصلن': u'اصلاً',
ur'اشتباهن': u'اشتباهاً',
ur'منشاء': u'منشأ',
ur'مبداء': u'مبدأ',
}
persianGlyphs = { # these two are for visually available ZWNJ #visualZwnj
ur'\u200cه': u'ﻫ',
ur'ی\u200c': u'ﻰﻲ',
ur'أ': u'ﺄﺃﺃ',
ur'آ': u'ﺁﺁﺂ',
ur'إ': u'ﺇﺈﺇ',
ur'\u0627': u'ﺍﺎ',
ur'ب': u'ﺏﺐﺑﺒ',
ur'پ': u'ﭖﭗﭘﭙ',
ur'ت': u'ﺕﺖﺗﺘ',
ur'ث': u'ﺙﺚﺛﺜ',
ur'ج': u'ﺝﺞﺟﺠ',
ur'چ': u'ﭺﭻﭼﭽ',
ur'ح': u'ﺡﺢﺣﺤ',
ur'خ': u'ﺥﺦﺧﺨ',
ur'د': u'ﺩﺪ',
ur'ذ': u'ﺫﺬ',
ur'ر': u'ﺭﺮ',
ur'ز': u'ﺯﺰ',
ur'ژ': u'ﮊﮋ',
ur'س': u'ﺱﺲﺳﺴ',
ur'ش': u'ﺵﺶﺷﺸ',
ur'ص': u'ﺹﺺﺻﺼ',
ur'ض': u'ﺽﺾﺿﻀ',
ur'ط': u'ﻁﻂﻃﻄ',
ur'ظ': u'ﻅﻆﻇﻈ',
ur'ع': u'ﻉﻊﻋﻌ',
ur'غ': u'ﻍﻎﻏﻐ',
ur'ف': u'ﻑﻒﻓﻔ',
ur'ق': u'ﻕﻖﻗﻘ',
ur'ک': u'ﮎﮏﮐﮑﻙﻚﻛﻜ',
ur'گ': u'ﮒﮓﮔﮕ',
ur'ل': u'ﻝﻞﻟﻠ',
ur'م': u'ﻡﻢﻣﻤ',
ur'ن': u'ﻥﻦﻧﻨ',
ur'ه': u'ﻩﻪﻫﻬ',
ur'هٔ': u'ﮤﮥ',
ur'\u0648': u'ﻭﻮ',
ur'ؤ': u'ﺅﺅﺆ',
ur'ی': u'ﯼﯽﯾﯿﻯﻰﻱﻲﻳﻴ',
ur'ئ': u'ﺉﺊﺋﺌ',
ur'لا': u'ﻻﻼ',
ur'لإ': u'ﻹﻺ',
ur'لأ': u'ﻸﻷ',
ur'لآ': u'ﻵﻶ',
}
def my_replace(match, word1, word2):
match = match.group()
return match.replace(word1, word2)
def quotation(text):
# این تابع زمانی گیومه را به فارسی تیدیل میکند که در پاراگراف مورد نظر تعداد گیومهٔ لاتین زوج باشد.
lines = text.split(ur'\n')
result = []
for i in range(0,len(lines)):
line = lines[i]
# رفع مشکل استفاده از ـً به جای گیومه لاتین در متن فارسی
line = re.sub(ur'ا\"([ ]*[' + persianCharacters + ur'])', u'اً\\1',line)
# ”“ تبدیل
line = re.sub(ur'(^|[' + persianCharacters+ ur'\:>،»؛\s\n\}\]\.]+)“((?:\[\[|).*?['+ persianCharacters+ ur'\n]+?(?:\]\]|\.|\<|\:|))”(['+ persianCharacters+ ur'،«؛\s\n\.\[\{]|$)', u'\\1«\\2»\\3',line)
# وارونه ”“ تبدیل
line = re.sub(ur'(^|[' + persianCharacters
+ ur'\:>،»؛\s\n\}\]\.]+)"((?:\[\[|).*?['
+ persianCharacters
+ ur'\n]+?(?:\]\]|\.|\<|\:|))"(['
+ persianCharacters
+ ur'،«؛\s\n\.\[\{]|$)', u'\\1«\\2»\\3',line)
# وارونه ”“ تبدیل
line = re.sub(ur'(^|[' + persianCharacters
+ ur'\:>،»؛\s\n\}\]\.]+)”((?:\[\[|).*?['
+ persianCharacters
+ ur'\n]+?(?:\]\]|\.|\<|\:|))“(['
+ persianCharacters
+ ur'،«؛\s\n\.\[\{]|$)', u'\\1«\\2»\\3',line)
# ‘’ تبدیل
line = re.sub(ur'(^|[' + persianCharacters
+ ur'\:>،»؛\s\n\}\]\.]+)‘((?:\[\[|).*?['
+ persianCharacters
+ ur'\n]+?(?:\]\]|\.|\<|\:|))’(['
+ persianCharacters
+ ur'،«؛\s\n\.\[\{]|$)', u'\\1«\\2»\\3',line)
# وارونه ‘’ تبدیل
line = re.sub(ur'(^|[' + persianCharacters
+ ur'\:>،»؛\s\n\}\]\.]+)’((?:\[\[|).*?['
+ persianCharacters
+ ur'\n]+?(?:\]\]|\.|\<|\:|))‘(['
+ persianCharacters
+ ur'،«؛\s\n\.\[\{]|$)', u'\\1«\\2»\\3',line)
# ‚’ تبدیل
line = re.sub(ur'(^|[' + persianCharacters
+ ur'\:>،»؛\s\n\}\]\.]+)‚((?:\[\[|).*?['
+ persianCharacters
+ ur'\n]+?(?:\]\]|\.|\<|\:|\{|\[|))’(['
+ persianCharacters
+ ur'،«؛\s\n\.\[\{]|$)', u'\\1«\\2»\\3',line)
# „” تبدیل
line = re.sub(ur'(^|[' + persianCharacters
+ ur'\:>،»؛\s\n\}\]\.]+)„((?:\[\[|).*?['
+ persianCharacters
+ ur'\n]+?(?:\]\]|\.|\<|\:|))”(['
+ persianCharacters
+ ur'،«؛\s\n\.\[\{]|$)', u'\\1«\\2»\\3',line)
# << >> تبدیل
line = re.sub(ur'(^|[' + persianCharacters
+ ur'\:>،»؛\s\n\}\]\.]+)\<\<((?:\[\[|).*?['
+ persianCharacters
+ ur'\n]+?(?:\]\]|\.|\<|\:|))\>\>(['
+ persianCharacters
+ ur'،«؛\s\n\.\[\{]|$)', u'\\1«\\2»\\3',line)
# (()) تبدیل
line = re.sub(ur'(^|[' + persianCharacters
+ ur'\:>،»؛\s\n\}\]\.]+)\(\(((?:\[\[|).*?['
+ persianCharacters
+ ur'\n]+?(?:\]\]|\.|\<|\:|))\)\)(['
+ persianCharacters
+ ur'،«؛\s\n\.\[\{]|$)', u'\\1«\\2»\\3',line)
result.append(line)
return ur'\n'.join(result)
def dictationReplace(x,y,extensions,text):
Regex=ur'(^|[^' + persianCharacters + ur'])(\s|\u200c|_|)(' + x + ur')(\s|_)('+ y + ur')(\s|\u200c|_|)(' + extensions + ur')(\n|[^' + persianCharacters + ur'])'
text = re.sub(Regex,u'\\1\\2\\3\u200c\\5\\6\\7\\8',text)
return text
def complex_replace(txt, pat, w1, w2):
def function(s):
return s.group(1)+s.group(2).replace(w1, w2,1)+s.group(3)+s.group(4)
txt=re.sub(re.compile(pat),function,txt)
return txt
def dictation(text):
for i in complexes:
if complexes.has_key(i):
text = dictationReplace(i, complexes[i],
ur'ی|یی|ها|های|هایی|هایم|هایت|هایش|هایمان|هایتان|هایشان|', text)
# for last name
text = dictationReplace(personNames,
ur'ی|یی|زاده|نیا|گان|فر|نژاد|یان|ی\u200cها|یها'
, ur'ی|', text)
# for 'آباد's
text = dictationReplace(personNames + ur'|' + addToAbad, ur'آباد',
ur'زاده|نیا|پور|گان|فر|نژاد|ی|یان|ها|های|یی|هایی|ی\u200cها|یها|'
, text)
# for first names
for i in firstNameComplex:
if firstNameComplex.has_key(i):
text = re.sub(ur'(^|[^' + persianCharacters
+ ur']|\s|_)(' + i + ur')(\s|_)('
+ firstNameComplex[i]
+ ur')(\s|_)($|[^' + persianCharacters
+ ur']|[' + persianCharacters + ur'])',
u'\\1\\2\u200c\\4\\5\\6',text)
# for colors
text = dictationReplace(colorsNames, ur'فام|گون', ur'زاده|نیا|پور|گان|فر|نژاد|ی|یی|ها|های|هایی|ی\u200cها|یها|هایم|هایت|هایش|هایمان|هایتان|هایشان|', text)
# for numbers
text = dictationReplace(persianNumbers, ur'گانه|ماهه', ur'زاده|نیا|پور|گان|فر|نژاد|ی|یی|ها|های|هایی|هایم|هایت|هایش|هایمان|هایتان|هایشان|', text)
# wrong dictation
for i in forReplace:
if forReplace.has_key(i):
text = re.sub(ur'(^|[^' + persianCharacters
+ ur'])(\s|\u200c|_|)(' + i
+ ur')(\s|\u200c|_|)($|[^'
+ persianCharacters + ur'])', u'\\1\\2'
+ forReplace[i] + u'\\4\\5',text)
# کلماتی که آ دارند
text = complex_replace(text, ur"(^|\s|_|«|»|\[|\(|\<|\>|\')("+ wordsWithA+ ur")(ی|ئی|یی|ٔ|)( |«|»|\.|،|_|\]|\s|\:|\)|\<|\>|؟|\'|\!|$)", u'\u0627', ur'آ')
# بن مضارع که آ دارند
text = complex_replace(text,
ur"(^|\u200c|\s|_|«|»|\[|\(|\<|\>|\')("
+ PresentVerbsWithA
+ ur")(م|ی|د|یم|ید|ند)( |«|»|\.|،|_|\s|\]|\:|\)|\<|\>|؟|\!|\'|$)"
, u'\u0627', ur'آ')
# بن ماضی که آ دارند
text = complex_replace(text,
ur"(^|\u200c|\s|_|«|»|\[|\(|\<|\>|\')("
+ PastVerbsWithA
+ ur")(م|ی|د|یم|ید|ند)( |«|»|\.|،|_|\s|\]|\:|\)|\<|\>|؟|\!|\'|$)"
, u'\u0627', ur'آ')
# همزه ضم
text = complex_replace(text, ur"(^|\s|_|«|»|\[|\(|\<|\>|\')("
+ HamzehZam
+ ur")(ها|ها|ین|ان|ی|ئی|یی|ٔ|)( |«|»|\.|،|_|\s|\]|\:|\)|\<|\>|؟|\!|\'|$)"
, u'\u0648', ur'ؤ')
# همزه نصب
text = complex_replace(text, ur"(^|\s|_|«|»|\[|\(|\<|\>|\')("
+ HamzehNasb
+ ur")(ی|ئی|یی|ٔ|)( |«|»|\.|،|_|\s|\]|\:|\)|\<|\>|؟|\!|\'|$)"
, u'\u0627', ur'أ')
# همزه وسط کلمه
for i in HamzehAtInside:
if HamzehAtInside.has_key(i):
text = re.sub(ur"(^|\s|_|«|»|\[|\(|\<|\>|\')(" + i
+ ur')(| )(' + HamzehAtInside[i]
+ ur")(?= |«|»|\.|،|_|\s|\]|\:|\)|\<|\>|؟|\!|\'|$)"
, u'\\1\\2ء\\4',text) # در مورد افزودن یا حذف همزهٔ پایانی اجماعی وجود ندارد.
# الف مقصوره
text = re.sub(ur"(^|\s|_|«|»|\[|\(|\<|\>|\')(" + HamzehAtEnd + ur")(?= |«|»|\.|،|_|\s|\]|\:|\)|\<|\>|؟|\!|\'|$)",u'\\1\\2ء',text)
text = complex_replace(text,
ur"(^|\s|_|«|»|\[|\(|\<|\>|\')("
+ AlefMaghsooreh
+ ur")(| )( |«|»|\.|،|_|\s|\]|\:|\)|\<|\>|؟|\!|\'|$)"
, u'\u0627', ur'ی')
# صفت+تر
text = re.sub(ur"(^|\s|_|«|»|\]|\[|\(|\<|\>|\')("
+ adjective
+ ur")( |_)تر(?= |«|»|\.|\[|\]|،|_|\s|\:|\)|\<|\>|؟|\!|\'|$)"
, u'\\1\\2\u200cتر',text)
# اسامی رنگها (بهعنوان صفت)+تر
text = re.sub(ur"(^|\s|_|«|»|\]|\[|\(|\<|\>|\')("
+ colorsNames
+ ur")( |_)تر(?= |«|»|\.|\[|\]|،|_|\s|\:|\)|\<|\>|؟|\!|\'|$)"
, u'\\1\\2\u200cتر',text)
text = re.sub(ur"به دست\u200cآورد", u'به دست آورد',text) # Solving a bug!
def function(s):
return s.group(1)+s.group(2)[:-1]+u'اً'+s.group(3)
regex=ur"(^|[؛\s\n\.،«»\'\"\<\>؟])(" + needsNasb + ur')[' + NASB + ZAMM + ur']?([؛؟\s\n\.،«»\'\"\<\>]|$)'
text=re.sub(regex,function,text, re.UNICODE)
return text
def normalizeZwnj(text):
text = re.sub(ur"\u200c{2,}", ur"\u200c",text)