martedì 1 marzo 2011

Scalaz: ricerche intelligenti con Burkhard-Keller

Un'interessante applicazione di scalaz è l'implementazione dell'algoritmo di Burkhard-Keller, utile per effettuare ricerche veloci basate sulla distanza. Ad esempio:

import scalaz._
import Scalaz._

object DoQuery {
   def main(args: Array[String]) =  {
       val found = find(args(0))
       
       println( found.mkString("Forse volevi dire: ", 
                               " oppure ", "") )
   }
   
   def find( m : String) = {
       // dizionario
       val dictionary = List("Java", "Scala", "Haskell").bktree

       // cerca nel dizionario gli elementi con distanza minore o uguale a 2
       dictionary |=| (m, 2)
   }
}


che, lanciato con input Skala restituisce:


[info]
[info] == run ==
[info] Running bkTreeExample.DoQuery Skala
Forse volevi dire: Scala
[info] == run ==
[success] Successful.


Sarebbe interessante capire se e come si possa integrare con ScalaQuery per interagire con un database.

Nessun commento: