File size: 12,548 Bytes
21d29cb
 
09f9c26
21d29cb
 
 
 
 
 
 
 
 
 
 
 
 
09f9c26
 
21d29cb
 
 
 
 
 
 
 
 
 
09f9c26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21d29cb
 
09f9c26
21d29cb
 
 
 
 
09f9c26
21d29cb
 
 
 
 
09f9c26
 
 
21d29cb
 
 
 
 
 
09f9c26
 
 
21d29cb
 
 
09f9c26
21d29cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
09f9c26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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))