Expresión regular para filtrar "@" y algunas URL

Ayer que estaba analizando una serie de textos en japonés, estuve intentando hacer una expresión regular que me ayudara a filtrar URL y algunas palabras que comenzaban con arroba y podían terminar con 2 puntos.

Aunque necesitaba implementarlo en Java, primero hice pruebas en Python para evitarme la pena de tener que hacer una clase pequeña.

Por supuesto, la parte de la URL es muy común, así que en vez que reinventar el hilo negro, mejor busqué en internet. Al final, terminé con ésta:

String a = "El texto con arrobas y URL";

System.out.println(a.replaceAll("(^|\\b)?@\\w+:?(\\b)?|(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?","");

Sé que hay más opciones para filtrar la URL, pero ésta cumplió el trabajo.

Por cierto, @mecart comentó que parecía un nuevo smiley 😛

Stop Words: palabras que no dicen mucho

Cuando hablé sobre TF-IDF, mencioné que el proceso había que repetirse para cada palabra en cada documento, pero obviamente esto no es cierto. En muchos idiomas (porque no puedo asegurar que en todos) existen palabras que son muy comunes, que pueden aparecen en casi cualquier lugar y, por tanto, que no reflejan o contienen información para poder separar un documento de entre un conjunto. A esas palabras se les llama stop words (palabras vacías), y, para poder representar de forma matemática un documento de forma más exacta, hay que filtrarlas.

¿Qué palabras son stop words?

  • Preposiciones
  • Conjunciones y disyunciones
  • Verbos copulativos
  • Palabras que, estadísticamente, son muy comunes.

Si no pasamos el documento por la coladera de stop words, al momento de realizar una búsqueda esas palabras van a crear “ruido”. Se trata de identificar vocablos que sean incomunes, que nos puedan decir más sobre el documento (en qué se enfoca, en que se diferencia de los otros); si dejamos palabras como “de”, “y”, “es”, “que”, podemos casi afirmar que aparecerán en cada documento, haciendo más difícil encontrar la información que se requiere.

¿Dónde consigo una lista de stop words en español?

Una rápida búsqueda en Google revela algunos sitios que ofrecen sus listas. Generalmente funcionan, pero siempre es bueno darles una revisada, y sobre todo, afinar la lista de acuerdo a los documentos que vayamos a analizar. Lo anterior aplica cuando vamos a realizar una búsqueda en un conjunto  determinado (o una búsqueda vertical en la red), ya que, por ejemplo, puede ser que la palabra “xyz” sea muy recurrente en ellos y sea necesario filtrarla.

Aquí dejo un par de ligas. Para encontrar más, ya saben dónde 😀

http://snowball.tartarus.org/algorithms/spanish/stop.txt

http://www.elwebmaster.com/referencia/stopwords-en-espanol