Herramientas de usuario

Herramientas del sitio


ai:nlp_with_nltk

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

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 169: Línea 204:
 9> ¿cuanto tiempo antes del vuelo siguiente a él que estaca hacia afuera se relaja? 9> ¿cuanto tiempo antes del vuelo siguiente a él que estaca hacia afuera se relaja?
 </​code>​ </​code>​
- 
- 
- 
  
 === Corpus === === Corpus ===
Línea 183: Línea 215:
   * ''​cess_esp'',​ corpus en castellano.   * ''​cess_esp'',​ corpus en castellano.
   * ''​udhr'',​ declaración de los derechos humanos clasificados en 300 lenguas.   * ''​udhr'',​ declaración de los derechos humanos clasificados en 300 lenguas.
 +
 === Lexicos === === Lexicos ===
 También los encontramos en ''​nltk.corpus'':​ También los encontramos en ''​nltk.corpus'':​
Línea 189: Línea 222:
   * ''​swadesh'',​ lista de las palabras más utilizadas en los distintos lenguajes. ''​nltk.corpus.swadesh.fileids()''​ devolvería los idiomas disponibles y ''​nltk.corpus.swadesh.words('​es'​)''​ las palabras del castellano.   * ''​swadesh'',​ lista de las palabras más utilizadas en los distintos lenguajes. ''​nltk.corpus.swadesh.fileids()''​ devolvería los idiomas disponibles y ''​nltk.corpus.swadesh.words('​es'​)''​ las palabras del castellano.
   * ''​wordnet''​ provee de un árbol de palabras relacionadas entre ellas a partir de su significado (''​synsets''​),​ lemas (''​lemmas''​) y demás relaciones léxicas (''​hypernym'',​ ''​antonym'',​ ''​entail''​...) y, a la vez, de métodos para movernos por este árbol.   * ''​wordnet''​ provee de un árbol de palabras relacionadas entre ellas a partir de su significado (''​synsets''​),​ lemas (''​lemmas''​) y demás relaciones léxicas (''​hypernym'',​ ''​antonym'',​ ''​entail''​...) y, a la vez, de métodos para movernos por este árbol.
 +
 === Notas === === Notas ===
-Funciones útiles:+Funciones útiles ​para tratar con los recursos:
 <code python> <code python>
 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"//​. |
ai/nlp_with_nltk.1316946722.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)