Pregunta

Llevamos un registro de cadenas de agente de usuario en nuestro sitio web. Quiero hacer algunas estadísticas sobre ellos, para ver cuántos usuarios de IE6 hemos (así que sabemos lo que tenemos que desarrollar en contra), y también el número de usuarios móviles que tenemos.

Así que tenemos entires registro como este:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FunWebProducts)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FunWebProducts; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727)

Y lo ideal sería bastante ordenado a ver todas las cadenas con sentido '', lo que probablemente sólo significa cadenas de más de una cierta longitud. Por ejemplo, me gustaría ver cuántas entradas se FunWebProducts en ella, o .NET CLR o .NET CLR 1.0.3705 - pero no quieren ver cuántos tienen un punto y coma. Así que no estoy necesariamente en busca de cadenas únicas, pero todas las cadenas, incluso sub-conjuntos. Por lo tanto, me gustaría ver el recuento de todos Mozilla, sabiendo que esto incluye los recuentos de Mozilla/5.0 y Mozilla/4.0. Sería bonito si había una pantalla anidada para esto, a partir de las cadenas más cortas, y trabajar su camino hacia abajo. Algo tal vez como

4,2093 Mozilla
 1,093 Mozilla/5.0
    468 Mozilla/5.0 (Windows;
     47 Mozilla/5.0 (Windows; U 
 2,398 Mozilla/4.0

Esto suena como una tarea informática. ¿Cómo sería esto se llama? No existe algo como esto por ahí, o hacer que escribo mi propia?

¿Fue útil?

Solución

Se busca a una común problema, o, dado el ejemplo específico anterior, un problema prefijo más largo común, que puede ser abordado con un trie .

Sin embargo, al pasar de su ejemplo anterior, es probable que ni siquiera tiene que ser eficiente en esto. En su lugar, simplemente:

  1. cadenas tokenize en algún subconjunto puntuacion, como [ ;/]

  2. Guardar cada prefijo único de sin embargo muchos tokens, en sustitución de los delimitadores originales

  3. Para cada prefijo, obtener un recuento de las cuales registra coincide y guardar ese

Otros consejos

Si se rompe para arriba en el nombre principal (parte antes de los paréntesis de apertura), y luego almacenar cada parte separada por punto y coma como un registro hijo, usted podría hacer lo que desea el análisis. Por ejemplo, almacenarla en una base de datos relacional:

BrowserID   BrowserText
---------   -----------
1           Mozilla/4.0
2           Mozilla/5.0

FeatureID   FeatureText
---------   -----------
1           compatible
2           MSIE 7.0
3           Windows NT 5.1
4           FunWebProducts
5           .NET CLR 1.0.3705
6           .NET CLR 1.1.4322
7           Media Center PC 4.0
8           .NET CLR 2.0.50727

A continuación, ingrese referencias al navegador y partes y se puede hacer cualquier tipo de análisis que desea.

¿Qué pasa con el uso de una expresión regular para analizar la cadena de agente de usuario en sus partes componentes relevantes? La especificación básica para una cadena de agente de usuario es '[name] / [version]' o '[name] [version]'. Con esta información podemos usar una expresión regular como ([^\(\)\/\\;\n]+)([ ]((?=\d*\.+\d*|\d*_+\d*)[\d\.Xx_]+)|[/]([^\(\)\/; \n]+)) para obtener conjuntos partido en el que el primer partido en un conjunto es la [name] y el segundo partido en un conjunto es la [version]. Por supuesto, usted tendrá que quitar los espacios y / desde el segundo partido de la serie, o modificar la expresión regular para usar de búsqueda hacia atrás (que varios sabores de expresiones regulares no son compatibles, por lo que no es necesario incluirla aquí).

Después de obtener todas estas tuplas puede manipular y contarlos como quiera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top