Quiero implementar algunas aplicaciones con n-grams (preferiblemente en PHP).N-grams: Explicación + 2 aplicaciones
¿Qué tipo de n-grams es más adecuado para la mayoría de los propósitos? ¿Un nivel de palabra o un nivel de personaje n-gramo? ¿Cómo podría implementar un n-gram-tokenizer en PHP?
En primer lugar, me gustaría saber qué son exactamente los N-grams. ¿Es esto correcto? Es la forma en que entiendo n-grams:
Frase: "Vivo en Nueva York".
Bigramas nivel de la palabra (2 para N): "# I', "Vivo", "vivir", "en NY", 'NY #'
Bigramas nivel de personaje (2 para n): "#I", "I #", "#l", "li", "iv", "ve", "e #", "#i", "in", "n #", "#N", "NY", "y #"
Cuando se tiene este conjunto de n-gram-partes, que deje caer los duplicados y agregar un contador para cada parte dando la frecuencia: bigramas nivel
palabras: [1 , 1, 1, 1, 1]
nivel de personaje bigrams: [2, 1, 1, ...]
¿Es esto correcto?
Por otra parte, me gustaría aprender más acerca de lo que puede hacer con n-gramas:
- ¿Cómo puedo identificar el lenguaje de un texto usando n-gramas?
- ¿Es posible hacer la traducción automática utilizando n-grams, incluso si no tiene un corpus bilingüe?
- ¿Cómo puedo crear un filtro de correo no deseado (spam, ham)? ¿Combina n-grams con un filtro bayesiano?
- ¿Cómo puedo hacer detección de temas? Por ejemplo: ¿hay un texto sobre baloncesto o perros? Mi enfoque (haga lo siguiente con un artículo de Wikipedia para "perros" y "baloncesto"): construya los vectores n-gram para ambos documentos, normalícelos, calcule la distancia Manhattan/Euclidian, cuanto más cerca esté el resultado de 1, mayor será el similitud
¿Qué opinas sobre mis enfoques de aplicación, especialmente el último?
Espero que me puedas ayudar. ¡Gracias por adelantado!
Hay una biblioteca PHP que hace eso por usted: https://packagist.org/packages/drupol/phpngrams –