Partage
  • Partager sur Facebook
  • Partager sur Twitter

Supprimer caractère spéciaux avec map/reduce

    23 janvier 2020 à 16:43:17

    Bonjour, j'ai crée un petit programme permettant de calculer le nombre de mot dans un texte et le réduire mais je me retrouve avec des caractères spéciaux que je n'arrive pas à enlever (-- ou , ou ; ou ! par exemple) je voulais savoir s'il fallait que je fasse une regex ou utiliser la fonction .strip()

    merci 

    #!/usr/bin/env python
    """reducer.py"""
    
    from operator import itemgetter
    import sys
    
    current_word = None
    current_count = 0
    word = None
    
    # input comes from STDIN
    for line in sys.stdin:
        # remove leading and trailing whitespace
        line = line.strip('!')
    
        # parse the input we got from mapper.py
        word, count = line.split('\t', 1)
    
        # convert count (currently a string) to int
        try:
            count = int(count)
        except ValueError:
            # count was not a number, so silently
            # ignore/discard this line
            continue
    
        # this IF-switch only works because Hadoop sorts map output
        # by key (here: word) before it is passed to the reducer
        if current_word == word:
            current_count += count
        else:
            if current_word:
                # write result to STDOUT
                print '%s\t%s' % (current_word, current_count)
            current_count = count
            current_word = word
    
    # do not forget to output the last word if needed!
    if current_word == word:
        print '%s\t%s' % (current_word, current_count)
    
    #!/usr/bin/env python
    """mapper.py"""
    
    import sys
    
    # input comes from STDIN (standard input)
    for line in sys.stdin:
        # remove leading and trailing whitespace
        line = line.strip()
        # split the line into words
        words = line.split()
        carac_spec =",.!;:"
        if carac_spec in words:
    	words = words.strip(carac_spec)
        # increase counters
        for word in words:
            # write the results to STDOUT (standard output);
            # what we output here will be the input for the
            # Reduce step, i.e. the input for reducer.py
            #
            # tab-delimited; the trivial word count is 1
    	
            print '%s\t%s' % (word, 1)
    


    -
    Edité par alex32123 23 janvier 2020 à 16:43:42

    • Partager sur Facebook
    • Partager sur Twitter
      24 janvier 2020 à 8:54:13

      C'est simple avec une regex

      >>> import re
      >>> REG = re.compile(r'["%&\'()*+,-./:?@_§°;!]+')
      >>> phrase = "C'est l'été !!! (& c'est cool)"
      >>> REG.sub("", phrase)
      'Cest lété   cest cool'



      • Partager sur Facebook
      • Partager sur Twitter

      Supprimer caractère spéciaux avec map/reduce

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown