anchor.diff:          |> Seq.map (fun m -> m.Value)
           |> Set.ofSeq
   
  +    // given a requested value and the result
  +    // return a value of 1.0 for a perfect match,
  +    // - 1.0 for a bad match
  +    let closeness (tolerance:float) requested result = 
  +        1. - 2. * (abs (requested - result) / ((1.0 - tolerance) * max requested result))
  +
  +    (* 
  +    // illustration
  +    let x = 10.0
  +    let tol = 0.25
  +    // this is always -1.0, regardless of tol
  +    closeness tol x (x * tol)     
  +    closeness tol x (x / tol)     
  +    *)
  +
  +    let spaceOrDash :Parser<unit,unit> = 
  +        (skipChar '-') <|> spaces 
  +
  +    let pFraction : Parser<float,unit> = 
  +        tuple3 
  +            (pint32 .>> spaceOrDash)
  +            (pint32 .>> spaces .>> pstring "/" .>> spaces) 
  +            pint32
  +        |>> fun (x,y,z) -> float x + float y / float z
  +
  +    // basic units / no fractions
  +
  +    let pVolts : Parser<float,unit> = pfloat .>> spaceOrDash .>> (pstringCI "volt" <|> pstring "V" .>> (eof <|> spaces1))
  +    let pWatts : Parser<float,unit> = pfloat .>> spaceOrDash .>> (pstringCI "watt" <|> pstring "W" .>> (eof <|> spaces1))
  +
  +    let findMeasure (parser:Parser<float,unit>) (text:string) =
  +        let last = text.Length - 1
  +        let rec search i =
  +            if i = last 
  +            then None
  +            elif (Char.IsDigit text.[i])
  +            then
  +                match run parser (text.Substring(i)) with
  +                | Success(x,_,_) -> Some x
  +                | Failure(_) -> search (i+1)
  +            else 
  +                search (i+1)
  +        search 0
  +        
       (*
       Feature definitions
       *)
  
positive.code:                         if title.Contains word then acc + weight else acc) 0.
                  score
  
  
negative.code: 
  module Features = 
  
      open System
      open System.Text.RegularExpressions
      open HomeDepot.Model
      open FParsec
  
      type Feature = Observation -> float
  
  