Créez votre propre moteur de recherche basé sur la PNL avec BM25

Contenu

Moteur de recherche PNL avec BM25

introduction

Comment peuvent-ils tout scanner sur Internet et renvoyer des résultats pertinents en seulement Environ 5,43,00,000 résultats (0,004 secondes). Bon, travailler sur le concept de Rampant Oui Indexage.

  • Rampant: Les robots automatisés recherchent des pages nouvelles ou mises à jour. Et stockez les informations clés telles que: URL, qualification, mots-clés, etc. des pages à utiliser plus tard.
  • Indexage: Les données capturées à partir de la trace sont analysées comme: de quoi parle la page. Le contenu clé, les images et les fichiers vidéo de la page sont utilisés dans la procédure. Ces informations sont indexées et stockées pour être renvoyées ultérieurement pour une requête de recherche.

Pour cela, chaque fois que nous leur demandons de trouver quelque chose pour nous, ils ne scannent pas la longueur et la largeur d'Internet, mais il suffit de scanner ces URL indexées à l'étape 2.

Bon, aujourd'hui, nous travaillerions sur la façon de développer un petit prototype, très équivalent à la fonctionnalité d'indexation de n'importe quel moteur de recherche. Nous utiliserions un ensemble de données de tweets dans #COVID et nous essaierions de les indexer en fonction de notre terme de recherche.

UNE. Importation de packages

importer des pandas au format pd
à partir de l'importation rank_bm25 *

Qu'est-ce que le BM25?

BM25 est un simple package Python et peut être utilisé pour indexer les données, tweets dans notre cas, basé sur la requête de recherche. Fonctionne sur le concept TF / Tsahal, En d'autres termes.

  • TF ou fréquence de terminaison: brièvement, indique le nombre d'occurrences du terme recherché dans notre tweet
  • Fréquence de document inversée ou IDF: mesure la pertinence de votre terme de recherche. Puisque TF considère que tous les termes sont d'égale importance, pour cela, on ne peut pas utiliser uniquement des fréquences de termes pour calculer le poids d'une définition dans son texte. Il faudrait peser les termes fréquents tout en développant les termes rares qui montrent leur pertinence pour le tweet.

Une fois la requête exécutée, BM25 montrera la pertinence de votre terme de recherche avec chacun des tweets. Vous pouvez les trier pour indexer les plus pertinents.

B. Préparer vos tweets

Puisqu'il ne s'agit pas d'une discussion sur l'API Twitter, commencera à utiliser un flux basé sur Excel. Vous pouvez nettoyer vos données textuelles dans ces étapes clés pour rendre votre recherche plus robuste.

1. Tokenisation:

Divisez la phrase en mots. Pour que chaque mot puisse être considéré de manière unique.

de nltk.tokenize importer word_tokenize
phrase = "Jack est un homme vif d'esprit"
mots = mot_tokenize(phrase)
imprimer(mots)
Sortir: ['Jack', 'sharp', 'minded', 'fellow']

2. Supprimer les caractères spéciaux:

Supprimez les caractères spéciaux de vos tweets

def spl_chars_removal(ler):
    lst1=liste()
    pour l'élément dans lst:
        str=""
        str = re.sub("[-9a-zA-Z]"," ",élément)
        lst1.append(str)
    retourner lst1

3. Supprimer les mots vides:

Les mots vides sont des mots communs (il est, à, les, etc.) dans les tweets. Ces mots ne signifient aucune pertinence puisqu'ils ne permettent pas de distinguer deux tweets. habitué Gensim pack pour effacer mes mots inutiles, vous pouvez également le tester en utilisant nltk, mais j'ai trouvé Gensim beaucoup plus vite que les autres.

De plus, de nouveaux mots peuvent facilement être ajoutés à la liste des mots vides., au cas où vos données sont spécifiquement entourées par ces mots et qu'ils se produisent plusieurs fois.

#ajouter des mots aux mots vides
de nltk.tokenize importer word_tokenize
de gensim.parsing.preprocessing import STOPWORDS
#ajouter des mots personnalisés à la liste de mots vides prédéfinie
all_stopwords_gensim = STOPWORDS.union(ensemble(['maladie']))
def stopwprds_removal_gensim_custom(ler):
    lst1=liste()
    pour str dans lst:
        text_tokens = word_tokenize(str)
        jetons_sans_sw = [mot pour mot dans text_tokens sinon mot dans all_stopwords_gensim]
        str_t = " " .joindre(jetons_sans_sw)
        lst1.append(str_t)
 
    retourner lst1

4. Normalisation:

La normalisation du texte est la procédure de transformation d'un texte en une forme canonique (la norme). Par exemple, mot « bon » Oui « Dieu » peut être transformé en « bon », sa forme canonique. Un autre exemple est le mappage de mots presque identiques comme « mots vides », « mots vides » Oui « mots vides » à seulement « mots vides ».

Cette technique est essentielle pour les textes forts comme les commentaires sur les réseaux sociaux., messages texte et commentaires sur les articles de blog où les abréviations prévalent, fautes d'orthographe et utilisation de mots qui ne font pas partie du vocabulaire (oov). Les gens ont tendance à écrire des commentaires en sténographie et, pour cela, ce prétraitement devient très important.

brut Standardisé
Oui, jour le jour d'hier
tomo, 2moro, 2mrw, tmrw matin
brb Je retourne tout de suite

5. Dérivé:

Procédure pour transformer les mots en leur forme racine. C'est la procédure de réduction de l'inflexion des mots (par exemple, problèmes, problèmes) à sa forme racine (par exemple, problèmes). La « racine » dans ce cas, ce n'est peut-être pas un vrai mot racine, mais simplement une forme canonique du mot original.

Stemming utilise une procédure heuristique qui coupe les extrémités des mots dans l'espoir de transformer correctement les mots dans leur forme racine. Doit être revu, puisque dans l'exemple suivant vous pouvez voir que « Machine » Il se transforme en « Voitures », « e » est coupé dans la procédure de contournement..

importer nltk
de nltk.stem
importer PorterStemmer
ps = PorterStemmer() phrase = « L'apprentissage automatique, c'est cool »
pour mot dans phrase.split():
    imprimer(ps.stem(mot))

Production: ['Auto', 'Apprentissage', 'frais']


C. Tokenisation des tweets et exécution du BM25

C'est la pièce maîtresse où nous exécutons la requête de recherche. Nous recherchons des tweets basés sur le mot « vaccin » basé sur l'utilisateur. De plus, vous pouvez entrer une phrase et elle le fera couramment lorsque nous convertirons notre terme de recherche à la deuxième ligne ci-dessous.

tokenized_corpus = [doc.split(" ") pour doc dans lst1]

bm25 = BM25Okapi (tokenized_body)

requête = "vaccin" ## Entrez votre requête de recherche

tokenized_query = requête.split (« »)


Vous pouvez vérifier l'association de chaque tweet avec votre terme de recherche en utilisant .obtenir_scores une fonction.

doc_scores = bm25.get_scores(tokenized_query)
imprimer(doc_scores)

En entrant n = 5 dans .get_top_n nous obtiendrions cinq autres tweets associés comme résultat. Vous pouvez mettre la valeur de n selon vos besoins.

docs = bm25.get_top_n (tokenized_query, lst1, n = 5)

df_recherche = df[df['Texte'].rayon (documents)]

df_search.head ()


ré. Les cinq principaux tweets associés

Sommet 5 tweets Tweeté par
@ MikeCarlton01 Concernant le financement #ABC, recherché les documents budgétaires. Après les coupes massives précédentes, eu $ 4.7 millions supplémentaires de fonds (.00044% beaucoup moins que l'inflation).

#Les déchets de Morrison $ Plus cher & ampli; services inefficaces, par exemple, l'appli #Covid inutile; vaccin de livraison #agedcare; conseils sur la mise en œuvre des vaccins.

MORRIGAN
@TonyHWindsor @barriecassidy @ 4corners @ abc730 Pour leur travail inestimable, #ABC a obtenu $ 4.7M supplémentaire en fonds (.00044% beaucoup moins que l'inflation).

Alors que #Morrison Govt dépense comme un marin ivre achetant à des prix chers & ampli; services par les pairs inefficaces (p. ne pas., application #Covid inutile; livraison de vaccins #agedcare; lancement du vaccin) #auspol

MORRIGAN
Ça va être un mois après ma convalescence #Covid. Maintenant je vais aller me faire vacciner 😎😎😎😎 Simi Elizabeth😃
RT @pradeepkishan: Quel politicien méprisable est #ArvindKejariwal! Au moment où l'accumulation d'oxygène est apparue, leur propagande s'est transformée en pénurie de vaccins. C'est plus dangereux que le #COVID lui-même! @BJP4India @TajinderBagga p.hariharan
RT @AlexBerenson: TL: RD – À l'essai du vaccin #Covid pour adolescents de @pfizer, 4 O 5 (le chiffre exact est caché) de 1,100 les enfants qui ont reçu le vaccin ont eu des effets secondaires graves, en comparaison avec 1 qui a reçu un placebo.

@US_FDA n'a pas révélé de détails spécifiques, donc nous n'avons aucune idée de ce qu'ils étaient ou s'ils suivent un modèle. https://t.co/n5igf2xXFN

Sagesse

E. Cas d'utilisation supplémentaires du BM25

Il peut y avoir de nombreux cas d'utilisation où une fonction de recherche est requise. L'un des plus pertinents est l'analyse du PDF et le développement d'une fonction de recherche sur le contenu du PDF.

C'est l'un des cas les plus utilisés pour BM25. Alors que le monde évolue lentement vers une meilleure stratégie de données et des techniques de stockage efficaces, les anciens documents PDF peuvent être récupérés efficacement à l'aide d'algorithmes tels que BM25.

J'espère que vous avez apprécié cette lecture et que vous l'avez trouvée utile. Merci les amis!

Liens de référence

Les médias présentés dans cet article ne sont pas la propriété de DataPeaker et sont utilisés à la discrétion de l'auteur.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.

Haut-parleur de données