import hazm import re import string from regexes.currency import CURRENCY_REGEX from regexes.email import EMAIL_REGEX from regexes.latin import LATIN_REGEX from regexes.latin import LATIN_REGEX, LATIN_WITH_SPECIAL_REGEX from regexes.number import NUMBERS_REGEX from regexes.phone import PHONE_REGEX from regexes.quote import DOUBLE_QUOTE_REGEX, SINGLE_QUOTE_REGEX from regexes.url import URL_REGEX from regexes.persian import PERSIAN_REGEX from regexes.punk import PUNK_REGEX import dictionary allowed_char = string.ascii_letters + string.digits + ':/@_-. ' def make_trans(list_a, list_b): return dict((ord(a), b) for a, b in zip(list_a, list_b)) def multiple_replace(text, chars_to_mapping): pattern = "|".join(map(re.escape, chars_to_mapping.keys())) return re.sub(pattern, lambda m: chars_to_mapping[m.group()], str(text)) def clean_url(text): # removing html tags text = re.sub('<.*?>', '', text) # removing normal(without space urls) text = re.sub(r'(?:(?:http|https):\/\/)?([-a-zA-Z0-9.]{2,256}\.[a-z]{2,4})\b(?:\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?', "", text) # removing urls that contains space result = '' for char in text: if char in allowed_char: result += char result = result.replace(' ', '') result = result.split(':') for phrase in result: p = phrase if '//' in p: if ('https :' + p) in text: text = text.replace('https :' + p, '') elif ('http :' + p) in text: text = text.replace('http :' + p, '') elif '@' in p: if p in text: text = text.replace(p, '') return text ar2fa_digits = make_trans("٠١٢٣٤٥٦٧٨٩٪", "۰۱۲۳۴۵۶۷۸۹٪") fa2en_digits = make_trans("۰۱۲۳۴۵۶۷۸۹٪", "0123456789%") normalizer = hazm.Normalizer(persian_numbers=True, punctuation_spacing=False) def normalize(text, zwnj="\u200c", tokenized=False): text = text.replace("\n", " ").replace("\t", " ") text = re.sub(r"\u200c+", "\u200c", text) text = text.replace('ـ', '') text = normalizer.normalize(text) if len(dictionary.characters) > 0: text = multiple_replace(text, dictionary.characters) if len(dictionary.words_map) > 0: text = multiple_replace(text, dictionary.words_map) text = text.translate(ar2fa_digits) text = text.translate(fa2en_digits) text = SINGLE_QUOTE_REGEX.sub("'", text) text = DOUBLE_QUOTE_REGEX.sub('"', text) text = CURRENCY_REGEX.sub(r" \1 ", text) text = clean_url(text) text = URL_REGEX.sub(" ", text) text = EMAIL_REGEX.sub(" ", text) text = PHONE_REGEX.sub(r" \1 ", text) text = NUMBERS_REGEX.sub(r" \1 ", text) text = LATIN_REGEX.sub(r" \1 ", text) # text = PUNK_REGEX.sub(r" \1 ", text) # must be remained the same! # Allow only english and persian characters text = re.sub(PERSIAN_REGEX, " ", text) text = text.replace(f" {zwnj} ", f"{zwnj}") text = text.replace(f"{zwnj} ", f"{zwnj}") text = text.replace(f" {zwnj}", f"{zwnj}") if len(dictionary.special_tokens) > 0: text = multiple_replace(text, dictionary.special_tokens) tokens = [] for token in text.split(): token = token.strip() if token: if token.startswith(zwnj) and token.endswith(zwnj): token = token[1:-1] if token.startswith(zwnj): token = token[1:] elif token.endswith(zwnj): token = token[:-1] else: token = token tokens.append(token) if tokenized: return tokens return " ".join(tokens) if __name__ == '__main__': import textwrap # input_text = "دارهٔ تحقیقات فدرال در سال ۱۹۰۸ به نام ادارهٔ تحقیقات (BOI یا BI) بنیان‌گذاری شد. نام این سازمان در سال ۱۹۳۵ به ادارهٔ تحقیقات فدرال تغییر یافت. دفتر مرکزی اف‌بی‌آی در ساختمان جی. ادگار هوور در شهر واشینگتن، دی.سی. واقع شده‌است." # input_text = "یونان (به یونانی: Ελλάδα, اِلادا)" # input_text = "نسخهٔ" # input_text = "ὑ蕉Ұ제ṅ尘̲改座◦花芝秀黄天자埃澤ಿ ˈazbab اینجا ایران خانه‌شما است؟!۱۲۳۱۲۳۱۳۱۲ اَلْحُرُوفُ ٱلْعَرَبِیَّة" input_text = """ قـــــــــــــــــرار بود با هم کنـــــــــــــار بیایم نه اینکه از کنــــــــــــار هم رد بشیم...!!! اگر روزی دلت لبریز غم بود گذارت بر مزار کهنه ام بود بگو این بی نصیب خفته در خاک یه روزی عاشق و دیوانه ام بود... خبر به دورترین نقطه جهان برسد نخواست او به من خسته ، بی کمان برسد شکنجه بیشتر از این که پیش چشم خودت کسی که سهم تو باشد به دیگران برسد خدا کند ، که نفرین نمی کنم نکند به او که عاشق او بوده ام زیان برسد خدا کند فقط این عشق از سرم برود خدا کند که فقط زود آن زمان برسد... ترسم که شبی از غم ناگه بمیرم در بستر دلسوز با آه بمیرم آن لحظه آخر که اجل گفت بمیر ای کاش تو را بینم و آنگاه بمیرم خوشبختی را دیروز به حراج گذاشتند ولی حیف که من زاده ی امروزم... خدایا جهنم فرداست پس چرا امروز می سوزم ؟!! در کرانه محبت رنگ چشمانت را دیدم در عمق بی کران آسمان رخ تو را دیدم دیدنت آرزوی من شده آن را از من دریغ مکن کوه باشی صخره هایت می شوم... اشک باشی دیدگانت می شوم... رود باشی چشمه سارت می شوم... دوست باشی دوستدارت می شوم...! امتیاز شما به این کانالوبسایت پردیس ایرانیان آموزش دوره های تخصصی ماساژ زیر نظر مربی فنی و حرفه ای عنوان سایت : پردیس ایرانیان لینک سایت : http://pardisiranian.ir/ آی دی اینستاگرام : pardisiranian.info@ لینک اینستاگرام: […] Leave a commentپیج اینستاگرام, کانال برنزی, لینک سایتآموزش ماساژ زیر نظر فنی حرفه ای, آموزش ماساژ فنی حرفه ای, آموزش ماساژ فنی حرفه ای تهران, دوره ماساژ فدراسیون پزشکی ورزشی, فدراسیون بین المللی ماساژ ایران, ماساژ آروماتراپی, ماساژ تخصصی, ماساژ سوئدی, ماساژ لیفتینگ صورت, مربی آموزش ماساژ بایگانی کانالها گزینش ماه اکتبر 2018 سپتامبر 2018 آگوست 2018 جولای 2018 ژوئن 2018 می 2018 آوریل 2018 فوریه 2018 کانال ها بر اساس موضوع گزینش دسته پیج اینستاگرام ربات پیام رسان بله سایر کانال ها کانال آموزشی کانال آی گپ کانال اجتماعی-سیاسی-فرهنگی کانال ایتا کانال برنزی کانال بله کانال بیسفون کانال تجاری کانال تفریحی کانال تلگرام کانال خبری کانال رسمی کانال سروش کانال سلام کانال شخصی کانال گپ کانال محلی کانال نقره ای کانال های طلایی کانال ویسپی لینک سایت مطالب سایت کانال تبلیغاتی "باکس آگهی" در پیام رسان بله عنوان کانال : کانال تبلیغاتی "باکس آگهی" در پیام رسان بله نام... عنوان سایت:کسب در آمد از طریق گوشی همراه و اپلیکیشن ۷۰۳۰ لینک سایت : https://7030.ir/r/sayed97 توضیحات کامل کانال:سامانه «هفتاد سی»... دکوراسیون داخلی سالن های زیبایی نام پیام رسان: تلگرام و اینستاگرام لینک کانال تلگرام : https://t.me/designer_ir لینک صفحه اینستاگرام :... نصب -تعمیر و فروش انواع کولرگازی عنوان کانال : نصب -تعمیر و فروش انواع کولرگازی نام پیام رسان: تلگرام لینک... کانال بازیگر ایرانی خانم شبنم قلی خانی عنوان کانال : کانال بازیگر ایرانی خانم شبنم قلی خانی نام پیام رسان:... تارنمای جامع ثبت کانال ;کانال سروش,کانال تلگرام,کانال بیسفون, کانال گپ, کانال ویسپی, کانال بیسفون پلاس, کانال ایتا, کانال آی گپ, کانال سلام, پیج اینستاگرام,کانال بله,گروه سروش,گروه تلگرامی,گروه بیسفون,گروه گپ,گروه آی گپ,گروه ایتا,گروه سلام,گروه بله,تبلیغات کانال تلگرام,تبلیغات کانال بیسفون,تبلیغات کانال گپ,تبلیغات کانال ویسپی,تبلیغات کانال بیسفون,تبلیغات کانال ایتا,تبلیغات کانال آی گپ,تبلیغات کانال سلام,تبلیغات کانال بله,گروه تبلیغاتی پیام رسان سروش,گروه تبلیغاتی تلگرام,گروه تبلیغاتی بیسفون,گروه تبلیغاتی گپ,گروه تبلیغاتی ویسپی,گروه تبلیغاتی آی گپ,گروه تبلیغاتی سلام,گروه تبلیغاتی بله,افزایش مببر سروش,خرید ممبر سروش,حرید ممبر تلگرام,افزایش ممبر تلگرام,خرید ممبر بیسفون,افزایش ممبر بیسفون,خرید ممبر ایتا,افزایش ممبر ایتا,خرید ممبرآی گپ,افزایش ممبر آی گپ,حرید ممبر گپ,افزایش ممبرگپ,خرید ممبرسلام,افزایش ممبر سلام,خرید ممبر بله ,افزایش ممبر بله,درگاه پیام رسان داخلی,فروشگاه پیام رسان سروش,فروشگاه پیام رسان بله,فروشگاه پیام رسان گپ,فروشگاه پیام رسان آِ گپ,تبلیغات پیام رسانهای داخلی آموزش ماساژ زیر نظر فنی حرفه ای آموزش ماساژ فنی حرفه ای آموزش ماساژ فنی حرفه ای تهران آون اتوکلاو ارگانیک تریتا انکوباتور انکوباتور یخچالدار تجهیز کامل آزمایشگاه غذایی تعمیر مبل تور آنتالیا تور ارمنستان تور استانبول تور چین تور گرجستان خرید ظرف شویی خرید کولر گازی دوره ماساژ فدراسیون پزشکی ورزشی ربات پیام رسان بله سانتریفیوژ ژربر سانتریفیوژ یونیورسال فدراسیون بین المللی ماساژ ایران فروشگاه ارگانیک تریتا فروشگاه ارگانیک در پیام رسان بله فروشگاه ارگانیک شیراز فروشگاه معتبر ارگانیک ماساژ آروماتراپی ماساژ تخصصی ماساژ سوئدی ماساژ لیفتینگ صورت مربی آموزش ماساژ هود شیمیایی هود لامینار پی اچ متر دیجیتال کانال آموزشی کانال باکس آگهی کانال بله بانک ملی کانال تریتا کانال تفریحی کانال پت شاپ کانال پیام رسان بله کانال گردشگری کلنی کانتر کوره الکتریکی کولر گازی تمامی حقوق مادی و معنوی سایت متعلق است به:تارنمای جامع ثبت و معرفی رایگان کانال پیام رسانهای ایرانی و خارجی """ # input_text = " «هفتاد سی» " input_text = normalize(input_text) # input_text = DOUBLE_QUOTE_REGEX.sub('"', input_text) print(textwrap.fill(input_text)) # print(normalize(input_text, tokenized=True))