¿Cómo encuentra Google Play las subcadenas más populares en un conjunto de revisiones?

Descargo de responsabilidad : no sé nada de cómo funciona específicamente Google play, pero responderé esto principalmente en función de mi comprensión de los algoritmos, ya que creo que el aprendizaje automático y el análisis de sentimientos, aunque es una herramienta útil, es excesivo aquí.

Primero analicemos el enunciado del problema: queremos encontrar la subcadena más recurrente en un corpus (el corpus es el conjunto completo de tokens en un orden específico según la revisión de Google Play). Para facilitar la comprensión, definamos “token” como un conjunto de caracteres separados por espacios en blanco. Entonces, el enunciado del problema generalizado es: ¿Cómo encuentra el orden más recurrente de tokens en una cadena dada?

Solución de fuerza bruta : trocee todo el conjunto posible de subcadenas consecutivas por comentario y haga un mapa de subcadenas para contar el número de ocurrencias y ordenarlas. Esto es ridículamente ineficiente ya que calcular todas estas subcadenas lleva a Theta (n ^ 2) $ tiempo. ¿Cómo?

  1. crea una ventana de subcadena de tamaño n, donde n = # de tokens
  2. Luego crea una ventana de tamaño n – 1 y calcula substr (0, n-1) y substr (1, n)
  3. Luego crea una ventana de tamaño n – 2 y calcula substr (0, n-2) y substr (1, n-1) y substr (2, n), etc.

Usando el conocimiento de enumeración esto se convierte en un resumen:

n + 2 (n – 1) + 3 (n-2) + 4 (n-3) +….

que es Theta (n ^ 2)

Una solución más eficiente (probablemente la correcta) : la versión general de este problema algorítmico se resuelve utilizando un sufijo trie, como dice la descripción de la pregunta. Normalmente, los intentos de sufijo se construyen con caracteres, pero en este caso específico, construyamos un trie de sufijo PATRICIA / compact (árbol de sufijos – Wikipedia) que toma tiempo Theta (n) (usando el algoritmo de Ukkonen – Wikipedia). Ahora vamos a alimentar los tokens del corpus completo en esta estructura de datos. Un sufijo trie por aplicación. Ahora solo encuentra la subcadena más frecuente y cuántas veces ocurre se encuentra directamente en el trie 🙂 Cool eh? En general Theta (n) tiempo y espacio.

Ah, sí, y también, debes deshacerte de los artículos y conectores y otras cosas de una manera inteligente, por lo que probablemente necesites algo de PNL (pero eso está más allá del alcance de lo que sé). Si estás tratando de implementar esto por tu cuenta, solo usar el módulo de parte de voz de Python NLTK

Aclararé más si esto no está claro.

Supongo que, pero según las frases elegidas, parece que simplemente eligen las frases según su contenido de opinión.

Entonces

  1. Obtenga una muestra de calificaciones + comentarios
  2. correlacionar palabras con calificaciones – determinar el sentimiento de las palabras
  3. extraer frases y subfrases basadas en los sentimientos de palabras que contienen.

Análisis de sentimientos – Wikipedia

http://ace.cs.ohio.edu/~razvan/p

https://web.stanford.edu/~jurafs

Depende de la cantidad de pulgares “útiles” presionados por la mayoría de los usuarios

Puede encontrar un pulgar similar y un menú de opciones en el lado derecho de cada revisión; si hace clic en el menú de opciones, puede informar una revisión como spam

Esta es una de mis conjeturas más fuertes de cómo las revisiones de filtros de Play Store con mi experiencia hasta ahora. Por lo tanto, no tengo ninguna documentación oficial de Google para demostrar lo mismo.

More Interesting

¿Es posible escribir un método que muestre todos los elementos en una lista enlazada circular?

¿Para qué aplicaciones son especialmente adecuados los lenguajes de programación lógica? ¿Cuándo usarías un lenguaje como Prolog? ¿Cuáles son las aplicaciones más exitosas de la programación lógica?

Si estoy usando Java para la codificación competitiva, ¿tendré problemas de tiempo más tarde por parte de jueces en línea cuando me sumerja en estructuras de datos y algoritmos?

¿Cuál es la mejor manera de encontrar la media de una secuencia en cualquier momento?

¿En qué situación podemos usar el algoritmo EM para encontrar la probabilidad?

¿Es normal no entender el algoritmo de Dijkstra si no tengo ningún conocimiento previo sobre algoritmos?

¿Qué papel juega la comprensión de los algoritmos y las estructuras de datos en la construcción de proyectos, conseguir un trabajo y hacer su trabajo?

¿Por qué la complejidad temporal no devuelve el tiempo de ejecución exacto de un algoritmo?

Procesadores de señal digital (DSP): cuando alguien escribe un archivo en una tarjeta SD usando un bus spi, ¿cómo sabe dónde debería estar el comienzo de un nuevo archivo?

¿Cómo debo comenzar a aprender sobre estructura de datos y algoritmos?

¿Cuáles son los 30 algoritmos más importantes que debe conocer para la programación competitiva?

¿Se puede utilizar el algoritmo de red neuronal artificial en un conjunto de datos dinámicos como el clima o el tráfico?

¿Qué es la complejidad del algoritmo?

¿Se puede implementar una lista vinculada individualmente como una lista doblemente vinculada?

¿Cuál es la relación entre matrices y matrices variables de programas de computadora?