2012-09-20 19 views
9

Esta es mi primera publicación en StackOverflow, así que me disculpo si falta la información correcta.Clasificar o buscar palabras clave que coincidan con una cadena o frase de lenguaje natural

Escenario.

Estoy en el proceso de alejamiento de la API del tiempo de Google para el servicio meteorológico BOM (Australia). Me las arreglé para obtener los datos meteorológicos de la lista de materiales muy bien utilizando los lectores de secuencias, etc, pero lo que estoy atascado es el icono de la imagen que coincide con el pronóstico diario.

Lo que hice con la antigua API de Google Weather fue bastante brutal pero funcionó. La API del clima de Google solo emitió un par de tipos de pronósticos diferentes que pude unir en una cadena que podría usar en una imageURL.

Ejemplo de lo que hice con la API de Google ... El tiempo

imageDay1.ImageUrl = "images/tiempo /" + lbWeatherDay1Cond.Text.Replace (" " String.Empty) +" .png ";

"Soleado" = mostlysunny.png

"Sunny" = sunny.png

"Posibilidad de lluvia" = chanceofrain.png

"duchas" = showers.png

"despejado" = partlycloudy.png

Hubo, por ejemplo, 15 diferentes opciones posibles para el pronóstico diario.

Los problemas que tengo ahora y con la lista de materiales (Servicio Meteorológico Australia) es esto ...

Posible ducha de la mañana

ducha o dos, despejando después

Así que muchos miles más. ... no hay un estándar.

Lo que espero es que es posible que algunas de las mentes geniales aquí para crear una cadena de una palabra clave dentro de esta cadena? Algo como "Showers" para "Showers.png" o algo un poco más complejo para reconocer "Chance of Showers" como "Chanceshowers.jpg" y mantener "Ducha o dos" como "Showers.png".

Soy fácil con cualquier idea o solución (con suerte en C#). Siempre que sea muy liviano (el proceso debe repetirse para el pronóstico de 5 días) y puede capturar casi cualquier escenario ...

En este momento, sigo con String.Replace, después de String .Sustituir, después de la opción Cadena.Reponer ... Lo hará por ahora, pero no puedo pasarlo a producción de esta manera.

¡Saludes a todos!

Trent

+3

¿Intentó con ** una tabla de búsqueda ** (extraerá la primera coincidencia) donde la clave es una expresión regular? Si no hay un estándar, no puede confiar en un algoritmo bien definido. Una opción bonita (y más robusta) puede ser un algoritmo ** Bayesiano ** (si realmente no puede gestionar esto de otra manera). –

+1

+1 Para la lista de Regexes. – Rotem

+1

Arianao, gracias por la sugerencia, sin embargo, no soy el mejor codificador del mundo y no tengo ni idea de cómo comenzar con una tabla de búsqueda o un algoritmo bayesiano. Si puede dirigirme a algunos artículos de MSDN, etc., estoy seguro de que podría aprenderlo bastante rápido :). ¡Gracias por la ayuda! –

Respuesta

3

me di cuenta en los comentarios que está tratando de salir de la tabla de búsqueda de expresiones regulares, que sólo podría hacer lo suficiente para resolver el problema. Sin embargo, voy a ampliar lo que Adriano mencionó acerca de una solución Bayesiana más robusta.

Este es un problema relacionado con el aprendizaje automático y la IA. Implica un poco de procesamiento del lenguaje natural, por ejemplo, cómo Google intenta interpretar lo que los usuarios le preguntan o cómo funcionan los filtros de spam de correo.

Sebastian Thrun describe un sistema simple e interesante en los siguientes videos que formaban parte de un curso en línea. Comienza describiendo un método básico mediante el cual un algoritmo puede aprender a clasificar una colección de palabras (como las de un correo electrónico) como "Spam" o "No Spam".

(La mayoría de los videos son realmente corto.)

  1. Spam Detection - Quiz Answer
  2. Probability of Spam - Quiz Answer
  3. Maximum Likelihood - Quiz Answer
  4. Relationship to Bayes Networks - Quiz Answer
  5. Classification Quiz - Quiz Answer
  6. Classification 2 Quiz - Quiz Answer
  7. Classification 3 Quiz, a contrived example
  8. Quiz Answer & Laplace Smoothing - Quiz Answer
  9. Smoothed Classification Quiz-Quiz Answer
  10. Final Quiz - Quiz Answer

Este método bayesiano es robusto frente a la entrada dinámica y es razonablemente rápido en el aprendizaje. Luego, después de consumir suficientes datos de entrenamiento, solo necesitaría guardar una tabla de probabilidades de búsqueda y hacer una serie de cálculos aritméticos en tiempo de ejecución.

Con esta base, puede aplicar el mismo método para varias clasificaciones, p. Ej. uno para cada imagen del clima

-2
$api_string = "Mostly sunny"; 
$image = "default.png"; 

switch($api_string) 
{ 
    case "Mostly sunny": 
     $image = "mostlysunny.png"; 
    break; 
    case "showers": 
     $image = "showers.png" 
    break; 
} 

etc

+1

No creo que realmente quiera manejar una declaración de cambio con unos pocos miles de casos (variables) ... –

+0

Sí, solo estoy viendo esto y esto sería lo mismo si estuviera haciendo declaraciones If if y else if? –

1

Si ya está capturando la página web, ¿no podría simplemente capturar el segmento donde colocaron la imagen y obtener la imagen de esa manera? Si hay un texto en claro de "parcialmente soleado", podrías simplemente capturar esa división y solo usar tus propias imágenes. Una red bayesiana solo para raspar el clima suena increíblemente dolorosa.

+0

echando un vistazo a brisbane on bom, id haga lo mismo. http://www.bom.gov.au/qld/forecasts/brisbane.shtml –

Cuestiones relacionadas