Scraping de noms d'équipes et toutes leurs variantes dans DF

Eros7 Messages postés 1 Date d'inscription mercredi 10 avril 2024 Statut Membre Dernière intervention 10 avril 2024 - Modifié le 11 avril 2024 à 20:05
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 - 11 avril 2024 à 20:44

Bonjour,

Dans mon DataFrame tiré d'un e-commerce (vente de maillots de foot), j'ai une colonne 'Note' qui fait référence aux demandes spécifiques des clients pour leurs produits. Ici, c'est en l'occurrence des équipes de foot qu'ils ne désirent pas comme maillots.

Je souhaite donc compter le nombre de fois que le nom de chaque équipe apparaît dans la colonne 'Note'. Je ne connais pas le nombre d'équipe précis et je ne connais pas le nom de toutes les équipes.

La difficulté supplémentaire est que les notes sont écrites de cette manière ci : 'Je souhaite pas recevoir l'om car je l'ai déjà' par exemple

Vous noterez bien aussi qu'il y a de multiples variantes aux noms d'équipes {OM ; om ; Olympique de Marseille ; Marseille; etc}

Voilà voilà je pense que vous avez compris l'idée. Dites moi seulement si c'est possible au moins, MERCI !
Macintosh / Chrome 123.0.0.0

2 réponses

Bonjour.

Il n'y pas 36 façons de faire cela, soit par l'intermédiaire de boucles cherchant les occurences de termes recherchés dans chaque texte ou alors via des expressions régulières, termes recherchés que tu aurais préalablement enregistrés ailleurs et stockés dans un conteneur, un dict serait bien je pense.

1
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 7 751
11 avril 2024 à 20:44

Bonjour,

En pandas, tu peux effectivement faire plein de choses, sélectionner les lignes qui vérifient certaines propriétés, sélectionner des colonnes, grouper des colonnes, etc. Tu peux aussi créer une colonne à la volée à partir d'autres colonnes.

Ta question comporte donc plusieurs sous questions :

  • Comment extraire un ou plusieurs noms d'équipe à partir de messages arbitraire ?
    • Je pense que le plus simple serait d'avoir un dictionnaire qui associe à chaque mot pertinent (par exemple "OM", "Marseille") l'équipe correspondante. Tu obtiendrais ainsi une manière de convertir un message en langage naturel en un ensemble de noms d'équipe non ambigu.
    • Ensuite, à voir dans quel mesure tu peux utiliser apply pour générer une colonne "Équipe".
  • Comment faire ladite requête en pandas : pour cela il faudrait voir la structure de ta DataFrame (par exemple en proposant un exemple minimal).
    • Le cas "simple", c'est si ta colonne "Équipe" ne contient qu'une équipe, puis faire la requête de ton choix avec pandas (par exemple compter le nombre de lignes telles que Équipes == Marseille, en suivant cet exemple).
    • Si une colonne contient un nombre arbitraire d'équipe il faudra probablement utiliser isin.

Concernant le premier point, tu peux imaginer une fonction de ce genre :

import re

TEAMS = {"marseille", "lyon", "paris"}

MAP_ALIASES = {
    "om" : "marseille",
    "ol" : "lyon",
    "psg" : "paris",
}

def message_to_teams(s: str) -> set:
    s = s.lower()
    s = re.sub("( *[^A-Za-z0-9] *)+", " ", s)
    teams = set()
    for word in s.split():
        if word in TEAMS:
            teams.add(word)
        else:
            team = MAP_ALIASES.get(word)
            if team is not None:
                teams.add(team)
    return teams
 
print(message_to_teams("J'aime l'om et lyON, et Paris"))
# Affiche {'marseille', 'lyon', 'paris'}

Bon c'est simpliste et typiquement ça ne fera pas de différence entre les négations et les affirmations, mais là ça paraît difficile à mettre en œuvre sans NLP...

Concernant le second point, l'idéal serait de partager le jeu de données s'il est public (ou un extrait minimal et représentatif).

Bonne chance

0