ویکیپدیا:درخواستهای ربات/تمیزکاری عنوانها
ظاهر
به جای [[{{}}]] نام ربات خودتان را بنویسید
کد
[ویرایش]#!/usr/bin/python
# -*- coding: utf-8 -*-
# Reza(User:reza1615), 2013
#
# Distributed under the terms of MIT License (MIT)
version=u'8.0'
import re,codecs,os
import pywikibot
from pywikibot.compat import query
import string
from datetime import timedelta,datetime
faSite = pywikibot.Site('fa')
bot_adress=u'/data/project/YourBot/'
#-----------------
tags = ur'b|big|blockquote|charinsert|code|comment|del|div|em|gallery|hyperlink|i|includeonly|imagemap|inputbox|link|math|noinclude|nowiki|pre|ref|s|small|source|startspace|strong|sub|sup|template|timeline'
faChrs = u'ءاآأإئؤبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیيك'
langs = u'بلغاری|بنگالی|پارسی باستان|پارسی میانه|پالی|پرتغالی|پشتو|پنجابی|پینیینی|تاگالوگ|تامیلی|تاهیتی|تایلندی|ترکمنی|ترکی|ترکی استانبولی|ترکی آذربایجانی|تلگو|جاوهای|چکی|چینی|چینی سادهشده|چینی سنتی|دانمارکی|دوناگری|روسی|رومانیایی|ژاپنی|سامی|سانسکریت|سریانی|سکایی|سواحلی|سواحیلی|سوندایی|سوئدی|سیسیلی|صربی|عبری|عربی|فارسی افغانستان|فارسی ایران|فارسی تاجیکی|فارسی سره|فرانسوی|فنلاندی|فیلیپینی|کاتالان|کردی|کرهای|کروات|کرواسی|گالیسی|گجراتی|گرجی|گرینلندی|لاتین|لتونیایی|لیتوانیایی|مازندرانی|مالایی|مالزیایی|مجاری|مراتی|مصری|مغولی|مقدونی|نپالی|نروژی|نروژی نو|نورمنی|هاوائی|هائیتیایی|هلندی|هندی|هواسایی|ولزی|ویتنامی|یونانی|یونانی باستان'
zaed = ur"''متن مورب''|'''متن ضخیم'''|\[\[پرونده:مثال\.jpg]]|=+ متن عنوان =+|:خط تو رفته\n?|<nowiki>اینجا متن قالببندینشده وارد شود</nowiki>|\# مورد فهرست شمارهای\n?|\* مورد فهرست گلولهای|<sub>متن زیرنویس</sub>|<sup>متن بالانویس</sup>|<small>متن کوچک</small>|<big>متن بزرگ</big>|#(؟:تغییرمسیر|REDIRECT) \[\[(?:نام صفحه مقصد|نام صفحه)]]|\{\| class=\.wikitable\.\n\|-\n! متن عنوان !! متن عنوان !! متن عنوان\n\|-\n\| مثال \|\| مثال \|\| مثال\n\|-\n\| مثال \|\| مثال \|\| مثال\n\|-\n\| مثال \|\| مثال \|\| مثال\n\|}|<gallery>\nپرونده:مثال\.jpg\|عنوان ۱\nپرونده:مثال.jpg\|عنوان ۲\n</gallery>|<ref>{{یادکرد\|نویسنده = \|عنوان = \| ناشر = \|صفحه = \|تاریخ = }}</ref>|<ref>{{یادکرد وب\|نویسنده = \|نشانی = \|عنوان = \| ناشر = \|تاریخ = \|تاریخ بازدید = }}</ref>|<ref>{{یادکرد خبر\|نام = \|نام خانوادگی = \|همکاران = \|پیوند = \|عنوان = \|اثر = \| ناشر = \|صفحه = \|تاریخ = \|بازیابی = }}</ref>|\[\[رده:]]|\[\[en:]]|\[\[fa:.*?]]|\[\[عنوان پیوند]]|\{\{\s*}}|\[\[\s*\|?\s*]]|<!-- *?-->|\'\'\'متن ضخیم'\'\'\|'\'متن مورب\'\'|\'\'\'متن پررنگ\'\'\'"#-----------------
bnMazi = u'[آا]راست|[آا]را?مید|[آا]زرد|[آا]زمود|[آا]سود|[آا]شامید|[آا]شفت|[آا]فرید|[آا]لا[یئ]ید|[آا]لود|[آا]ما[هس]ید|[آا]مد|[آا]مرزید|[آا]م[یو]خت|آورد|[آا][هو]یخت|[آا]غ[شس]ت|ارزید|افتاد|افراشت|ا?فروخت|افزود|افسرد|ا?فشاند|اف[کگ]ند|انجامید|اند[او]خت|اندیشید|ان[بگ]اشت|نگاشت|انگیخت|ایستاد|با[خف]ت|با[لر]ید|[شب]ایست|بخش[یو]د|برازید|ب[ور]د|[چبپ]رید|[رجشب]ست|بلعید|پ[وا]شید|پخت|پذیرفت|پرا[کگ]ند|پرداخت|پرست?ید|پرورد|پرید|پژمرد|پژوهید|پسندید|پنداشت|[بپ]و[سشی]ید|پیچید|پیراست|پیمود|پیوست|تا[فخ]ت|تپید|ترا[وش]ید|تر[سشک]ید|تکانی?د|تنید|توانست|جن[بگ]ید|[جد]وش?ید|چرخید|چسبید|چ[مکشر]?ید|خر[او]شید|خ[مرز]ید|خشکید|خوابید|خو?است|خواند|خورد|خیسید|داد|داشت|[مد]انست|درخشید|دزدید|دوخت|ربود|راند|ر[مس]ید|رو?فت|رنجید|رو[یئ]ید|ریخت|زد|زدود|زیست|س[وا]خت|سپرد|س[تر]ود|ستیزید|سرشت|سزید|سنجید|ش[تکگ]افت|شد|شک?ست|ش[کگ]فت|شمرد|شناخت|شنید|شورید|طلبید|غلطید|فرستاد|فر[مس]ود|فریفت|فشرد|فهمید|قبولاند|کا[سش]ت|کاوید|ک[نر]د|کشت|کشید|کو[چش]ید|کوفت|گداخت|گذا?شت|گرا[یئ]ید|گردید|گرفت|گروید|گری[خس]ت|گزارد|گزید|گس[تا]رد|گسست|گ[فش]ت|گشود|گماشت|گنجید|ل[رغ]زید|ما[لس]ید|ماند|مرد|نا[مل]ید|نشست|نکوهید|نگاشت|ن?گریست|نمود|نواخت|نوردید|نوشت|نهاد|نهفت|نی?وشید|ور?زید|هراسید|هلید|یازید|یافت'
bnMzare = u'[آا]را[یم]|[آا]زار|[آا]ماس|[آا]ز?مای|[آا]سای|[آا]شام|[آا]شوب|[آا]غا[رز]|[آا]فرین|[آا]گن|[آا]لای|[آا]ی|[آا]م[یور]ز|[آا]و?ر|[آا]ویز|[آا]هنج|ارز|افت|افر[او]ز|افزای|افسر|ا?فشان|اف[کگ]ن|انبار|انجام|اندا[یز]|اندوز|اندیش|ا?نگار|انگیز|اوبار|ایست|با[فلیشرز]|بخشای|بخش|براز|ب[َُ]?ر|بند|بساو|بسیج|بلع|بو[یس]?|بیز|پاش|پالای|پ[رز]|پذیر|پرا[کگ]ن|پرداز|پرست?|پرور|پژمر|پژوه|پسند|پلاس|پلک|پناه|پندار|پو[سشیک]|پیچ|پی[مر]ای|پیوند|تا[پز]|تو?پ|ترا[شو]|تر[سشک]|تکان|تن|توان|[نلجد]ه|جن[بگ]|جو[یش]?|چا[یپ]|چ[مکپشفر]|چر[خب]?|چسب?|چلان|چین|خا[یر]|خرا[مش]|خس[بت]|خشک|خروش|خ[ملرز]|خوا[نبه]|خو[فر]|خی[سز]|دا[نر]|درخش|درو?|دزد|[لد]م|دو[شز]?|ربای|ران|رخش|ر[سمه]|رو[یب]?|رشت|رقص|رنج|[بر]ی[نز]|زا[یر]|ز[ین]|زدای|ساز|سپا?ر|سپ؟وز|ستان|ستر|ستیز|سرای|سرشت|س[رز]|سنب|سگال|سنج|سای|شا[شی]|شتاب|شوی?|شک[او]ف|شکن|شکیب|ش[مو]ر|شناس|شنو|طلب|طوف|غارت|غرّ?|غلط|غنو|فرست|فر[سم]ای|فروش|فریب|فشر|فهم|قاپ|قبولان|کا[هرو]|ک[َُِ]?ش|ک[نف]|کو[چشب]|گای|گداز|گذا?ر|گرا[یز]|گرد|گیر|گرو|گریز?|گزار|گز|گزین|گس[تا]ر|گسی?ل|گشای|گو[یز]|گن[جد]|گ[مو]ار|ل[غر]ز|لن[گد]|لیس|ما[سلن]|میر|مک|مو[یل]|نا[زلم]|ن?شین|نکوه|نگا?ر|نمای|نواز|نورد|نویس|نهنب|نی?وش|ور?ز|هراس|هل|یا[برز]'
noAlef = u'باجی|بادانی?|بادی?|بار|باژور|بافت|با[لن]|بانگا[نه]|بتاب|بجی?|بچین|بخس[بت]|بخواره|بخور[دشی]?|بخوست|بخیز|بدارچی|بدارخانه|بدار[وکی]?|بدستان|بدستی?|بدندان|بدنگ|بده|بدیده|براهه?|برفت|برو[دن]|بریز|بریزگان|بزن|بز[یه]|بژ|بسال|بسالان|بست|بستره|بست[نه]|بسکون|بسه|بسوار|بشار|بشتگاه|بشتن?|بشخور|بش[نیش]|بشنگ|بغوره|بفت|بک|بکار|ب?کافت|بکا[نم]ه|بکش|بکشین|بکند|بکوهه|بکی|بگاه|بگرد|بگردان|بگز|بگوشت|بگون|بگیر|بگینه|بلوج|بنوس|بوند|بونمان|بونه|بیار|پارات|پارتاید|پارتمان|پاراتی|پاندیس|پاندیسیت|تربان|ترمه|تروپین|تریاد|تشبار|تشبان|تشپا|تشخوار|تشدان|تشفشان|تشک|تشکده|تشگاه|تش[هی]?|تشیزه|تشین|تلیه|ته|تورپات|تیه|ثار|ثام|جاردن|جان|جودان|جید[نه]|جیل|جین|چار|چاردن|چارکشی|چمز|حاد|خال|خت[نه]|خر|خرالامر|خرالزمان|خرت|خردست|خرزمان|خریا؟ن|خ[سش]مه|خشیج|خشیجان|خشیگ|خور|خورچرب|خورخشک|خورسنگین|خوندبازی|خوندک?|دا[بشک]|دامس|دخ|درس|درمه?|درنگ|دمک|دمیت|دمیرال|دمیزاد|دنیس|دیش|دیند?ه|ذار|ذری?|ذربایجانی?|ذربو|ذرجشن|ذرخش|ذریو?ن|ذوقه|ذین|را[یء]|راستن|راسته|رام|رامانیدن|رامش|رامگاه|رامی|رامیدن|رایش|رایشگاه|رایشگر|راییدن|رتروز|رتزین|رتیست|رتیشو|رخالق|ردبیز|رده|ردینه|رزم|رزو|رزوخواه|رزومندی?|رشه|رشیتکت|رشیو|رغ|رغده|رگون|رمان|رمان?شهر|رمیچر|رمید[هن]|رن|رنائوت|رنج|رنگ|رواره|روبند|روغ|ری|ریا|ریستوکرات|ریستوکراسی|ریغ|زادگان|زادگی|زادمرد|زاد[یه]?|زادوار|زادی?خواه|زار|زارتلخه|زا?رد[نه]|زارنده|زاریدن|زال|زجوی|زخ|زدن|زرد|زردگی|زرم|زرمجو|زرمگین|زری|زغ|زفنداک|زگار|زما|زمایش|زمایشگاه|زماینده|زمایه|زمندی?|زمودگی|زمود[نه]|زمون|زناک|زور|زوغ|زوقه|زیدن|زیر|ژان|ژانس|ژخ|ژدار|ژده|ژغ|ژفنداک|ژگن|ژن[دگ]|ژندن|ژندیدن|ژیانه|ژید[نه]|ژیر|ژیرنده|ژیریدن|ژینه|سان|سانسور|سانی|سایش|سایشگاه|ساینده|ساییدن|سبان|سپیرین|ستانه|ستر|ستیگماتیسم|ستی[من]ه?|سدست|سغده|سفالت|سکاریس|سمانخانه|سمانخراش|سمان[هی]?|سموغ|سه|سودگی|سود[نه]|سیابان|سیاچرخ|سیازنه|سیاکردن|سیا[وب]?|سیایی|سیب|سیل|سی[من]ه|سیون|شا[بم]|شامیدن|شانه|شپز|شپزخانه|شتالنگ|شت[می]|شخال|شخانه|شردن|شرمه|شفتگی|شفت[نه]?|شکار|شکارساز|شکاره|شکوبه|شکو[بخ]?|شکوخیدن|شگر|شمالی?|شموغ|شنا|شناگر|شنا[هو]|شناوری|شنایی|شوب|شوب?گر|شوبیدن?|شور|شوردن|شوریده|شوغ|شوفتن|شیانه|شیهه|صال|غُش|غا|غاجی|غار|غاردن|غاری|غاریدن|غازگر|غاز[هی]?|غازیدن|غالش?|غالنده|غالید[نه]|غچه|غردن|غری?|غز|غ[سش]ت[نه]|غل|غندن|غنده|غو[زشل]|غوشیدن|غیل|فا[تق]|فاقی|فتاب[هی]?|فتومات|فدم|فرنگ|فروشه|فریدگار|فرید[نه]|فرین|فرینگان|فریننده|فگانه|فل|فند|فندیدن|فیش|ق|قا|قازاده|قاسی|ق?بانو|قچه|قسنقر|قشام|قطی|قورایی|قوش|کادمیک?|کاردئون|کام|ک[بپج]|کبند|کتریس|کتور|کروبات|کروباسی|کستن|ککرا|کله|کند[نه]|کنش|کنه|کنیدن|کواریوم|کوستیک|کولاد|کومولاتور|گاهاندن|گاهی?|گ[پج]|گراندیسمان|گرمان|گشتن|گفت|گنج|گنده|گهی|گو|گور|گورگر|گو[شن]|گیشیدن|گی[من]|لاپلنگی|لات|لاچیق|لاخون|لاس|لاسکا|لاگارسون|لامد?|لاوه?|لایش|لاییدن|لبالو|لبوم|لبومین|لپر|لت|لترناتیو|لر|لرژی|ل[شغ]|لغده|لفا|لفت[نه]|لکالویید|لگرو|لگونه|لوچه|لودگی|لود[نه]|لوسن|لومین|لومینیوم|لو[ئن]ک|لیاژ|لیداد|لیزیدن|ماتور|ماج|ماجگاه|مادگی|ماده|مار|مارگر|ماریدن|ماریلیس|ماس|ماسانیدن|ماسیدن|ماق|مال|مانی|ماهانیدن|ماهیدن|مبولانس|مپر|مپرسنج|مپلی|مپول|مپی|مخته|مدگان|مدن?|مرانه|مرزش|مرزگار|مرزنده|مرزیدن|مرزیده|مرغ|مریکا|مریکایی?|مفی|مفیبول|مه|موت|موخت[نه]|مود[نه]|موزانه|موزشی?|موزشیار|موزگا[رن]|موزنده|موزه|موق|موکسی|مولن|مون|مونیاک|میب|میختگی|میخت[نه]|میز[شه]?|میزگاری?|میغه?|نابولیسم|نات?|ناتومی|نارشی|نارشیس[تم]ی?|ناس|نالوگ|نالیز|نام|ناناس|نتراکت|نتریک|نت[نی]|نتیک|نجا|نچت?|ندوتوکسین|ندودرم|ندوسپرم|ندوسکوپی|ندون|نرمال|نزیم|نژین|نژیوکت|نژیوگرافی|نسه|نسیلین|نک|نگلوفیل|نوریسم|نیلین|نین|نیه|نیون|هار|هاردن|هازیدن|هستگی|هسته|هک|همند|هنج|هنجیدن|هنگ[ری]?|هنگساز|هنین|هو|هوانگیز|هوپا|هوتک|هوچشم|هودل|هوفغند|هومند|هون|هیانه|هیختن|واخ|وارگی|وا[رز]ه?|واشناسی|واکس|وام|وانتاژ|وانس|وانگارد|وانویسی|وردجو|وردگا؟ه|وردن|وردیدن|ورک|ورنجن|وری|وریدن|وریل|ونگ|ونگان|ونگون|ویخت[نه]|ویزش?|ویزگ?ان|وی[زژ]ه|ویزون|ویشن|یا[تن]?|یبک|یتم?|یزنه|یژ|یفت|یفون|ینده|یه|ییژ|یین|[یئ]?ینه|ئورت'
sametH = ur'فرمانده|زره|کوه|گره|گنه|سپه|مکروه|م?ت?وجّ?ه|منزّ?ه|نزه|ابله|مرفّ?ه|شبیه|مت?شابه|کریه|پادشه|اللّ?ه|اله|[آکبتدرزشلم]ه' #e: صامت هـ
spcBfre = u'.،,:؛;؟٫)}]»》”,·。一ー・、:()「」〜?!ء'
spcAftr = u'({[«《“,·。一ー٫・、:()「」〜?!'
bLA = u'(?!['+faChrs+u'])'
bLB = u'(?<!['+faChrs+u'])'
arabicDigits = ur'0123456789'
arabicIndicDigits = ur'٠١٢٣٤٥٦٧٨٩'
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)
# Clean ZWNJs after characters that don't conncet to the next letter
text = \
re.sub(ur"([۰-۹0-9إأةؤورزژاآدذ،؛,\:«»\\/@#$٪×\*\(\)ـ\-=\|ء])\u200c"
, u'\\1',text)
# Clean ZWNJs before and after English characters
text = re.sub(ur"\u200c([\w])", u'\\1',text)
text = re.sub(ur"([\w])\u200c", u'\\1',text)
# Clean ZWNJs before and after Persian characters
text = re.sub(ur'\u200c([' + vowels + arabicIndicDigits
+ persianDigits + hamza + '])', u'\\1',text)
text = re.sub(ur'([' + arabicIndicDigits + '])\u200c', u'\\1',text)
text = re.sub(ur"([\w])\u200c", u'\\1',text)
# Clean ZWNJs after and before punctuation
text = re.sub(ur"\u200c([ء\n\s\[\]\.،«»\:\(\)\؛\؟\?\;\$\!\@\-\=\+\\|])", u'\\1',text)
text = re.sub(ur"([\n\s\[\.،«»\:\(\)\؛\؟\?\;\$\!\@\-\=\+\\|])\u200c", u'\\1',text)
# Clean ZWNJs before brakets which have sapce after\before them
text = re.sub(ur"\u200c(\][\s\n])", u'\\1',text)
text = re.sub(ur"([\n\s]\[)\u200c", u'\\1',text)
return text
def toStandardPersianCharacters(text):
for i in persianGlyphs:
text = re.sub(ur'[' + persianGlyphs[i] + ur']', i,text)
text = normalizeZwnj(text)
text = text.replace(ur"ك", ur'ک') # Arabic
text = text.replace(ur"ڪ", ur'ک') # Urdu
text = text.replace(ur"ﻙ", ur'ک') # Pushtu
text = text.replace(ur"ﻚ", ur'ک') # Uyghur
text = text.replace(ur"ي", ur'ی') # Arabic
text = text.replace(ur"ى", ur'ی') # Urdu
text = text.replace(ur"ے", ur'ی') # Urdu
text = text.replace(ur"ۍ", ur'ی') # Pushtu
text = text.replace(ur"ې", ur'ی') # Uyghur
text = text.replace(ur"ہ", ur'ه') # Convert ہ to ه ہہہہ to ههه
text = re.sub(ur"ە", u'ه\u200c',text) # Kurdish
text = text.replace(ur"ھ", ur'ه') # Kurdish
return text
def applyOrthography(text):
text = text.replace(ur"\r", ur'')
# تمیزکاری autoFormatter.js
text = re.sub(ur"[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F\uFEFF]+", u'',text)
text = re.sub(ur"[ \xA0\xAD\u1680\u180E\u2000-\u200D\u2028\u2029\u202F\u205F\u2060\u3000]+\n", u'\n',text)
# تبدیل تب و فاصله نشکن اول خط به هیچ چون مدیاویکی آن را در نظر نمیگیرد
#text = re.sub(ur"\n[\t\u00A0]+", u'\n',text)
# تبدیل انواع فاصلهها به فاصله ساده
text = re.sub(ur"[\u0020\u0085\u00A0\u180E\u2000-\u200A\u202F\u205F\u3000]", u' ',text)
text = re.sub(ur"[\u0085]", u'',text)
# http:#kb.mozillazine.org/Network.IDN.blacklist_chars
text = re.sub(ur"[\u01C3\uFE15]", u'!',text)
text = re.sub(ur"[\u02D0\u0589\u05C3\uA789]", u': ',text)
text = re.sub(ur"[\u0338\u2044\u2215\u2571\u29F8\u3033\uFF0F]", u'/',text)
text = re.sub(ur"[\u05F4]", u'"',text)
text = re.sub(ur"[\u06D4\u0701\uFF0E\uFF61]", u'.',text)
text = re.sub(ur"\u3014", u'(',text)
text = re.sub(ur"\u3015", u')',text)
# جایگزینی ۀ غیراستاندار+حرف بعدی بدون فاصله به ه+همزه+فاصله
text = re.sub(ur"ۀ(?![\s\n])", u'هٔ ',text)
# Replace ه followed by (space|ZWNJ|lrm) follow by ی with هٔ
text = re.sub(ur"ه[\u200c\u200e\s]+ی([\s\n])", u'هٔ\\1',text)
# Replace ه followed by (space|ZWNJ|lrm|nothing) follow by ء or with هٔ
text = re.sub(ur"ه[\u200c\u200e\s]*[ءٔ]([\s\n])", u'هٔ\\1',text)
# Replace هٓ or single-character ۀ with the standard هٔ
text = re.sub(ur"(ۀ|هٓ)", u'هٔ',text)
# Replace ه followed by ئ or ی, and then by ی, with ه\u200cای, example: خانهئی becomes خانه\u200cای
text = re.sub(ur"ه\u200c[ئی]ی", u'ه\u200cای',text)
# def for removing incorrect ZWNJs
text = re.sub(ur"([\u200c\u200e])([\s\n])", u'\\2',text)
text = re.sub(ur"([\s\n])([\u200c\u200e])", u'\\1',text)
# فاصلهٔ پیش از واکه\u200cهای کوتاه اشتباه است و برای جلوگیر از به هم چسبیدن کلمات فاصله و واکه جابجا باید گردند.
text = re.sub(ur'([' + persianCharacters + vowels + hamza+ ur'])(\s)([' + vowels + hamza + ur'])',u'\\1\\3\\2',text)
# واکه\u200cهای کوتاه پشت سرهم نمی\u200cآیند و یک حرف باید بینشان فاصله باشد
text = re.sub(ur'([' + vowels + hamza + ur']){2,}', u'\\1',text)
text = re.sub(ur"ئء", ur'یء',text) # two hamzes after each other
text = re.sub(ur"أء", ur'اء',text) # two hamzes after each other
text = re.sub(ur"ؤء", ur'ؤ',text) # two hamzes after each other
# .replace(ur"وء", ur'ؤ')#bug on سوء
text = re.sub(ur"سؤ ?استفاده", ur'سوءاستفاده',text) # bug on سوءاستفاده و سوء
# افزودن همزه
text = re.sub(ur"درباره (ام|ات|اش|مان|تان|شان|ای)(\s|$)",u'درباره\\1\\2',text) # i برای جلوگیری از باگ احتمالی برای افزودن همزه به درباره
#text = re.sub(ur"درباره\s", ur'دربارهٔ ',text)
#text = re.sub(ur'صفحه(\s|)([' + persianDigits + ']+)(\n|\.|\,|\||\<)', u'صفحهٔ \\2\\3',text) # [[Special:PermaLink/15326391#افزودن همزه]]
return text
def complexVerbsApplyZwnj(text):
for x in persianComplexPastVerbs:
y = persianComplexPastVerbs[x]
text = re.sub(ur'(^|[^' + persianCharacters + ur'])(' + x
+ ur') ?(می|نمی|)( |\u200c|)(ن|)(' + y
+ ur')(م|ی|یم|ید|ند|ه|ن|)($|[^'
+ persianCharacters + ur'])',
u'\\1\\2\u200c\\3\u200c\\5\\6\\7\\8',text)
for x in persianComplexPresentVerbs:
y = persianComplexPresentVerbs[x]
text = re.sub(ur'(^|[^' + persianCharacters + ur'])(' + x
+ ur') ?(می|نمی|)( |\u200c|)(ن|)(' + y
+ ur')(م|ی|د|یم|ید|ند|ن)($|[^'
+ persianCharacters + ur'])',
u'\\1\\2\u200c\\3\u200c\\5\\6\\7\\8',text)
return text
def applyZwnj(text):
text = re.sub(ur'(^|[^' + persianCharacters + ur'])(می|نمی) ?'
+ persianPastVerbs + ur'(م|ی|یم|ید|ند|ه|)($|[^'
+ persianCharacters + u'])', u'\\1\\2\u200c\\3\\4\\5',text
)
text = re.sub(ur'(^|[^' + persianCharacters + ur'])(می|نمی) ?'
+ persianPresentVerbs
+ ur'(م|ی|د|یم|ید|ند)($|[^' + persianCharacters
+ ur'])', u'\\1\\2\u200c\\3\\4\\5',text)
# بن فعل مضارع «دان» جدا آمد چون پسوند «ی» با عبارت «میدانی» تداخل داشت
text = re.sub(ur'(^|[^' + persianCharacters
+ ur'])(می|نمی) ?(دان)(م|د|یم|ید|ند)($|[^'
+ persianCharacters + ur'])', u'\\1\\2\u200c\\3\\4\\5',text
)
# ماضی نقلی
text = re.sub(ur'(^|[^' + persianCharacters + '])' + persianPastVerbs +
ur'ه (ام|ای|ایم|اید|اند|است)($|[^' + persianCharacters + ur'])',
u'\\1\\2ه\u200c\\3\\4', text
)
# ای «توان» ناقلا!
text = re.sub(ur"(\s)(می|نمی) ?توان", u'\\1\\2\u200cتوان',text)
# چسباندن تمام «ها»ها با فاصلهٔ مجازی
text = re.sub(ur" ها([\]\.،\:»\)\s]|\'{2,3}|\={2,})",u'\u200cها\\1',text)
text = re.sub(ur" ها(ی|یی|یم|یت|یش|مان|تان|شان)([\]\.،\:»\)\s])", u'\u200cها\\1\\2',text)
text = re.sub(ur"هها", u'هها',text)
# چسباندن تمام «ترین»ها با فاصلهٔ مجازی
text = re.sub(ur" ترین([\]\.،\:»\)\s]|\'{2,3}|\={2,})",u'\u200cترین\\1',text)
# برای حذف علامت ستاره اضافی قبل از عنوان ها
text = re.sub(ur"\n\*\s*(\=+.+?\=+\n)", u'\n\\1',text)
# عضو علامت های نقل قول تکی از عنوان ها
text = re.sub(ur"(\n=+)(.*?)(?:'+)(.*?)(?:'+)(.*?)(=+\n)", u'\\1\\2\\3\\4\\5',text)
# اول و آخر هم خط اگر فاصلهٔ مجازی باشد، حذف شود
text = re.sub(ur"(^\u200c|\u200c$)", u'',text)
# شناسه ها
# توجه: «است» تعدماً از شناسه ها حذف شده چون به عنوان فعل مستقل هم کاربرد دارد و در آن موارد باید جدا نوشته شود
# مثال: «این یک خانه است» که است در آن باید از خانه جدا نوشته شود
text = re.sub(ur'ه +(ایم|اید|اند)($|[^' + persianCharacters + ur'\u200c])', u'ه\u200c\\1\\2',text)
# موارد جزئی دیگر و بی ربط به فاصلهٔ مجازی، باید منتقل شود
text = re.sub(ur"ا\sً", u'اً',text)
# رفع اشکال که\u200cای
text = re.sub(ur" که\u200cای ", u' که ای ',text)
# رفع اشکال میستری (Mystery)
text = re.sub(ur"می\u200cستری", u'میستری',text)
text = re.sub(ur'می\u200cگوی($|[^' + persianCharacters
+ ur'\u200c])', u'میگوی\\1',text) # for میگوی دریایی
text = re.sub(ur'می\u200cدوی($|[^' + persianCharacters
+ ur'\u200c])', u'میدوی\\1',text) # for [[میدوی (ابهامزدایی)]]
return text
def punctuation(text):
# / سجاوندی غیرفارسی
text = re.sub(ur"ː", u': ',text) # Replace incorrect : character
# استفاده از ؟ فارسی
text = re.sub(ur'([' + persianCharacters + ur'])[ ]*[?]',u'\\1؟',text)
# استفاده از ; فارسی
text = re.sub(ur'([' + persianCharacters + ur'])[ ]*[;]',u'\\1؛ ',text)
# استفاده از ، فارسی
text = re.sub(ur'([' + persianCharacters + ur'])(\]\]|»|)[ ]*[,]', u'\\1\\2، ',text)
#اصلاح ویرگول فارسی به انگلیسی در میان کلمات انگلیسی
text = re.sub(ur'([a-zA-Z])+ *،', u'\\1,',text)
# حذف دو فاصله بعد از سجاوندی
text = re.sub(ur"(،|؛|؟|\.) ", u'\\1 ',text)
text = re.sub(ur"\r", u'',text)
# افزودن یا حذف فاصله
# حذف فاصلههای تکراری میان واژهها، به جز بین نام پارامتر و علامت مساوی
text = re.sub(ur"(. ) +(?=[^= ])", u'\\1',text)
# فاصله بعد از سجاوندی به جز ! به دلیل (<!-- و !! در بالای جدولها)
text = \
re.sub(ur"([،\.\؛\؟»])([^\s\.\(\)«»\"\[\]<>\d\w\{\}\|۰۱۲۳۴۵۶۷۸۹\'])"
, u'\\1 \\2',text)
# افزودن فاصله به بعد از سجاوندی
text = re.sub(ur'([' + persianCharacters
+ ur']+|\]|\)|»)([؟،؛\!\.])(['
+ persianCharacters + persianDigits
+ ur']+|\[|\(|«)', u'\\1\\2 \\3',text)
# حذف فاصله بعد از گیومه، پرانتز، براکت باز
text = re.sub(ur"([\(«\[]) ", u'\\1',text)
# حذف فاصله قبل از گیومه، پرانتز، براکت بسته
text = re.sub(ur" ([\)»\]])", u'\\1',text)
# افزودن فاصله قبل از گیومه باز
text = re.sub(ur"([^ \(\[\|\r\n>'])(«)", u'\\1 \\2',text)
text = re.sub(ur" +\( +", u' (',text)
text = re.sub(ur'([' + persianCharacters
+ ur']|\]|») *\( *(?=[' + persianCharacters
+ ur'])(?!ها\)|ان\))', u'\\1 (',text)
text = re.sub(ur'([' + persianCharacters + ur']) *\) *(?=['
+ persianCharacters + ur']|\[|«)', u'\\1) ',text)
# Removes extra line between two items list
text = re.sub(ur"(\n\*.*?)\n+(?=\n\*)", u'\\1',text)
# Removes extra line between two items list
text = re.sub(ur"(\n#.*?)\n+(?=\n#)", u'\\1',text)
# Convert , to ، if there are Persian characters on both sides of it
text = re.sub(ur'([' + persianCharacters + ur']), ?(?=['
+ persianCharacters + ur'])', u'\\1\\2، ',text)
# بعد از نقطهویرگول فارسی علامتی قرار نمیگیرد
text = re.sub(ur"(؛)(([\s]+)?[\.،؛:!؟\-…])", u'\\1',text)
# در انتهای پاراگراف نقطهویرگول فارسی نمیآید
text = re.sub(ur"(؛)(\s|)\n", u'.\n',text)
# سجاوندی در ابتدای علامت باز قرار نمیگیرد
text = re.sub(ur"([\(«])[\s]([؛\.،])", ur'\\1',text)
# ویرگول فارسی
# بعد از ویرگول فارسی این علامتها قرار نمیگیرد
text = re.sub(ur"(،)([\s]+)?([،؛!؟\-][\.،؛!؟\-]*|\.(?!\.))",
u'\\1',text)
# نقطه
# باید سه نقطه باشد
text = re.sub(ur'([' + persianCharacters + ur'])( *)(\.{3,})'
, u'\\1\\2…',text)
text = re.sub(ur" \.\.\. ", ur' … ',text)
# بعد از نقطه این علایم نمیآیند
text = re.sub(ur'([' + persianCharacters
+ ur'])\.( *[،؛:!؟\?]+)', u'\\1.',text)
# سجاوندی در ابتدای پرانتز و گیومه باز قرار نمیگیرد
text = re.sub(ur'(\(|«)[\.،؛](\s|)([' + persianCharacters
+ ur'])', u'\\1\\3',text)
# سجاوندی در داخل پرانتز
text = re.sub(ur'([' + persianCharacters
+ ur'])(\s|)[\.،؛](\s|)(\))', u'\\1\\2\\3\\4',text)
# در صورت وابستگی معنی جملات بهتر است نقطهویرگول فارسی قرار گیرد
text = re.sub(ur'([' + persianCharacters
+ ur'])(\s|)(\.)(\s|)(ولی|که\s|و\s|بنابراین|لذا)'
, u'\\1؛ \\5',text)
# / Question & exclamation mark
# علامت تعجب تکراری به دلیل وجود !! در عنوان جدولهای مدیاویکی نباید اصلاح شود.
# تكرار علامت سوال فارسی
text = re.sub(ur"(؟(\s|)){2,}", u'؟',text)
# علامتگذاری نادرست
text = text.replace(ur'؟ !', ur'؟!').replace(ur'! ؟', u'!؟')
# Remove space preceding punctuation, except for ellipses
text = re.sub(ur"([^ \.]) +([؟،\:؛!\.])(\s[^ \.]|<|$)",
u'\\1\\2\\3',text)
# عبارت «ها» درون پرانتز میتواند به کلمه قبلی خود بچسبد
text = re.sub(ur' \(ها\)', u'(ها)',text)
text = re.sub(ur'ه\. (ق|خ|ش)([\n ])', u'ه.\\1\\2',text) #iاصلاح تاریخ هجری
# حذف فاصلهٔ میان دو عبارت مختصر که دارای نقطهٔ اختصار باشند
myregex = re.compile(ur'(?:[' + persianCharacters + ur']{1,2}\. ?){2,6}')
lists=re.findall(myregex,text)
if lists:
for item in lists:
item2= re.sub(ur'\. (.)', u'.\\1',item)
if item!=item2:
text = text.replace(item,item2)
return text
def runAbarAbzar (text):
text = normalizeZwnj (text)
text = quotation (text)
text = dictation (text)
text = toStandardPersianCharacters (text)
text = applyOrthography (text)
text = complexVerbsApplyZwnj (text)
text = applyZwnj (text)
text = punctuation (text)
text = normalizeZwnj (text)
return text
def minor_edits (text):
#تمیزکاری فاصلهٔ مجازی
text = re.sub(u'{2,}', u'', text) # پشتسرهم
text = re.sub(u'\[\[([^\]\|]*?)]](%s+)' % faChrs, ur'[[\1|\1\2]]', text) # Piping
text = re.sub(u'(?![ئاآأإژزرذدوؤةب\(\)پتثجچحخسشصضطظعغفقک،گلمنهیيًٌٍَُِّْٰ\[\]ٓٔ]|[\u0900-\u097F]|ֹ)', '', text) # در پس
text = re.sub(u'(?<![ئبپتثجچح\[\]خسشصضطظعغ\(\)فقکگلم،نهیيًٌٍَُِّْٰٓٔ]|[\u0900-\u097F]|f|ֹ)', '', text) # در پیش
return text
def arabic_to_farsi(text):
text = re.sub(u'[كﮑﮐﮏﮎﻜﻛﻚﻙ]', u'ک', text)
text = re.sub(ur'[ىىىېىﻴﻲﻳﻲۍﻱﻰىىﻯي]', u'ی', text)
text = re.sub(ur'[ہەھ]', u'ه', text)
text = re.sub(ur'[َُِّْٰ]', u'', text)#ur'[\u064E\u064F\u0650\u0651\u0652\u0670]'
count=-1
fanum=u"۰۱۲۳۴۵۶۷۸۹"
arnum=u"٠١٢٣٤٥٦٧٨٩"
for i in arnum:
count+=1
text=text.replace(arnum[count],fanum[count])
return text
def dictation(txt):
#s: شبهسادهها ####### مشارٌاليه، مضافٌاليه، منقولٌعنه، مختلفٌفيه، متفقٌعليه، بعبارةٍاُخرى، اباًعنجدٍ، اىّنحوٍكان.
txt = re.sub(bLB+u'من ?(باب|جمله)'+bLA, ur'من\1', txt)
txt = re.sub(u' مع ?(هذا|ذلک|الفار[غق]|الوصف|ال[اأ]سف)', ur' مع\1', txt)
txt = re.sub(u' علی ?(هذا|حده|رغم|الاصول|الحساب|الخصوص|البدل|الدوام|السویه|الطلوع|الله|القاعده)', ur' علی\1', txt)
txt = re.sub(bLB+u' ذو ال', u' ذوال', txt)
txt = re.sub(u' ذی ?(ال|نفع|امر|جود|حساب|حق|حیات|ربط|روح|شعور|صلاحیّ?ت|عقل|علاقه|فقار|فن|قیمت|نفوذ)'+bLA, ur' ذی\1', txt)
txt = re.sub(bLB+u' حقّ? (?=البوق|العبور|الت[اأ]لیف|التدریس|الزحمه|اللّ?ه|النّ?اس|تعالی)', u' حق', txt)
txt = re.sub(u' عن ?[قغ]ریب', u' عنقریب', txt)
txt = re.sub(u' قتل ?عام', u' قتلعام', txt)
txt = re.sub(u' علی[ ][اأ]یّ?[ ]?حال', u' علیأیحال', txt)
txt = re.sub(u' من[ ]?حیث[ ]?المجموع', u' منحیثالمجموع', txt)
txt = re.sub(u'ب(?:|ه[ ])ر[اأ]ی[ ]العین', u'برأیالعین', txt)
txt = re.sub(u'ما ?ب(?:|ه[ ])ازا', u'مابازا', txt)
txt = re.sub(u'متقابل[ ](?:ب|به[ ])ر[اأ]س', u'متقابلبهرأس', txt)
txt = re.sub(u'منحصر ?(?:ب|به[ ])فرد', u'منحصربهفرد', txt)
txt = re.sub(bLB+u'فی[ ]?ما ?بین', u'فیمابین', txt)
txt = re.sub(u' [اآ]ی[ةت][ ]?اللّ?ه', u' آیتالله', txt)#عنایتالله
txt = re.sub(u'حج[ةته][ ]?ال[اإ]سلام', u'حجتالاسلام', txt)
txt = re.sub(u'ثق[ةته][ ]?ال[اإ]سلام', u'ثقةالاسلام', txt)
txt = re.sub(u'امیر ?الم[وؤ]منین', u'امیرالمؤمنین', txt)
txt = re.sub(u'(متوازی|مختلف)[ ]?ال[اأ]ضلاع', ur'\1الأضلاع', txt)
txt = re.sub(u'متساوی[ ]?السّ?اقین', u'متساویالساقین', txt)
txt = re.sub(u'قا[یئ]م[ ]الزّاوی[ةه]', u'قائمالزاویه', txt)
txt = re.sub(u'دا[یئ]ر[ةته][ ]?(البروج|المعارف|العلوم)', ur'دائرة\1', txt)
txt = re.sub(u'دا[یئ]م[ ](الخمر|الصوم|الذّ?[کك]ر)', ur'دائم\1', txt)
txt = re.sub(u'ر[اأإ]س[ ](الجدی|السّ?رطان|المال)', ur'رأس\1', txt)
txt = re.sub(u'(مجنی|مجنی)[ ][عا]لیه', ur'\1علیه', txt)
txt = re.sub(u'(مضاف|مسند|مرجوع|مشار|منتقل)ٌ?[ ]?[عا]لیه', ur'\1ٌالیه', txt)
txt = re.sub(u'منته[ای][ ]?[عا]لیه', u'منتهیالیه', txt)
txt = txt.replace(u'بین الملل', u'بینالملل').replace(u'نرم افزار', u'نرمافزار').replace(u'حزب الل', u'حزبالل')
txt = txt.replace(u'جدید الاحداث', u'جدیدالاحداث').replace(u'کثیر الانتشار', u'کثیرالانتشار').replace(u'سریع السیر', u'سریعالسیر')
txt = txt.replace(u'لازم الاجرا', u'لازمالاجرا').replace(u'فوق الذکر', u'فوقالذکر').replace(u'مرضی الطرف', u'مرضیالطرف')
txt = txt.replace(u'خاتم الانبیا', u'خاتمالانبیا').replace(u'متفق القول', u'متفقالقول').replace(u'قریب الوقوع', u'قریبالوقوع')
txt = txt.replace(u'سوق الجیشی', u'سوقالجیشی').replace(u'محیر العق', u'محیرالعق').replace(u'عظیم الجث', u'عظیمالجث')
txt = txt.replace(u'لطایف الحیل', u'لطایفالحیل').replace(u'موقوف المعانی', u'موقوفالمعانی').replace(u'سلیم النفس', u'سلیمالنفس')
txt = txt.replace(u'موثق الصدور', u'موثقالصدور').replace(u'شمس العمار', u'شمسالعمار').replace(u'حسب الامر', u'حسبالامر')
txt = txt.replace(u'مسلوب الاراده', u'مسلوبالاراده').replace(u'مستجاب الدعو', u'مستجابالدعو')
txt = re.sub(bLB+u'(دار|مشترک|ممنوع|قدیم|قلیل|ناقص|ضعیف|قوی|تحت|ر[یئ]یس|ربّ?|امّ?|حقّ?|ماء|ماوراء|باب) (?=ال)', ur'\1', txt)
#txt = re.sub(u'(?=الهام|الصاق|الزام|القا|الکتریک|الکتریسیته)', u'', txt)
txt = txt.replace(u'برپایه', u'بر پایه')
txt = txt.replace(u'سیستم عامل', u'سیستمعامل')
#e: آ
#txt = re.sub(bLB+u'(ا|أ)('+noAlef+u')'+bLA, ur"آ\2", txt)#it has some bugs!
txt = txt.replace(u' راکتور', u' رآکتور').replace(u'فرآیند', u'فرایند')#.replace(u'فرآورده', u'فراورده')# e: ا <-> آ
txt = re.sub(bLB+u'ایده?[ ][اآ]ل', u'ایدهآل', txt)
#s: افعال
txt = txt.replace(u' دو میدانی ', u' دومیدانی ')
txt = re.sub(bLB+u'(نمی) ?([نب]ی؟|)('+bnMzare+u'|'+bnMazi+u')(ان|)(م|ی|د|یم|ید|ا?ند)'+bLA, ur'\1\2\3\4\5', txt) # می bug همیاری
#txt = re.sub(bLB+u'(باز|فر[او]|وا|[بد]ر) ?([هن]?می|)([منب]ی?|)('+bnMzare+u'|'+bnMazi+u')(م|ی|د|یم|ید|ا?ند)'+bLA, ur'\1\2\3\4\5', txt) # پیشوند فعل ### BUG
txt = re.sub(bLB+u'(باز|فر[او]|وا|بر) ?([منب]ی?|)('+bnMazi+u')ن'+bLA, ur'\1\2\3ن', txt)#وی در جنگیدن با من
txt = re.sub(bLB+u'('+bnMazi+u')ه (ام|ای|ایم|اید|اند)'+bLA, ur'\1ه\2', txt) # فم بین «ه» و شناسه طبق شیوهنامه است باید جدا باشد
txt = re.sub(u'([منب])یا(رزید|فتاد|فتد|فراشت|فروخت|فزود|فسرد|فشاند|ف[کگ]ند|نجامید|ند[او]خت|ندیشید|ن[بگ]اشت|نگیخت)(م|ی|یم|ید|ند|[^'+faChrs+u'])', ur'\1ی\2', txt) # نیافتاد -> نیفتاد
txt = re.sub(u'([منب])یا(رز|فر[او]ز|فزای|فسر|فشان|ف[کگ]ن|نبار|نجام|ندا[یز]|ندوز|ندیش|نگار|نگیز)(م|ی|د|یم|ید|ا?ند|[^'+faChrs+u'])', ur'\1ی\2\3', txt) # بیاندیش -> بیندیش
#s: ضمایر ملکی
txt = re.sub(u'(?:ه|هٔ)[ ](مان|شان)'+bLA, ur'ه\1', txt)#BUG:Solved
txt = re.sub(u'(?<=ه)[ ](ات|اش)'+bLA, ur'\1', txt)
#s: و
txt = re.sub(u'رفت[ ]?و ?[اآ]مد', u'رفتوآمد', txt)
txt = re.sub(u'گفت[ ]?و ?گو', u'گفتگو', txt)
txt = re.sub(u'جست[ ]?و ?جو', u'جستجو', txt)
txt = re.sub(u'پخت[ ]?و ?پز', u'پختوپز', txt)
txt = re.sub(u'شست[ ]?و ?شو', u'شستوشو', txt)
txt = re.sub(u'خفت[ ]?و ?خیز', u'خفتوخیز', txt)
txt = re.sub(bLB+u'کند ?و ?کا?و'+bLA, u'کندوکاو', txt)
txt = re.sub(bLB+u'کم[ ]و ?کاست', u'کموکاست', txt)
#s: بسیط
txt = re.sub(u'(فن|دل)ّ?[ ]?[آا]وری', ur'\1اوری', txt)
txt = re.sub(bLB+u' دل[ ](سوزی|تنگی|بری) '+bLA, ur' دل\1 ', txt)#Bug دل بریدن
txt = re.sub(bLB+u'یک[ ]دلی'+bLA, u'یکدلی', txt)
txt = re.sub(u'گاه[ ]و ?بی[ ]?گاه', u'گاهوبیگاه', txt)
#e: دیگر غلطهای املایی
txt = re.sub(u' (سپاس|شکر|بر)[ ]?گ[ذز]ار ', ur' \1گزار ', txt)#بنا بر گزارش
txt = re.sub(u'(پایه|بنیان)[ ]?گزار', ur'\1گذار', txt)#متغییر الگو بنیانگذار
txt = re.sub(bLB+u'بی[ ]?م[حه]ابا', u'بیمحابا', txt)
txt = re.sub(bLB+u' بر ?خو?است', u' برخاست', txt)
txt = re.sub(u'خوانواد(?=ه|گی)', u'خانواد', txt)
txt = re.sub(u'[آا]نفو?لو? ?[آا]نزا', u'آنفلوانزا', txt)
txt = re.sub(bLB+u'غری[ضظ]ه'+bLA, u'غریزه', txt)
txt = txt.replace(u'خواستگاه', u'خاستگاه')
txt = txt.replace(u'باطری', u'باتری').replace(u'باطلاق', u'باتلاق').replace(u' ملیون', u' میلیون')
txt = txt.replace(u'ضمینه', u'زمینه').replace(u'انظباط', u'انضباط').replace(u'حاظر', u'حاضر')
#txt = txt.replace(u'نفوظ', u'نفوذ') ###
txt = txt.replace(u'مذبور', u'مزبور').replace(u'قائله', u'غائله').replace(u' وحله', u' وهله').replace(u' مرهمت', u' مرحمت')
txt = txt.replace(u' انهنا', u' انحنا').replace(u'پزشگی', u'پزشکی').replace(u'تضاهرات', u'تظاهرات')
txt = txt.replace(u'تلوزیون', u'تلویزیون').replace(u'پرفسور', u'پروفسور').replace(u' خوشنود', u' خشنود')
txt = txt.replace(u' الویت', u' اولویت').replace(u'ملیارد', u'میلیارد')
txt = txt.replace(u'شگفت انگیز', u'شگفتانگیز')
txt = re.sub(u'ه(گی|گانی?)'+bLA, ur'\1', txt)
#txt = re.sub(bLB+u'وب[ ]?(سایت|گاه)', u'وبگاه', txt) ###in many cases it could be template vaiable!
txt = re.sub(u'ویکی ?(?=سازی|فا |[مپ]دیا)', u'ویکی', txt)
txt = re.sub(u'ویکیپدیا ?(?='+langs+u')', u'ویکیپدیای ', txt)
txt = re.sub(u'علاقه?[ ]?مند', u'علاقهمند', txt)
txt = re.sub(u'باقی ?ماند', u'باقیماند', txt)
txt = re.sub(u'مت[عاأ][سص]ّ?فانه', u'متأسفانه', txt)
txt = re.sub(u'آندروید', u'اندروید', txt)
txt = re.sub(bLB+u'من[ ]را'+bLA, u'مرا', txt)
#txt = re.sub(u'عدم وجود'+bLA, u'نبودِ', txt)
#txt = txt.replace(u'عدم حضور', u'غیاب')
txt = re.sub(u'اقدامات لازمه?'+bLA, u'اقدامهای لازم', txt)
#e: ماهها
txt = re.sub(bLB+u'(?:جولای|ژوییه)'+bLA, u'ژوئیه', txt)
#txt = re.sub(bLB+u'[اآ]گوست'+bLA, u'اوت', txt)#جین آگوست دومینیک
txt = re.sub(bLB+u'دی?سا?مبر'+bLA, u'دسامبر', txt)
txt = re.sub(u'(ربیع|جمادی)[ ]?(?:الثانی|ال[اأإ]خر)', ur'\1الثانی', txt)
txt = re.sub(u'(ربیع|جمادی)[ ]?ال[اأإ]ول', ur'\1الاول', txt)
#txt = re.sub(u'ذ[وی][ ]?(?:ال|)(حج|قعد)[ةه]', ur'ذیال\1ه', txt) ###
#e: جمعالجمع
txt = re.sub(u'(مدارک)[ ]?های?'+bLA, u'مدارک', txt)
txt = re.sub(bLB+u'رسومات'+bLA, u'رسوم', txt)
#e: حشو
txt = re.sub(bLB+u'بر ?علیه', u'علیه', txt) # بر علیه
txt = re.sub(u'اعلم[ ]?تر', u'اعلم', txt) # تر
#e: طبق قاعدهٔ فارسی
txt = re.sub(u'(آزمایش|پژوهش|پیشنهاد|نمایش|دستور|فرمایش|گزارش|گرایش|باغ|کوهستان)اتی ', ur'\1هایی ', txt) # اتی -> هایی
txt = txt.replace(u'بازرسین', u'بازرسان').replace(u'داوطلبین', u'داوطلبان') #e: ین -> ان
txt = txt.replace(u'زباناً', u'زبانی').replace(u'تلفناً', u'تلفنی').replace(u'ناچاراً', u'بهناچار').replace(u'گاهاً', u'گاهی') #e: اً
#--------------------------Reza added------------------------
return txt.strip()
def cleaning(text):
text=text.replace(u'\r',u'').replace(u'\n^ "',u'\n*"').replace(u'‌',u'').replace(u'\n \n \n',u'\n\n').replace(u'\n \n',u'\n\n').replace(u'\n \n',u'\n\n').replace(u'\n \n',u'\n\n')
text=text.replace(u'< ',u'<').replace(u' >',u'>').replace(u'<!--\n',u'<!--').replace(u'\n-->',u'-->').replace(u'<!---\n',u'<!---').replace(u'\n--->',u'--->')
#تمیزکاری فاصلهٔ مجازی
text = re.sub(u'{2,}', u'', text) # پشتسرهم
text = re.sub(u'\[\[([^\]\|]*?)]](%s+)' % faChrs, ur'[[\1|\1\2]]', text) # Piping
text = re.sub(u'(?![ئاآأإژزرذدوؤةبپتثجچحخسشصضطظعغفقکگلمنهیيًٌٍَُِّْٰٓٔ]|[\u0900-\u097F]|ֹ)', '', text) # در پس
text = re.sub(u'(?<![ئبپتثجچحخسشصضطظعغفقکگلمنهیيًٌٍَُِّْٰٓٔ]|[\u0900-\u097F]|f|ֹ)', '', text) # در پیش
text=arabic_to_farsi(text)
text=minor_edits (text)
text = re.sub(u"(?:"+zaed+u")", "", text)
return text
def add_tanvin(text):
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 main(ns,correectList):
os.system('sql fawiki_p "SELECT page_title FROM page WHERE page_namespace = '+ns+' AND page_is_redirect = 0;" > '+bot_adress+'Title_sql_result.txt')
text = codecs.open( bot_adress+'Title_sql_result.txt','r' ,'utf8' )
text = text.read().replace(u'_',u' ').replace(u'\r',u'').replace(u'\n\n',u'\n').strip()#.replace(u'\n',u'\n\nااا\n\n').strip()
pywikibot.output(u'\03{lightblue}-- Sql is done!\03{default}')
our_list={}
new_txt2,new_txt3,new_txt4,new_txt5,new_txt6,new_txt7,new_txt=u'\n',u'\n',u'\n',u'\n',u'\n',u'\n',u'\n'
text2=text
text2=dictation(text2)
text2=cleaning(text2)
text2=text2.replace(u',',u'،').replace(u' ،',u'،').replace(u' ؛',u'؛')
text2=text2.replace(u' ',u' ').replace(u' ',u' ').strip()
text2=runAbarAbzar(text2).strip()
text2=text2.replace(u'ٔ',u'')#remove hamzeh
text2=add_tanvin(text2)
with codecs.open(bot_adress+u"zztxt1.txt" ,mode = 'w',encoding = 'utf8' ) as f:
f.write(text)
with codecs.open(bot_adress+u"zztxt1+abarabzar.txt" ,mode = 'w',encoding = 'utf8' ) as f:
f.write(text2)
pywikibot.output(u'\03{lightblue}-- compairing the lists\03{default}')
#list2=text2.replace(u'\nااا\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').strip().split(u'\n')
#list1=text.replace(u'\nااا\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').strip().split(u'\n')
list2=text2.replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').strip().split(u'\n')
list1=text.replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').strip().split(u'\n')
count1=-1
for txt in list1:
count1+=1
pywikibot.output( u'='+str(count1))
if list2[count1]!=txt:
if list1[count1] in correectList:
continue
elif u'ویکیپدیا:گزیدن نگاره برگزیده' in txt :
continue
elif u'–' in list2[count1] or u'. ' in list2[count1]:
new_txt2+=u'# [['+txt +u']]\t > \t[['+list2[count1]+u']]\n'
elif u'هٔ' in txt or u'هی ' in txt:#همزه
new_txt7+=u'# [['+txt +u']]\t > \t[['+list2[count1]+u']]\n'
elif u',' in txt and u'،' in list2[count1]:
new_txt6+=u'# [['+txt +u']]\t > \t[['+list2[count1]+u']]\n'
elif string.count(list2[count1],u'آ')> string.count(txt,u'آ'):
new_txt3+=u'# [['+txt +u']]\t > \t[['+list2[count1]+u']]\n'
elif u'ها' in list2[count1] and u' ها' in txt:
new_txt4+=u'# [['+txt +u']]\t > \t[['+list2[count1]+u']]\n'
elif u'ي' in list2[count1] or u' ك' in txt:
new_txt5+=u'# [['+txt +u']]\t > \t[['+list2[count1]+u']]\n'
else:
new_txt+=u'# [['+txt +u']]\t > \t[['+list2[count1]+u']]\n'
if ns=='0':
saveAdress=u'ویکیپدیا:گزارش دیتابیس/برای انتقال مقاله'
elif ns=='14':
saveAdress=u'ویکیپدیا:گزارش دیتابیس/برای انتقال رده'
elif ns=='10':
saveAdress=u'ویکیپدیا:گزارش دیتابیس/برای انتقال الگو'
elif ns=='4':
saveAdress=u'ویکیپدیا:گزارش دیتابیس/برای انتقال ویکیپدیا'
elif ns=='12':
saveAdress=u'ویکیپدیا:گزارش دیتابیس/برای انتقال راهنما'
else:
pass
fapage=pywikibot.Page(faSite,saveAdress)
put_text=u'{{گزارش دیتابیس/صفحه برای انتقال}}\n== سجاوندی ==\n'+new_txt2+u'\n\n== ویرگول ==\n'+new_txt6+u'\n\n== همزه ==\n'+new_txt7+u'\n\n== آ ==\n'+new_txt3+u'\n\n== ها ==\n'+new_txt4+u'\n\n== ي-ك عربی ==\n'+new_txt5+u'\n\n== سایر ==\n'+new_txt+u'\n'
if ns=='14':
put_text=put_text.replace(u'[[',u'[[:رده:')
elif ns=='10':
put_text=put_text.replace(u'[[',u'[[الگو:')
elif ns=='4':
put_text=put_text.replace(u'[[',u'[[ویکیپدیا:')
elif ns=='12':
put_text=put_text.replace(u'[[',u'[[راهنما:')
else:
pass
fapage.put(put_text,u'ربات:بهروزرسانی گزارش')
fapage=pywikibot.Page(faSite,saveAdress+u'/امضا')
fapage.put(put_text,u'ربات:بهروزرسانی گزارش')
new_txt2,new_txt3,new_txt4,new_txt5,new_txt6,new_txt7,new_txt=u'\n',u'\n',u'\n',u'\n',u'\n',u'\n',u'\n'
def get_whiteList(saveAdress):
correct_page=pywikibot.Page(faSite,saveAdress+u'/فهرست سفید')
correctLinks=correct_page.get()
correctLinks=correctLinks.replace(u'\r',u'')
correectList=[]
for i in correctLinks.split(u'\n*'):
correectList.append(i.strip())
return correectList
def run():
correectList=get_whiteList (u'ویکیپدیا:گزارش دیتابیس/برای انتقال مقاله')
print "Starting NS 0"
main('0',correectList)
correectList=get_whiteList (u'ویکیپدیا:گزارش دیتابیس/برای انتقال رده')
print "Starting NS 14"
main('14',correectList)
correectList=get_whiteList (u'ویکیپدیا:گزارش دیتابیس/برای انتقال الگو')
print "Starting NS 10"
main('10',correectList)
correectList=get_whiteList (u'ویکیپدیا:گزارش دیتابیس/برای انتقال ویکیپدیا')
print "Starting NS 4"
main('4',correectList)
correectList=get_whiteList (u'ویکیپدیا:گزارش دیتابیس/برای انتقال راهنما')
print "Starting NS 12"
main('12',correectList)
if __name__ == "__main__":
run()