Groovy web console

subscribe to the feed Subscribe
to this
site
Spanish Date Translation (via #groovywebconsole)
tweet this snippet Tweet
this
script

Spanish Date Translation

Published 3 weeks ago by will jones
Actions  ➤ Edit in console Back to console Show/hide line numbers View recent scripts
def utterances = ['Quiere que le diga la fecha, el 26 de Enero',                 '28 de diciembre por la agencia de viajes price travel.\n El 28 hice un cargo de 1384 pesos.',
                 'Sabado 28 de enero\n Creo que fue por medio de un pago de',
                 'El viernes en la noche compre un boleto electronico en la pagina oficial, pero marco error en la pagina, y me cobro a la tarjeta, pero no me dio mi boleto. ',
                 'El s?ado en la noche compre un boleto electronico en la pagina oficial, pero marco error en la pagina, y me cobro a la tarjeta, pero no me dio mi boleto. ',
                 'si es el d? 23 en offit,',
                 'hoy, primero de febrero del 2017',
                 'El dia lunes paso\n si',
                 'Hace 20 minutos',
                 'Claro que si se?rita, estos movimientos son del d? 12 de diciembre del 2016',
                 'el 31 de diciembre del 2016',
                 'El 17 de enero',
                 'No, fue el dia primero.',
                 'fue el d? de hoy',
                 '6 de febrero',
                 'fue el d? jueves',
                 '8 de febrero',
                 'S?fue el d? de ahora',
                 '3 de febrero',
                 'hace 12 horas',
                 'hoy',
                 'ayer'
]

def day
def month
def year

def simpleDateFormat = new java.text.SimpleDateFormat("dd/MM/yyyy")
def transactionDate = null

def date = new Date()

for (utterance in utterances){
def matcher = utterance =~ /(?i)(?s).*((?<day>\b\d{1,2}) de (?<month>[a-z]+))( del (?<year>2\d{3}))?.*/
  println utterance
  if ( matcher.matches() ) {
      day = matcher.group('day')
      month = matcher.group('month')
      year = matcher.group('year')

      if (day != null){
        if (month != null && year == null){
          year = '2017'
        }
      }

      fmt = new java.text.SimpleDateFormat("MMM", new Locale("es", "MX"))
      //println fmt.format(Date.parse("yyyy-MM-dd", "2016-12-12"))
      month = fmt.parse(month).format('MM')

      java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("MM")
      def currMonth = df.format(date)

      if (month > currMonth){
          year = year.toInteger()  - 1
      }

      transactionDate = simpleDateFormat.parse("$day/$month/$year")

  }
  else {
    def relativeMatcher = utterance =~ /(?i)(?s).*(?<lengthOfTime>\b\d{1,2})?\W?(?<timeIncrement>minuto|hora|hoy|ayer).*/

    if (relativeMatcher.matches()){
      def lengthOfTime = relativeMatcher.group('lengthOfTime')
      def timeIncrement = relativeMatcher.group('timeIncrement')

        if (timeIncrement != null){
          if (lengthOfTime != null && timeIncrement == 'hora'){
            def hour = new java.text.SimpleDateFormat("h")
            hour = hour.format(date)

            if ((hour.toInteger - lengthOfTime) < 0 ){
              transactionDate = simpleDateFormat.format(date.minus(1))
            }
          }
          else if (timeIncrement == 'ayer'){
            transactionDate = simpleDateFormat.format(date.minus(1))
            transactionDate = simpleDateFormat.parse(transactionDate)
          }
          else {
            transactionDate = simpleDateFormat.format(date)
            transactionDate = simpleDateFormat.parse(transactionDate)
          }
        }
    }
    else {
      def dayMatcher = utterance =~ /(?i)(?s).*(?<dayOfWeek>lunes|martes|mi?coles|jueves|viernes|s?ado|domingo).*/
      if (dayMatcher.matches()){
        def dayOfWeek = dayMatcher.group('dayOfWeek')

        fmt = new java.text.SimpleDateFormat("EEE", new Locale("es", "MX"))
        day = fmt.parse(dayOfWeek).format('u')

        java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("u")
        def currDay = df.format(date)

        def cal = Calendar.instance
        cal.time = date

        if (currDay < day){
          cal.add(Calendar.DAY_OF_WEEK, (((currDay.toInteger() - day.toInteger()) + 7) * -1))
        }

        transactionDate = (cal.time).format('dd/MM/yyyy')
        transactionDate = simpleDateFormat.parse(transactionDate)

      }
    }
  }

  if (transactionDate != null){
    println transactionDate
    transactionDate = null
  }
  else{
    println "No MATCHES"
  }
  println "----------------------------------------------"
}