2010-05-07 9 views
5

Digamos que tengo tres modelos/tablas: operating_systems, words y programming_languages:¿Cómo hacer un motor pequeño como Wolfram | Alpha?

# operating_systems 
name:string created_by:string family:string 
Windows  Microsoft   MS-DOS 
Mac OS X Apple    UNIX 
Linux  Linus Torvalds UNIX 
UNIX  AT&T    UNIX 

# words 
word:string defenitions:string 
window  (serialized hash of defenitions) 
hello  (serialized hash of defenitions) 
UNIX  (serialized hash of defenitions) 

# programming_languages 
name:string created_by:string example_code:text 
C++   Bjarne Stroustrup #include <iostream> etc... 
HelloWorld Jeff Skeet  h 
AnotherOne Jon Atwood  imports 'SORULEZ.cs' etc... 

Cuando un usuario busca en hello, el sistema muestra el defenitions de 'hola'. Esto es relativamente fácil de implementar. Sin embargo, cuando un usuario busca UNIX, el motor debe elegir: word o operating_system. Además, cuando un usuario busca windows (letra minúscula 'w'), el motor elige word, pero también debe mostrar Assuming 'windows' is a word. Use as an <a href="etc..">operating system</a> instead.

¿Alguien puede señalarme en la dirección correcta al analizar y elegir el tema de la consulta de búsqueda? Gracias.


Nota: que no necesita ser capaz de realizar cálculos como WA puede hacer.

Respuesta

2

tener una nueva tabla de índices llamado terms que contiene una versión tokenizada de cada término válido. De esta forma, solo tienes que buscar una tabla.

# terms 
Id Name  Type    Priority 
1 window word    false 
2 Windows operating_system true 

Luego puede ver qué tan cerca coincide el término de búsqueda de los usuarios. Es decir. "Windows" sería una coincidencia del 100% con 2, así que asuma eso, pero una coincidencia cercana con 1 también, así que sugiéralo como una alternativa. Tienes que escribir tu propio motor de reglas que decidió qué tan cerca coincide una palabra (es decir, qué se asume con "Windows" frente a "Windows"?) El campo Priority podría ser el decisor final si el motor de reglas no puede decidir, y En teoría, podría ser impulsado por la actividad del usuario para que aprenda a qué se refieren los usuarios.

+0

Gracias, lo echaré un vistazo. –

+0

¡Pude hacer que funcionara! Yo uso parciales para mostrar datos. Una parcial por tema –

1

Y qué tal hacer una caché en forma de una tabla de base de datos donde estarían todas las palabras clave.

La consulta de búsqueda sería algo como esto:

SELECT * FROM keywords WHERE keyword = '<YourKeyWord>' /* mysql */ 

las palabras clave tabla contendría algún tipo de referencias a sus módulos.

La ventaja de esta aprobación es, por supuesto, la búsqueda rápida.

Es posible utilizar dos consultas con el fin de simular el comportamiento de pedir:

  • La concordancia exacta (no hay problema en MySQL)
  • búsqueda que ignore la
0

Wolfram Alpha es mucho más complejo que tu ejemplo ... No estoy seguro de su funcionamiento interno (he leído muy poco sobre él), pero creo que es un muy grande y complejo automated inference system. Son bastante triviales de implementar (Prolog es básicamente de propósito general, puedes poner cualquier información que necesites), pero son muy difíciles de hacer útiles.

Cuestiones relacionadas