En ce qui concerne l'analyse des données, ** FlashText ** est un outil plus rapide et plus fiable de recherche et de remplacement.
Si vous avez effectué une analyse de texte ou de données, vous connaissez peut-être déjà les expressions régulières (RegEx). RegEx a évolué en tant qu'outil nécessaire pour effectuer l'édition de texte. Si vous utilisez toujours RegEx pour gérer le traitement de texte, il peut y avoir des problèmes à résoudre. Pourquoi donc? Pour les gros textes, l'inefficacité de RegEx peut rendre l'analyse des données trop longue.
Dans cet article, vous pouvez analyser les données 100 fois plus rapidement que RegEx [Python](https://www.alibabacloud.com/blog/how-to-write-a-headless-web-scraping-bot- in-python_594829? spm = a2c65.11461447.0.0.61739943rkkVz0) Présentation de l'utilisation de la bibliothèque "FlashText".
Avant de procéder à l'analyse, même le texte le plus simple doit être nettoyé des données source. Cela implique souvent la recherche et le remplacement de mots-clés. Par exemple, recherchez le mot-clé "Python" dans le corpus, ou remplacez tout "python" par "Python".
RegEx est un outil idéal si vous avez besoin de trouver et de remplacer des centaines de mots-clés. Cependant, bon nombre de ces tâches impliquent le traitement du langage naturel (NLP). Vous pouvez rencontrer des dizaines de milliers de telles opérations. L'utilisation de RegEx pour répondre à ces exigences peut prendre des jours.
Bien sûr, vous pourriez penser que la mise en parallèle du processus pourrait résoudre ce problème, mais en réalité, cette solution ne fait pas une grande différence.
Existe-t-il un autre moyen de résoudre ce problème?
Les développeurs de FlashText étaient confrontés au même problème à l'époque. Certaines recherches n'ont donné aucun résultat, il a donc décidé d'écrire un nouvel algorithme.
Avant de comprendre l'algorithme sous-jacent, examinons un tableau de comparaison montrant la vitesse de FlashText dans la recherche et les expressions régulières dans la recherche.
En regardant la figure ci-dessus, vous pouvez voir que le temps de traitement de RegEx augmente presque linéairement à mesure que le nombre de mots-clés augmente. Cependant, en revanche, l'augmentation des mots-clés n'affecte pas FlashText.
Ensuite, regardons un autre graphique pour la substitution de mots clés.
De même, à mesure que le nombre de mots-clés augmente, le temps de traitement de FlashText ne change pas beaucoup.
Comme son nom l'indique, FlashText est l'un des moyens les plus rapides de rechercher et de remplacer des mots-clés. Il s'agit d'une bibliothèque Python open source sur GitHub.
Lorsque vous utilisez FlashText, commencez par fournir une liste de mots-clés. FlashText utilise cette liste pour créer un dictionnaire Trie interne. Il envoie ensuite une chaîne de texte selon que vous souhaitez le trouver ou le remplacer.
Si vous souhaitez effectuer un remplacement, créez une nouvelle chaîne contenant les mots-clés de remplacement. Pour effectuer une recherche, il renvoie une liste de mots-clés dans la chaîne. Ces tâches ne parcourent la chaîne qu'une seule fois.
Pour vraiment comprendre pourquoi FlashText est si rapide, prenons un exemple. Considérez une phrase composée des trois mots «J'aime Python». Supposons que vous ayez un corpus de quatre mots {Python, Java, J2ee, Ruby}.
Si vous sélectionnez chaque mot du corpus et voyez s'il apparaît dans la phrase, vous devez répéter la chaîne quatre fois.
Il nécessite plusieurs itérations pour les n mots du corpus. Et chaque étape (dans l'instruction? C'est la logique de correspondance RegEx. Il existe également une autre méthode qui entre en conflit avec la première méthode. Il s'agit de vérifier chaque mot d'une phrase pour voir s'il existe dans le corpus.
Pour m mots dans une phrase, vous avez m cycles. Dans cette situation, le temps passé ne dépend que du nombre de mots de la phrase. Vous pouvez utiliser le dictionnaire pour effectuer cette étape rapidement.
L'algorithme FlashText utilise la deuxième méthode. De plus, l'algorithme Aho-Corasick et la structure de données Trie inspirent cet algorithme.
Commencez par créer une structure de données Trie à partir du corpus. Cela devrait ressembler au graphique ci-dessous.
Début et EOT (fin de terme) indiquent les limites des mots. Soit un espace, une virgule ou une valeur de retour de ligne. Vous pouvez faire correspondre le mot-clé s'il a des limites des deux côtés. Cela évitera des cas tels que la correspondance de pomme ananas.
Cherchons caractère par caractère en utilisant la chaîne "J'aime Python".
Cet algorithme recherche caractère par caractère, donc lors de la recherche de 1, il est facile de sauter car je ne suis pas immédiatement après. Ce mécanisme vous permet de sauter tous les mots inexistants.
L'algorithme FlashText inspecte chaque caractère de la chaîne "J'aime Python". Même si le dictionnaire contient 1 million de mots-clés, cela n'affecte pas réellement l'opération.
Nous vous recommandons d'utiliser FlashText lorsque le nombre de mots-clés dépasse 500.
En termes de recherche, FlashText fonctionne mieux que RegEx lorsque le nombre de mots-clés est de 500 ou plus.
De plus, RegEx peut rechercher des caractères spéciaux tels que "^, $, *, d", mais FlashText ne les prend pas en charge.
Il ne correspond pas aux mots partiels (par exemple "worddvec"), mais correspond aux mots complets ("word2vec").
Jetons un coup d'œil à l'utilisation de base de FlashText. essayez-le. Vous constaterez qu'il est beaucoup plus rapide que RegEx.
Vous trouverez ci-dessous du code pour vous aider à utiliser FlashText. Code: recherchez des mots-clés à l'aide de FlashText.
Code: recherchez des mots-clés à l'aide de FlashText.
Nous espérons que vous lirez cet article et comprenez le fait que FlashText est un meilleur outil que RegEx. En particulier, j'ai montré un graphique montrant les performances de RegEx et FlashText.
Recommended Posts