Juliet

Vortaro

Mar 10th, 2011
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 3.56 KB | None | 0 0
  1. module EoTranslator.Translator
  2.     open System
  3.     open System.Net
  4.     open System.IO
  5.     open System.Text
  6.     open System.Text.RegularExpressions
  7.     open System.Threading
  8.  
  9.     type result =
  10.         {  
  11.             // line 1
  12.             id1 : int;
  13.             word : string;
  14.             structure : string;
  15.             baseword : string;
  16.             prioritato : string;
  17.             partOfSpeech : string;
  18.            
  19.             // line2
  20.             id2 : int;
  21.             langCode : string;
  22.             lang : string;
  23.             definition : string;
  24.         }
  25.  
  26.     type translation =
  27.         | FromEo
  28.         | ToEo
  29.  
  30.     let formatOutput s =
  31.         let lines =
  32.             [
  33.                 let sr = new StringReader(s)
  34.                
  35.                 let line = ref ""
  36.                 while (line := sr.ReadLine(); line.Value <> null) do
  37.                     let line' = line.Value.Trim()
  38.                     if line' <> "" then
  39.                         yield line'
  40.             ]
  41.        
  42.         match lines with
  43.         | [] -> ("", [])
  44.         | lines ->
  45.             let header, rest =
  46.                 match lines with
  47.                 | [] -> "", []
  48.                 | x::xs ->
  49.                     if x.Split('\t').Length = 1 then x, xs
  50.                     else "", x::xs
  51.                    
  52.             let rec parse = function
  53.                 | [] -> []
  54.                 | (line1::line2::xs : string list) ->
  55.                     let getIndexOrDefault (arr : string[]) index defaultValue =
  56.                         if (index < arr.Length) then arr.[index]
  57.                         else defaultValue
  58.                     let parts1 = line1.Split('\t')
  59.                     let parts2 = line2.Split('\t')
  60.                     if parts1.Length >= 5 && parts2.Length >= 4 then
  61.                         {
  62.                             id1 = int(getIndexOrDefault parts1 0 "0");
  63.                             word = getIndexOrDefault parts1 1 "";
  64.                             structure = getIndexOrDefault parts1 2 "";
  65.                             baseword = getIndexOrDefault parts1 3 "";
  66.                             prioritato = getIndexOrDefault parts1 4 "";
  67.                             partOfSpeech = getIndexOrDefault parts1 5 "";
  68.                            
  69.                             id2 = int(getIndexOrDefault parts2 0 "0");
  70.                             langCode = getIndexOrDefault parts2 1 "";
  71.                             lang = getIndexOrDefault parts2 2 "";
  72.                             definition = getIndexOrDefault parts2 3 ""
  73.                         }::parse xs
  74.                     else parse xs
  75.                 | x::xs -> parse xs
  76.             header, parse rest
  77.        
  78.     let search language text =
  79.         let delingvo, allingvo =
  80.             match language with
  81.             | FromEo -> "eo", "en"
  82.             | ToEo -> "en", "eo"
  83.         let randomString = Guid.NewGuid().ToString();
  84.         let text' =
  85.             Regex.Replace(text, @"[\(\)!,.;()""_~]", "")
  86.             |> Uri.EscapeDataString
  87.         let url =
  88.             sprintf
  89.                 @"http://en.lernu.net/cgi-bin/serchi.pl?modelo=%s&delingvo=%s&allingvo=%s&prioritato=0&starto=0&bobeloid=undefined&dishaki=true&hazardo=%s"
  90.                 text'
  91.                 delingvo
  92.                 allingvo
  93.                 randomString
  94.         use client = new System.Net.WebClient()
  95.         let bytes = client.DownloadData(Uri(url))
  96.         let rawOutput = Encoding.UTF8.GetString(bytes)
  97.         let header, results = formatOutput rawOutput
  98.         rawOutput, header, results
Advertisement
Add Comment
Please, Sign In to add comment