una - pln con python
recuento de palabras reales en NLTK (2)
Eliminar la puntuación
Usa una expresión regular para filtrar la puntuación
import re
from collections import Counter
>>> text = [''this'', ''is'', ''a'', ''sentence'', ''.'']
>>> nonPunct = re.compile(''.*[A-Za-z0-9].*'') # must contain a letter or digit
>>> filtered = [w for w in text if nonPunct.match(w)]
>>> counts = Counter(filtered)
>>> counts
Counter({''this'': 1, ''a'': 1, ''is'': 1, ''sentence'': 1})
Promedio de caracteres
Suma los largos de cada palabra. Divide por el número de palabras.
>>> float(sum(map(len, filtered))) / len(filtered)
3.75
O puede hacer uso de los conteos que ya hizo para evitar algunos recalculados. Esto multiplica la longitud de la palabra por el número de veces que la vimos, luego suma todo eso.
>>> float(sum(len(w)*c for w,c in counts.iteritems())) / len(filtered)
3.75
El libro NLTK tiene un par de ejemplos de recuentos de palabras, pero en realidad no son recuentos de palabras sino contadores de fichas. Por ejemplo, el Capítulo 1, Counting Vocabulary dice que lo siguiente da un conteo de palabras:
text = nltk.Text(tokens)
len(text)
Sin embargo, no es así - da un recuento de palabras y puntuación. ¿Cómo se puede obtener un conteo real de palabras (ignorando la puntuación)?
Del mismo modo, ¿cómo se puede obtener el número promedio de caracteres en una palabra? La respuesta obvia es:
word_average_length =(len(string_of_text)/len(text))
Sin embargo, esto estaría fuera porque:
- len (string_of_text) es un recuento de caracteres, incluidos espacios
- len (texto) es un conteo de tokens, excluyendo espacios pero incluyendo signos de puntuación, que no son palabras.
¿Me estoy perdiendo de algo? Esta debe ser una tarea de PNL muy común ...
Tokenización con nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer(r''/w+'')
text = "This is my text. It icludes commas, question marks? and other stuff. Also U.S.."
tokens = tokenizer.tokenize(text)
Devoluciones
[''This'', ''is'', ''my'', ''text'', ''It'', ''icludes'', ''commas'', ''question'', ''marks'', ''and'', ''other'', ''stuff'', ''Also'', ''U'', ''S'']