python: conteggio word token nella frase

Sto cercando di contare il numero di parole in una stringa. tuttavia, per primo devo striscia di alcuni segni di interpunzione ad esempio

line = "i want you , to know , my name . "

esecuzione

en = line.translate(string.maketrans('', ''), '!,.?')

produce

en = "i want you  to know  my name  "

dopo questo, voglio contare il numero di parole in riga. ma quando faccio len(en) ho 30 invece di 7.

Con split su it per simboleggiare e trovare la lunghezza non in tutti i casi. ad esempio,

ho provato che non sempre funziona. ad esempio, considerare questa stringa.

"i ccc bcc the a of the abc ccc dd on aaa , 28 abc 19 ."

it diventa quindi:

"i ccc bcc the a of the abc ccc dd on aaa 28 abc 19 "

ma len(en) restituisce 17 e non 15.

potete per favore aiutare? grazie

InformationsquelleAutor Duke | 2011-11-07

 

6 Replies
  1. 11

    Il problema con en.split(' ') è che si dispone di più spazio in una stringa, che dà vuoto partite. Si potrebbe risolvere facilmente chiamando en.split() invece.

    Ma forse si potrebbe utilizzare questo approccio diverso utilizzando un’espressione regolare (e ora non c’è bisogno di rimuovere la punteggiatura prima):

    import re
    print len(re.findall(r'\w+', line))

    Vederlo lavorare online: ideone

    • perfetto. grazie!
    • Essere sicuri di accettare la migliore risposta con il segno di spunta verde….
  2. 5

    Invece di usare le regex \w+ è molto più veloce da usare \b per il conteggio di parole, in questo modo:

    import re
    _re_word_boundaries = re.compile(r'\b')
    
    def num_words(line):
        return len(_re_word_boundaries.findall(line)) >> 1

    Nota che abbiamo a dimezzare il numero perché \b corrisponde all’inizio e alla fine di una parola. Purtroppo, a differenza di egrep, Python non supporta la corrispondenza all’solo l’inizio o la fine.

    Se si hanno le linee molto lunghe e sono preoccupati per la memoria, l’utilizzo di un iteratore può essere una soluzione migliore:

    def num_words(line):
        return sum(1 for word in _re_word_boundaries.finditer(line)) >> 1
  3. 1

    La funzione len conta la lunghezza della variabile, che in questo caso, è la lunghezza della stringa, che è di 30 caratteri. Conteggio parole, è necessario dividere la stringa in spazi, e poi contare il numero di elementi che vengono restituiti.

  4. 1
    def main():
    
    # get the user msg
        print "this program tells you how many words are in your sentence."
        message = raw_input("Enter message: ")
    
        wrdcount = 0
        for i in message.split():
            eawrdlen = len(i) / len(i)
            wrdcount = wrdcount + eawrdlen
        print wrdcount
    
    
    main()

Lascia un commento