Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
ai:nlp_with_nltk [2011/09/25 10:32] alfred |
ai:nlp_with_nltk [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 63: | Línea 63: | ||
| - | ==== Tratar strings (texto raw) ==== | + | |
| - | * ''nltk.word_tokenize(s)'', separa el texto en distintos tokens a partir de espacios en blanco, saltos de línea... | + | |
| - | * ''nltk.clean_html(s)'', substrae el texto de un string en formato HTML. | + | |
| Línea 100: | Línea 98: | ||
| </code> | </code> | ||
| - | ==== Notas ==== | + | |
| - | === Esquema del trato con strings === | + | |
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Preproceso del texto ==== | ||
| + | === Tokenizar === | ||
| + | * ''nltk.word_tokenize(s)'', separa el texto en distintos tokens a partir de espacios en blanco, saltos de línea... | ||
| + | * Podemos tokenizar a partir del método ''re.split(regex, text)''. Con expresiones regulares como ''r'\s+''' (para espacios en blanco, tabulaciones, saltos de línea...), ''r'\W+''' (para tokens que no contengan puntuación)... | ||
| + | * ''nltk.regexp_tokenize(regex, s)'' nos permite tokenizar un texto a partir de una expresión regular. | ||
| + | |||
| + | === Limpieza === | ||
| + | * ''nltk.clean_html(s)'', substrae el texto de un string en formato HTML. | ||
| + | |||
| + | === Segmentar === | ||
| + | |||
| + | === Lematizar === | ||
| + | NLTK permite lematizar a partir del lematizador de WordNet, este elimina los afijos si la palabra resultante está en el diccionario. | ||
| + | <code python> | ||
| + | wnl = nltk.WordNetLemmatizer() | ||
| + | [wnl.lemmatize(t) for t in tokens] | ||
| + | </code> | ||
| + | |||
| + | === Stemizar === | ||
| + | NLTK provee de dos stemmers, el de Porter (''nltk.PorterStemmer'') y el de Lancaster (''nltk.LancasterStemmer''), un ejemplo de uso sería: | ||
| + | <code python> | ||
| + | porter = nltk.PorterStemmer() | ||
| + | [porter.stem(t) for t in tokens] | ||
| + | </code> | ||
| + | |||
| + | === Esquema básico === | ||
| <code python> | <code python> | ||
| from urllib import urlopen | from urllib import urlopen | ||
| Línea 108: | Línea 139: | ||
| html = urlopen(url).read() | html = urlopen(url).read() | ||
| raw = nltk.clean_html(html) # 1. Conseguimos el texto | raw = nltk.clean_html(html) # 1. Conseguimos el texto | ||
| - | tokens = nltk.wordpunct_tokenize(raw) # 2. Lo toquenizamos | + | tokens = nltk.wordpunct_tokenize(raw) # 2. Lo tokenizamos |
| text = nltk.Text(tokens) # 3. Lo convertimos a objeto Text | text = nltk.Text(tokens) # 3. Lo convertimos a objeto Text | ||
| words = [w.lower() for w in text] # 4. Lo normalizamos | words = [w.lower() for w in text] # 4. Lo normalizamos | ||
| vocab = sorted(set(words)) # 5. Lo tratamos (p.ej. extracción de vocabulario) | vocab = sorted(set(words)) # 5. Lo tratamos (p.ej. extracción de vocabulario) | ||
| </code> | </code> | ||
| + | |||
| + | |||
| ===== Categorizar y taggear palabras ===== | ===== Categorizar y taggear palabras ===== | ||
| Línea 122: | Línea 155: | ||
| ===== Notas ===== | ===== Notas ===== | ||
| + | |||
| Línea 194: | Línea 228: | ||
| path = nltk.data.find('corpora/unicode_samples/polish-lat2.txt') # Devuelve la ruta de polish-lat2.txt | path = nltk.data.find('corpora/unicode_samples/polish-lat2.txt') # Devuelve la ruta de polish-lat2.txt | ||
| </code> | </code> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Regex útiles ==== | ||
| + | ^ regex ^ Explicación ^ | ||
| + | | ''[aeiou]{2,}'' | Palabras con dos vocales seguidas | | ||
| + | | ''^(.*)(ing|ly|ed|ious|ies|ive|es|s|ment)$'' | Estemiza palabras en inglés, devolviendo el estema y el sufijo | | ||
| + | | ''<.*><.*><bro>'' | Tres palabras seguidas donde la última sea //"bro"// | | ||
| + | | ''<a>(<.*>)<man>'' | Los adjetivos que se le agregan a //"a man"//. | | ||