translate-2010.1.24: src/Text/Language/Detect.hs
{-# LANGUAGE DeriveDataTypeable #-}
module Text.Language.Detect (detect,detectCode) where
import Text.Language.Internals
import Text.JSON.Generic
import Prelude hiding ((.), (-))
-- http://ajax.googleapis.com/ajax/services/language/detect?v=1.0&q=Hello+World
{-
{"responseData"=>{"language"=>"en","isReliable"=>false,"confidence"=>0.114892714},
"responseStatus"=>200,
"responseDetails"=>nil}
-}
-- Datatypes
data RText = RText
{
language :: String,
isReliable :: Bool,
confidence :: Double
}
deriving (Eq, Show, Data, Typeable)
data RGood = RGood
{
responseData :: RText
}
deriving (Eq, Show, Data, Typeable)
base_url :: String
base_url = "http://ajax.googleapis.com/ajax/services/language/detect"
detect_api :: String -> String
detect_api what = google_api base_url [("v", "1.0"), ("q", what)]
-- | Returns the language code associated with the given text
detectCode :: String -> IO (Maybe String)
detectCode what = do
r <- curl - detect_api what
case r of
Nothing -> return - Nothing
Just x ->
let status = x.decodeJSON
in
if status.responseStatus == 200
then do
let rgood = x.decodeJSON
return - Just - rgood.responseData.language
else do
return Nothing
-- | Returns a triple where the first component is the language code associated with
-- given text, the second is a boolean representing whether or not the detection interval
-- believes the language code is reliable for the given text, and the third is a
-- numeric value between 0-1.0 that represents the confidence level in the language code
-- for the given text.
detect :: String -> IO (Maybe (String,Bool,Double))
detect what = do
r <- curl - detect_api what
case r of
Nothing -> return - Nothing
Just x ->
let status = x.decodeJSON
in
if status.responseStatus == 200
then do
let rgood = x.decodeJSON
return - Just - (rgood.responseData.language,
rgood.responseData.isReliable,
rgood.responseData.confidence)
else do
return Nothing