2011-09-04 19 views
6

¿Solo me pregunto si hay un conjunto de patrones de diseño para la manipulación compleja de cadenas?Patrones de manipulación de cadenas

Básicamente, el problema que estoy tratando de resolver es que necesito para ser capaz de leer en una cadena, como el siguiente:

"[name_of_kicker] parece que va a hacer una patada espacio libre, sino que está bajo algunas reales presión de los jugadores [name_of_defending_team]. Él recibe un [length_of_kick] patada de distancia, pero se desplaza al tacto en el pleno ".

o

"[name_of_kicker] recibe balón desde [name_of_passer] y pone en marcha la bomba. Buen contacto [name_of_kicker] realmente ha hecho, se ha dado un par de [name_of_attacking_team] cazadores de tiempo suficiente para meterse debajo de la pelota a medida que baja ".

Y reemplace cada "tag" con un posible valor y compruebe si la cadena es igual a otra cadena.

Así que, por ejemplo, cualquier etiqueta que represente un jugador que necesite ser capaz de reemplazar con cualquiera de los 22 valores de cadena que representan un jugador. Pero también debo ser capaz de asegurarme de haber recorrido cada combinación de jugadores para las diversas etiquetas, que puedo encontrar en una cadena. NOTA, las etiquetas enumeradas en las 2 muestras anteriores, no son las únicas etiquetas posibles, hay muchas otras que podrían aparecer en cualquier oración.

He intentado crear una carga de bucles anidados para ir a través de la colección de reproductores, etc. e intento reemplazar las etiquetas cada vez, pero con muchas posibilidades de etiquetas, solo estaba creando un ciclo anidado dentro otro, y se ha vuelto inmanejable, y también sospecho que es ineficiente, ya que necesito recorrer más de 1,000 cadenas básicas como las muestras anteriores, y reemplazar etiquetas de diferencia con jugadores, etc. para cada una ...

cualquier patrón de manipulación de Cadenas que pueda analizar, o alguien tiene alguna solución posible para resolver un problema como este.

Respuesta

1

En primer lugar, para responder a su pregunta.

¿Preguntándome si hay un conjunto de patrones de diseño para la manipulación compleja de cadenas?

No

realmente. Existen algunas técnicas, pero apenas califican como patrones de diseño . Las dos técnicas que vienen a la mente son la expansión de la plantilla y la coincidencia de patrones.

Lo que está haciendo actualmente/proponiendo hacer es una forma de expansión de la plantilla. Sin embargo, los motores de plantillas típicos no admiten la expansión combinatoria que estás tratando de hacer, y como esperas anticipar, parece ser una forma ineficiente de resolver tu problema.

Una mejor técnica parece ser coincidencia de patrones. Vamos a tomar el primer ejemplo, y convertirla en un patrón:

"(Ronaldinho | Maradona | Peter Shilton | Jackie Charlton) busca hacer una patada espacio libre, pero está bajo cierta presión real desde el (Everton | real Jugadores de Madrid | Adelaide United) recibe un ([0-9] + metro) de patada, pero se desvanece al máximo ".

Lo que he hecho es insertar todas las alternativas posibles en la pseudo-plantilla, para convertirla en una expresión regular. Ahora puedo compilar esta expresión regular a java.util.Pattern y usarla para que coincida con su lista de otras cadenas.


Habiendo dicho eso, si está tratando de hacer esto para "analizar" el texto, no califico sus posibilidades de éxito. Creo que sería mejor ir por la ruta NLP.

+0

I ' Me voy a fijar en la coincidencia de patrones, como en el ejemplo. Te dejaré saber cómo va ... –

+0

Sí, fui con la coincidencia de patrones usando Regex, y sería maravilloso lo que necesito que haga, gracias. –

1

Lo que describes se parece un poco a los motores de plantillas que se utilizan.

Dos de los más populares para Java son:

Pero hay many, many más, por supuesto.

0

mi granito de arena, Como usted indicó "Sólo estaba creando uno anidado bucle dentro de otro, y que ha perdido el control,"

Usted está buscando en la dirección equivocada mi amigo hay toda universo de soluciones al problema al que se enfrenta, simplemente conozca como motor de reglas. Existen varios tipos de motores de reglas (motores de reglas de negocio, motores de plantillas web, etc.) pero para el requisito anterior sugiero motores de reglas de negocio.

no puedo comentar sobre cuál usar, ya que depende de

  1. multi-threading.
  2. Código abierto/comercial.
  3. carga factor tiempo/Procesamiento etc.

creo que sirve

http://ratakondas.blogspot.in/2012/06/business-rules-engines-white-paper.html [Leer la sección de resumen que da mejor consejo.]

https://en.wikipedia.org/wiki/Business_rules_engine#Types_of_rule_engines https://en.wikipedia.org/wiki/Comparison_of_web_template_engines

Bienvenido a la mundo de los motores de reglas :)

Cuestiones relacionadas