<jupyter_start><jupyter_text>Preprocess Utilities  Libraries<jupyter_code>import re<jupyter_output><empty_output><jupyter_text>Clean_Text Function<jupyter_code># regexes for clean text
reg_persian = re.compile('([\u0600-\u06FF]+(?:\s+[\u0600-\u06FF]+)*)\s*')
spaces_reg = re.compile(r"[\xad\ufeff\u200e\u200d\u200b\x7f\u202a\u2003\xa0\u206e\u200c\x9d]") 
symbols_complete_reg = re.compile(r"(\d|\"|'ٍ|¬|[؛“،,”‘۔’’‘–]|[|\.÷+\]\[\)\(\:\-\?»\=\{}\*«»_…\؟!/ـ]|[۰'ٓ۫'ٔ]|[ٓٔ]|[ًٌٍْﹼ،َُِّ«ٰ»ٖء])")
symbols_sentence_reg = re.compile(r"(\d|\"|'ٍ|¬|[؛“،,”‘۔’’‘–]|[|\÷+\]\[\)\(\:\-\?»\=\{}\*«»_…\/ـ]|[۰'ٓ۫'ٔ]|[ٓٔ]|[ًٌﹼ،َُ«ٰ»ٖء])")

def remeove_arabic(text):
    # remove arabic alphabet
    mapping = {
        u"ۀ" : u"ه",
        u"ة" : u"ت",
        u"ي" : u"ی",
        u"ؤ" : u"و",
        u"إ" : u"ا",
        u"ٹ" : u"ت",
        u"ڈ" : u"د",
        u"ئ" : u"ی",
        u"ﻨ" : u"ن",
        u"ﺠ" : u"ج",
        u"ﻣ" : u"م",
        u"ﷲ" : u"",
        u"ﻳ" : u"ی",
        u"ٻ" : u"ب",
        u"ٱ" : u"ا",
        u"ڵ" : u"ل",
        u"ﭘ" : u"پ",
        u"ﻪ" : u"ه",
        u"ﻳ" : u"ی",
        u"ٻ" : u"ب",
        u"ں" : u"ن",
        u"ٶ" : u"و",
        u"ٲ" : u"ا",
        u"ہ" : u"ه",
        u"ﻩ" : u"ه",
        u"ﻩ" : u"ه",
        u"ك" : u"ک",
        u"ﺆ" : u"و",
        u"أ" : u"ا",
        u"ﺪ" : u"د"
    }

    arabic_keys =  re.compile(r"(" + "|".join(mapping.keys()) + r")")
    return arabic_keys.sub(lambda x: mapping[x.group()], text)

# clean_text function
def clean_text(text, allspace=True, punc=True, sentence=True, only_persian=True):
    #remove sapce
    if allspace:
        text = re.sub(spaces_reg, " ", text)
    # remove punctuation
    if punc:
        # except dot(.)
        if sentence:
            text = re.sub(symbols_sentence_reg, "", text)
        # all
        else:
            text = re.sub(symbols_complete_reg, "", text)
    
    # remove arabic letters
    text = remeove_arabic(text)

    # keep just persian letters 
    if only_persian:
        text = ' '.join(list(filter(reg_persian.match, reg_persian.split(text))))
    
    # convert spaces to a one space and delete leading and trailing spaces
    text = re.sub("(\s)+", " ", text)
    text = text.strip()
    return text<jupyter_output><empty_output><jupyter_text>Example<jupyter_code>text = """
برخی از هواداران مصدق یا اعضای جبهه ملی که در زمان نخست‌وزیری مصدق، از جبهه ملی یا از هیئت‌وزیران کنار گذاشته شده یا کنار رفتند، پس از جدایی از مصدق، به انتقاد از کارنامه وی پرداختند و حتی برای سرنگونی‌اش تلاش کردند. برخی از این افراد عبارت‌اند از:
* فضل‌الله زاهدی (نخست‌وزیر کودتا)
* علی امینی
* حسین مکی، (که در آغاز سرباز فداکار وطن نامیده شد ولی در پایان به دلیل مخالفت با مصدق از سوی هواداران جبهه ملی سرباز خطاکار وطن خطاب می‌شد)
* مظفر بقایی (به دلیل اتهام مشارکت در قتل سرتیپ افشار طوس و سپس
This is a sample text from corpus
"""
clean_text(text, sentence=False, only_persian=True)
clean_text(text, sentence=True, only_persian=False)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.20409533400469956, 'fraction_numerical': 0.013091641490433032, 'mean_word_length': 2.7064676616915424, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '26334', 'license': 'MIT', 'n_tokens_mistral': 1658, 'n_tokens_neox': 1556, 'n_words': 280, 'path': 'utils/preprocess.ipynb', 'repo_name': 'SajjadMb/persian-semantic-search', 'size': '2979'}