Python >> Tutoriel Python >  >> Python

Comment extraire tous les emojis du texte en Python ?

Résumé : Ce blog explique les différentes façons d'extraire les Emojis couramment utilisés intégrés dans le texte.

Remarque  :Toutes les solutions fournies ci-dessous ont été vérifiées à l'aide de Python 3.9.0b5.

Formulation du problème

L'un a une liste avec des mots de texte normaux et des emojis, tous mélangés, comme indiqué ci-dessous.

orig_list = ['These ? Emojis ? are ? embedded ? within ? this ? text.']

Comment extraire uniquement les emojis, dans une nouvelle liste, comme suit ?

new_list = ['?', '?', '?', '?', '?', '?']

Contexte

Le Maître Zen a dit un jour "Une image vaut mille mots". Cette pépite de sagesse est restée vraie depuis que les hommes des cavernes parcouraient la terre. Cela continue d'être vrai dans notre monde ultra-technologique d'aujourd'hui.

En 1998, un Japonais nommé Shigetaka Kurita a inventé des emojis destinés à une entreprise de télécommunications. Depuis cette invention, les expressions picturales humaines (Emojis) dans le langage écrit ont pris leur propre vie.

Les emojis sont maintenant utilisés dans toutes sortes de communications électroniques. Une telle explosion d'utilisation a également créé le besoin d'un moyen de séparer les emojis du texte.

Cet article de blog explore différentes manières, à l'aide de Python, de séparer les emojis du texte.

Méthode 1 :L'évidence élimine la méthode textuelle

La façon la plus simple de séparer les emojis du texte est de couper le texte de la chaîne. Utilisez la bibliothèque regex pour le faire comme indiqué ci-dessous.

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59) 
>>>
>>> ## Import the required Packages. 
>>> import regex as re
>>>
>>> ## The original list. The Emojis are extracted from this list. 
>>> orig_list = ['These ? Emojis, ? are ? embedded ? within ? this ? text.']
>>>
>>> ## Use a regular expression set to find and extract all emojis in orig_list
>>> new_list = re.findall(r'[^\w\s,.]', orig_list[0])
>>>
>>> new_list 
['?', '?', '?', '?', '?', '?']
>>> 

Le re.findall() la méthode utilise l'ensemble d'expressions régulières, c'est-à-dire [] avec le caractère d'exclusion ^ , pour supprimer des caractères de texte. Le texte est représenté par des classes de caractères telles que \w , \s et des caractères spéciaux tels que . ou , . Ceci est aussi parfois appelé la méthode de recherche en ligne

Remarque : Bien que la méthode ci-dessus soit simple, elle a ses limites. Il faut spécifier chaque caractère de test qui pourrait apparaître dans le texte original. c'est-à-dire si le texte contient = et + par exemple, il faut spécifier r’[^\w\s,.=+]’ comme ensemble d'expressions régulières. L'expression régulière telle que codée ci-dessus est appelée la recherche en ligne méthode. Utilisez-le lorsqu'une courte recherche rapide est nécessaire. Sinon utilisez la compilation méthode qui est montrée dans la section suivante.

Remarque : Cette méthode utilise la regex bibliothèque. Installez cette bibliothèque en utilisant pip , avant d'exécuter l'exemple.

Méthode 2 :la méthode de sélection sélective des emojis

Cette méthode suivante montre comment rechercher et cibler des emojis dans la chaîne. Une fois trouvés, les emojis sont ajoutés à la liste finale.

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59)
>>>
>>> ## Import the required Packages. 
>>> import emoji
>>> import regex as re
>>> 
>>> ## The original list. The Emojis are extracted from this list. 
>>> orig_list = ['These ? Emojis, ? are ? embedded ? within ? this ? text.']
>>>
>>> ## Create an iterable object.
>>> emojis_iter = map(lambda y: y, emoji.UNICODE_EMOJI['en'].keys())
>>>
>>> ## Use the iterable object to compile a regular expression set of all emojis within 
>>> ## the ‘en’ dictionary subset.
>>> regex_set = re.compile('|'.join(re.escape(em) for em in emojis_iter))
>>>
>>> ## Use the compiled regular expression set to find and extract all emojis in
>>> ## orig_list 
>>> new_list = regex_set.findall(orig_list[0])
>>> new_list
['?', '?', '?', '?', '?', '?']

Cette méthode est différente de la méthode ci-dessus, en ce sens qu'elle cible sa recherche d'emojis dans une chaîne donnée.

Pour cela, extrayez d'abord l'intégralité du 'en' sous-ensemble du dictionnaire emojis dans un itérable (c'est-à-dire emojis_iter ).

Ensuite, utilisez l'itérable pour compiler un ensemble d'expressions régulières . Cet ensemble contient désormais tous les emojis extraits du dictionnaire des emojis. Enfin, utilisez cet ensemble d'expressions régulières pour extraire tous les emojis de la chaîne donnée. La communauté Python a mis en avant diverses raisons de compiler un ensemble d'expressions régulières. Certaines de ces raisons sont

  • Cela rend le code concis et plus facile à lire.
  • Le code utilise l'expression de recherche plusieurs fois.
  • Compilez l'expression de recherche dans une partie moins intensive en calcul de l'application. c'est-à-dire compilez-le au début, utilisez-le plus tard.

Remarque : Cette méthode utilise le emoji et le regex bibliothèques. Installez ces bibliothèques en utilisant pip , avant d'exécuter l'exemple.

Méthode 3 : la méthode "All-Out Hit It With Everything"

Cette méthode utilise le Python advertools forfait. Ce package fournit des outils de productivité et d'analyse. Les spécialistes du marketing en ligne et les scientifiques des données utilisent advertools pour comprendre, manipuler et gérer les données. Ils utilisent également advertools pour visualiser, communiquer et prendre des décisions, basées sur des données. Un lecteur utiliserait advertools , s'ils souhaitent faire des recherches approfondies sur les emojis. Mais avant tout. Les étapes ci-dessous utilisent le advertools package pour extraire les emojis de orig_list .

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59)
>>>
>>> ## Import the required Packages. 
>>> import advertools as adv
>>> 
>>> ## The original list. The Emojis are extracted from this list. 
>>> orig_list = ['These ? Emojis, ? are ? embedded ? within ? this ? text.']
>>>
>>> ## Use advertools to process orig_list. A dictionary is returned. 
>>> emoji_dict = adv.extract_emoji(orig_list)
>>>
>>> ## This dictionary is packed with all sorts of statistical information about orig_list.
>>> ## We want specific information, which is enclosed in the ‘emoji’ key.
>>> ## Also the returned value is a list of lists. We need only the first list.
>>> new_list = emoji_dict['emoji'][0]
>>> new_list
['?', '?', '?', '?', '?', '?']

Le extract_emoji() La méthode simplifie l'extraction de tous les emojis. Il est capable de faire beaucoup d'étapes sous le capot, pour séparer les emojis du texte. Il renvoie un dictionnaire contenant de nombreuses informations statistiques utiles. La clé de dictionnaire spécifique 'emoji' , contient une liste de listes . La première liste de cette liste de listes contient la réponse. Dans l'exemple simple ci-dessus, emoji_dict['emoji'][0] extrait cette première liste et donc la réponse.

Remarque : Cette méthode utilise le package advertools. Le advertools le paquet utilise le regex et le emoji bibliothèques en son sein. Installez ce package en utilisant pip , avant d'exécuter l'exemple.

Méthode 4+ :Mais attendez, il y a plus !!!

Rappelez-vous le dictionnaire renvoyé par extract_emoji() ? Ce dictionnaire contient des informations utiles sur les emojis dans la chaîne d'origine. Le lecteur curieux pourrait être impatient d'explorer toutes ces informations utiles. Les étapes initiales sont les mêmes que celles indiquées ci-dessus, c'est-à-dire

$ python
Python 3.9.0b5 (default, Oct 19 2020, 11:11:59)
>>>
>>> ## Import the required Packages. 
>>> import advertools as adv
>>> 
>>> ## The original list. The Emojis are extracted from this list. 
>>> orig_list = ['These ? Emojis, ? are ? embedded ? within ? this ? text.', 'Another ? Emoji ? list']
>>>
>>> ## Use advertools to process orig_list. A dictionary is returned. 
>>> emoji_dict = adv.extract_emoji(orig_list)
>>>
>>> ## This dictionary is packed with all sorts of statistical information about orig_list.
>>> ## This information is explored below...

Remarque ce orig_list a une chaîne supplémentaire pour mieux expliquer les fonctionnalités ci-dessous.

Récupérez d'abord les différentes clés dans le dictionnaire.

>>> emoji_dict.keys()
dict_keys(['emoji', 'emoji_text', 'emoji_flat', 'emoji_flat_text', 'emoji_counts', 'emoji_freq', 'top_emoji', 'top_emoji_text', 'top_emoji_groups', 'top_emoji_sub_groups', 'overview'])
>>> 

Le lecteur connaît déjà le 'emoji' clé de l'exemple ci-dessus. Notez la liste de listes renvoyée. Chaque sous-liste contient les emojis de la sous-chaîne d'origine correspondante.

>>> emoji_dict['emoji']
[['?', '?', '?', '?', '?', '?'], ['?', '?']]
>>>

Le ‘emoji_text’ clé, renvoie les noms anglais (ou descriptions) des emojis individuels. Encore une fois, notez la liste de listes renvoyée.

>>> emoji_dict['emoji_text']
[['girl', 'smiling face with horns', 'robot', 'grinning cat', 'smiling cat with heart-eyes', 'weary cat'], ['grinning face', 'yellow heart']]
>>> 

Le ‘emoji_flat’ clé, renvoie une liste plate de tous emojis dans l'intégralité liste originale de chaînes. Notez que la valeur renvoyée est une liste plate et non une liste de listes comme dans les exemples précédents.

>>> emoji_dict['emoji_flat']
['?', '?', '?', '?', '?', '?', '?', '?']
>>> 

Le ‘emoji_flat_text’ clé, renvoie une liste plate de tous descriptions d'emoji pour l'intégralité liste originale de chaînes. Notez à nouveau que la valeur renvoyée est une liste plate.

>>> emoji_dict['emoji_flat_text']
['girl', 'smiling face with horns', 'robot', 'grinning cat', 'smiling cat with heart-eyes', 'weary cat', 'grinning face', 'yellow heart']
>>> 

Le ‘emoji_counts’ clé, renvoie une liste des nombres d'emoji pour chaque sous-chaîne dans la liste de chaînes d'origine.

>>> emoji_dict['emoji_counts']
[6, 2]
>>> 

Le ‘emoji_freq’ key, regroupe les chaînes qui ont le même nombre d'emojis.

>>> emoji_dict['emoji_freq']
[(2, 1), (6, 1)]
>>> 

Le ‘top_emoji’ clé, regroupe chaque emoji unique par son nombre.

>>> emoji_dict['top_emoji']
[('?', 1), ('?', 1), ('?', 1), ('?', 1), ('?', 1), ('?', 1), ('?', 1), ('?', 1)]
>>> 

Le ‘top_emoji_text’ key regroupe chaque emoji-text-description unique par son nombre.

>>> emoji_dict['top_emoji_text']
([('girl', 1), ('smiling face with horns', 1), ('robot', 1), ('grinning cat', 1), ('smiling cat with heart-eyes', 1), ('weary cat', 1), ('grinning face', 1), ('yellow heart', 1)],)
>>> 

Le ‘top_emoji_groups’ clé, compte le nombre d'emojis appartenant à différents groupes d'emoji.

>>> emoji_dict['top_emoji_groups']
[('Smileys & Emotion', 7), ('People & Body', 1)]
>>>

Le ‘top_emoji_sub_groups’ clé, compte le nombre d'emojis appartenant à différents sous-groupes d'emoji.

>>> emoji_dict['top_emoji_sub_groups']
[('cat-face', 3), ('person', 1), ('face-negative', 1), ('face-costume', 1), ('face-smiling', 1), ('emotion', 1)]
>>>

Enfin, le ‘overview’ clé, donne un aperçu du orig_list du point de vue des emojis.

>>> emoji_dict['overview']
{'num_posts': 2, 'num_emoji': 8, 'emoji_per_post': 4.0, 'unique_emoji': 8}
>>> 

Académie Finxter

Ce blog vous a été présenté par Girish , un étudiant de Finxter Academy. Vous pouvez trouver son profil Upwork ici.

Référence

Toutes les recherches pour cet article de blog ont été effectuées à l'aide de documents Python, du moteur de recherche Google et de la base de connaissances partagée de la Finxter Academy et des communautés Stack Overflow. Des concepts et des idées ont également été recherchés sur les sites Web suivants…

  • www.dataquest.io
  • outils publicitaires
  • www.kaggle.com