2009-11-07 10 views
5

por ejemplo, que había necesidad de crear algo como Google analizador de consultas de búsqueda para analizar expresiones tales como:cómo crear un analizador de consultas de búsqueda

volar senderismo o natación - "** caminar en las botas **" ** autor: ** ** hamish autor: ** Reid

o

casa en Nueva York un precio más $ 500000 con una piscina de natación

¿Cómo puedo incluso ir sobre empezar a construir algo por el estilo? cualquier buen recurso?

C# relevante, por favor (si es posible)

  • editar: esto es algo que yo debería de alguna manera ser capaces de traducir a una consulta SQL

Respuesta

5

¿Cuántas palabras clave tiene (como 'o', 'en', 'precio sobre', 'con')? Si solo tienes un par de ellos, te sugiero que vayas con el procesamiento de cadenas simples (expresiones regulares) también.

Pero si tiene más que eso, es posible que desee considerar la implementación de un real analizador para esas expresiones de búsqueda. Irony.net podría ayudarte con eso (me pareció extremadamente fácil de usar ya que puedes expresar tu gramática en forma casi de bnf directamente en el código).

+0

hay cientos de palabras clave, sin embargo, no todas se requieren a la vez. – b0x0rz

+0

No es un problema fácil de resolver, ya que tienes que asignar un 'significado' a esos cientos de palabras clave. ¿Y me pregunto cómo se vería el esquema de su base de datos? – andyp

+0

Excelente enlace para Irony.net, +1 – SRKX

-1

Creo que deberías hacer algo procesamiento de cadena No hay una manera inteligente de hacer esto.

Reemplace "OR" con el suyo o con el operador (por ejemplo ||). Por lo que sé, no hay una biblioteca para esto.

Le sugiero que vaya con expresiones regulares.

1

El proyecto Lucene/NLucene tiene funcionalidad para consultas booleanas y algunos otros formatos de consulta también. No conozco las posibilidades de agregar extensiones propias como autor en su caso, pero podría valer la pena verificarlo.

1

hay pocas maneras de hacerlo, dos de ellos:

  • de análisis utilizando grammar (útil para el lenguaje complejo)
  • de análisis utilizando regular expression y básica manipulaciones de cadenas (para un lenguaje más sencillo)

De acuerdo con su ejemplo, el lenguaje es muy básico, por lo que dividir la cadena de acuerdo con la palabra clave puede ser la mejor solución.

string sentence = "house in new york priced over $500000 with a swimming pool"; 
string[] values = sentence.Split(new []{" in ", " priced over ", " with a "}, 
           StringSplitOptions.None); 
string type = values[0]; 
string area = values[1]; 
string price = values[2]; 
string accessories = values[3]; 

Sin embargo, algunos problemas que pueden surgir son: cómo verificar si la sentencia se encuentra en la forma esperada? ¿Qué sucede si algunas de las palabras clave pueden aparecer como parte de los valores?

Si este es el caso, encontrará que hay algunas bibliotecas que puede utilizar para analizar la entrada utilizando una gramática definida. Dos de estas bibliotecas que funcionan con .Net son ANTLR y Gold Parser, ambas son gratuitas. El principal desafío es definir la gramática.

+0

que le gusta el ORO hasta ahora. – b0x0rz

1

Una gramática funcionaría muy bien para el segundo ejemplo que dio, pero la primera (cualquier palabra clave de orden/cadenas de comandos) se manejaría mejor utilizando Split() y una clase para manejar las diversas palabras clave y comandos. Tendrá que hacer el procesamiento inicial para manejar las regiones citadas antes de la división (por ejemplo, reemplazar espacios dentro de las regiones citadas con un carácter raro/no utilizado).

Los comandos ":" son fáciles de encontrar y se extraen de la cadena de búsqueda para procesarlos una vez completada la división. Simplemente atraviesa la matriz mirando.

Las palabras clave +/- también son fáciles de encontrar y se agregan a la consulta sql como cláusulas AND/AND NOT.

El único lugar donde puede tener problemas es con el "o", ya que tendrá que definir cómo se maneja. ¿Qué pasa si hay múltiples "o" s? Pero el orden de las palabras clave en la matriz es el mismo que en la consulta, por lo que no será un problema.

Cuestiones relacionadas