Pré-traitement de texte arabe en Python
May 01, 2020
Le traitement automatique du langage naturel (TALN) est un domaine de recherche et d’application qui explore comment les ordinateurs peuvent être utilisés pour comprendre et manipuler le texte en langage naturel. Compte tenu de l’augmentation du contenu sur Internet et les médias sociaux, c’est l’une des compétences incontournables pour tous les spécialistes des données.
Dans chaque tâche de traitement de la langue naturelle, il y a quelques étapes de prétraitement communes que nous devons faire. Je vais expliquer et fournir le code pour les techniques de pré-traitement suivantes en python.
-
Nettoyage
- Remove numbers
- Remove diacritics
- Remove replacated carracters
- Remove non arabic words …
- Remove ponctuatons
Dans les prochains articles, nous allons voir les titres suivants:
- Stemming
- Tokenization
- Part-Of-Speech Tagging
- Word Embeddings
Méthodes de prétraitement
Importer les bibliothèques requises
Tout d’abord, importons les bibliothèques requises
import re
Nous allons implémenter les méthodes suivantes:
- remove_diacritics(string): supprime tous les signes diacritiques d’une chaîne et renvoie la version nettoyée
- remove_urls(string) : supprime toutes les URLs d’une chaîne et renvoie la version propre
- remove_numbers(string): supprime tous les nombres d’une chaîne et renvoie la version propre
- noramlize(string): normalise une chaîne (voir l’implémentation )
- removenonarabic_words(string): supprime tous les mots non arabes (ont un symbole non arabe) d’une chaîne et renvoie la version nettoyée
- removeextrawhitespace(string): supprime les espaces supplémentaires d’une chaîne et renvoie la version propre
- removenonarabic_symbols(string): supprime tous les symboles non arabes d’une chaîne et renvoie la version propre
- remove_ponctuations(string): supprime toutes les ponctuations d’une chaîne et renvoie la version propre
- removestopwords(string, stop_words=[‘empthy’]): supprime la liste des mots vides d’une chaîne et renvoie la version nettoyée
- removedubplicatedletters(string): supprime les lettres en double et renvoie la chaîne de résultat
Supprimer les signes diacritique
def remove_diacritics(string):
regex = re.compile(r'[\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652]')
return re.sub(regex, '', string)
Testons cette méthode sur un exemple :
string = "بِسْمِ اللهِ الرَّحْمٰنِ الرَّحِيمِ"
print("Avant: ",string)
string = remove_diacritics(string)
print("Après: ",string)
Avant: بِسْمِ اللهِ الرَّحْمٰنِ الرَّحِيمِ
Après: بسم الله الرحمٰن الرحيم
Nous pouvons voir ci-dessus que remove_diacritics(string) supprime tous les signes diacritiques d’une chaîne et renvoie la version propre.
supprimer les URLs
def remove_urls(string):
regex = re.compile(r"(http|https|ftp)://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+")
return re.sub(regex, ' ', string)
Testons cette méthode sur un exemple :
string ="ftp://ift.tt/2xWCmyr مواصفات وسعر هاتف أيفون 8 الجديد https://ift.tt/2xWCmyr"
print("Avant: ",string)
string = remove_urls(string)
print("Après: ",string)
Avant: ftp://ift.tt/2xWCmyr مواصفات وسعر هاتف أيفون 8 الجديد https://ift.tt/2xWCmyr
Après: مواصفات وسعر هاتف أيفون 8 الجديد
Donc, nous pouvons voir ci-dessus que remove_urls(string) supprime toutes les URLs qui commencent avec http (s) ou ftp d’une chaîne et retourne la version propre.
Supprimer les nombres
def remove_numbers(string):
regex = re.compile(r"(\d|[\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669])+")
return re.sub(regex, ' ', string)
Testons cette méthode sur un exemple :
string ="مواصفات وسعر هاتف أيفون الجديد1234567890 ٠١٢٣٤٥٦ ٧٨٩"
print("Avant: ",string)
string = remove_numbers(string)
print("Après: ",string)
Avant: مواصفات وسعر هاتف أيفون الجديد1234567890 ٠١٢٣٤٥٦ ٧٨٩
Après: مواصفات وسعر هاتف أيفون الجديد
Donc, nous pouvons voir ci-dessus que remove_numbers(string) supprime tous les nombres d’une chaîne et renvoie la version propre.
Normalise une chaîne
def noramlize(string):
regex = re.compile(r'[إأٱآا]')
string = re.sub(regex, 'ا', string)
regex = re.compile(r'[ى]')
string = re.sub(regex, 'ي', string)
regex = re.compile(r'[ؤئ]')
string = re.sub(regex, 'ء', string)
return string
Testons cette méthode sur un exemple :
string = " ؤ ئ إ أ ٱ آ ا ى ي"
print("Avant: ",string)
string = noramlize(string)
print("Après: ",string)
Avant: ؤ ئ إ أ ٱ آ ا ى ي
Après: ء ء ا ا ا ا ا ي ي
Supprimer les mots non arabes
def remove_non_arabic_words(string):
return ' '.join([word for word in string.split() if not re.findall(
r'[^\s\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A]',
word)])
Testons cette méthode sur un exemple :
string = "مواڞفات وسعر هاتف أيفون 8 الجدي"
print("Avant: ",string)
string = remove_non_arabic_words(string)
print("Après: ",string)
Avant: مواڞفات وسعر هاتف أيفون 8 الجدي
Après: وسعر هاتف أيفون الجدي
Parfois, nous pouvons trouver un mot qui a des symboles non arabes. On peut voir ci-dessus que removenonarabic_words (string) supprime tous les mots non arabes (ont un symbole non arabe) d’une chaîne et retourne la version propre. par exemple مواڞفات
Supprimer les espaces supplémentaires
def remove_extra_whitespace(string):
string = re.sub(r'\s+', ' ', string)
return re.sub(r"\s{2,}", " ", string).strip()
Testons cette méthode sur un exemple :
string = "مواڞفات وسعر هاتف أيفون 8 الجدي"
print("Avant: ",string)
string = remove_extra_whitespace(string)
print("Après: ",string)
before: مواڞفات وسعر هاتف أيفون 8 الجدي
after: مواڞفات وسعر هاتف أيفون 8 الجدي
Supprimer les symboles non arabes
def remove_non_arabic_symbols(string):
return re.sub(r'[^\u0600-\u06FF]', ' ', string)
Testons cette méthode sur un exemple :
string = "مواڞفات وسعر هاتف أيفون 8 الجدي"
print("Avant: ",string)
string = remove_non_arabic_symbols(string)
print("Après: ",string)
Avant: مواصفات وسعر هاتف أيفون 8 الجدي☯ ☸ ☹ ☺ ☻ ☼ ☽ ☾ ☿ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇ । ॥ ᜵ ᜶ ჻ ⅋ 〽 ॰ ℄ ︕ ︖ ︗ ︘ ︙ 𝚤 𝚥
Après: مواصفات وسعر هاتف أيفون الجدي
comme prévu nous pouvons voir ci-dessus que removenonarabic_symbols(string) supprime tous les symboles non arabes d’une chaîne et retourner la version propre.
Phd student (Research Laboratory in Algebra, Numbers theory and Intelligent Systems). @Moustapha Cheikh