A2A
Puedo darte algunos puntos de partida, pero no puedo decirte cómo hacerlo específicamente. Probablemente podría decírtelo en persona, con una pizarra, a un nivel de 10,000 pies, y suponiendo que tenga años de experiencia y / o una maestría o un doctorado.
Creo que tienes un malentendido fundamental de gran parte de lo que entra en algo como un motor de búsqueda.
- ¿Cuál es la lógica detrás de los algoritmos de ajuste de aprendizaje automático?
- ¿Qué es una primera búsqueda amplia?
- ¿Cuál es la aplicación práctica de un gráfico no ponderado?
- ¿Debo aprender a clasificar?
- ¿Pueden los algoritmos de aprendizaje de refuerzo actuales elegir múltiples acciones dado el estado actual?
Solo ser un programador no es suficiente para permitirte construir uno. Hay mucha arquitectura e ingeniería, lo que significa que no se trata solo de escribir código.
Sin entrar en muchos detalles, al más alto nivel, un motor de búsqueda es en realidad un montón de software diferente que funciona en conjunto:
- Descubrimiento: esto generalmente lo realiza un rastreador web o las personas que envían su propia información con la esperanza de que aparezca en los resultados de búsqueda
- Indexación: aquí es donde organiza punteros a los datos que le interesan según cómo espera que la gente quiera buscar esos datos; piense en ello como un anuncio de Bed, Bath y Beyond: no puede ver toda la tienda, solo un resumen general
- Recuperación: esto es lo que todos consideran el motor de búsqueda, ya que es la parte con la que hablan cuando quieren encontrar algo
Como está tratando de buscar palabras en posiciones específicas, necesitaría modificar la forma en que piensa las cosas.
Lo primero que debe saber es el índice.
El índice es en realidad casi todas las búsquedas que puedes hacer, ya hecho.
Dado que es imposible revisar todos los datos en Internet en un período de tiempo razonable como reacción a alguien que solicita una búsqueda, debe separar la parte de indexación de la parte de recuperación .
Desea que la parte de recuperación sea lo más rápida posible, lo que significa que la precalcula durante la fase de indexación y luego “simplemente” busca las cosas en el índice.
Pongo citas de miedo alrededor del “justo”, porque no es tan simple: también debe tener un índice para el índice: es tan grande que ni siquiera podría pasar por el índice en un tiempo razonable.
Veamos su problema específico en particular:
“Busca algunas palabras en posiciones específicas”
Esto es lo que se llama un problema tipo ” Ver y decir “; lleva el nombre del juguete de Mattel inventado en 1965, y se ve así:
La forma en que funciona es que apuntas la flecha del granjero a un animal, sacas la cuerda con el anillo para enrollarla, y cuando la cuerda se vuelve a meter en el juguete, el juguete te dice lo que cada animal “dice”.
Terminas con muchas oraciones que se ven así:
La vaca dice mooooooo!
El perro dice ladrar ladrar ladrar!
¡La rana dice ribbit!
…
En otras palabras: oraciones de la forma:
¡El _______ dice _______ !
¿Qué pasaría si quisiera buscar en todo Internet todas las oraciones de esa forma, unas con ” algunas palabras en ciertas posiciones “?
Eso es difícil.
El problema es que tienes que hacer un procesamiento de lenguaje natural. Esto es necesario porque debe ser capaz de reconocer cosas válidas que pueden estar en cualquier lugar en blanco, y debe restringir las oraciones a oraciones de esa forma.
Digamos que deseaba poder buscar todas las oraciones de esa forma, y tenía que rastrear todo Internet y crear un índice para eso. ¿Cómo sería ese índice?
Bueno, no puede ser un simple trie de palabras.
Cualquier oración puede ser representada como un trie; Aquí hay un ejemplo muy simple:
Este es un trie simple que comienza con la palabra “I”. En el primer nivel, tiene su palabra de inicio, luego en el segundo nivel, tiene todas las palabras posibles que pueden seguir a “I”, y así sucesivamente.
Así que juguemos un poco con el ejemplo “como Elvis” …
_______ me gusta Elvis
Pero digamos que queremos igualar esto. Además del ejemplo en la imagen, también tenemos que coincidir:
me gusta
odio
asesinado
amor
pintado
lavado
izquierda
casado
descubierto
…
Hay muchas palabras que caben en el espacio en blanco. Entonces, ¿qué es una estructura de datos que se parecería al patrón que estamos tratando de hacer coincidir?
Resulta que hay muchas opciones, y es posible hacerlo de la manera que lo desee, pero que en realidad es un problema muy complejo: es el mismo problema que hacer que las computadoras entiendan a los humanos.
Solo que es peor que eso, porque en el reconocimiento del lenguaje hablado, es bastante lineal: la gente va a decir las palabras en orden, por lo que podría usar un trie … sobre todo. Pero si la palabra que puso en blanco no tiene sentido o es improbable, aumenta la dificultad, por ejemplo:
loro ← ” Yo loro como Elvis ”
← “Zanahoria como Elvis ”
← ” Yo canto como Elvis ”
Pero date cuenta de que también obtendrás cosas como esta:
… y así Billy y yo éramos como Elvis para nuestro propio grupo de fanáticos.
Ahora el problema es aún más difícil: debe ser capaz de reconocer la diferencia entre una oración completa y un fragmento de oración.
El término técnico para la relación entre palabras en este contexto es “asociatividad”.
Esto es algo realmente difícil de representar en una estructura de datos. Es factible, pero no de una manera tradicional.
Peor aún, en este punto, incluso si resolvemos el índice de esta oración de cuatro palabras con un espacio en blanco … solo tenemos una solución para una oración.
Ahora multiplique eso por todas las oraciones posibles, con una palabra reemplazada por un espacio en blanco que se puede completar con cualquier palabra.
Y luego volvamos a su pregunta original:
… textos en internet que tienen algunas palabras en posiciones específicas
Eso implica más de un espacio en blanco. Ahora tiene todas las oraciones posibles, con cualquier palabra en la oración potencialmente reemplazada por un espacio en blanco.
Y ahora estamos llegando al punto en que será difícil calcular previamente un índice.
Y como he estado discutiendo esto …
Lo he estado haciendo en inglés.
Ahora agregue francés; Alemán; Chino; Japonés; Tagalo Farsi; Español; Hebreo; Italiano; Holandés; Coreano; Ruso; Azerbaiyano; Tamil; Devanagari; Griego; Africaans; etc.
No es un problema fácil de resolver.
No es algo que alguien pueda simplemente “mostrarte”.
Pero te animo a que continúes tus estudios.