Browse Source

Added extra checks and safe guards for the Generate Random Text function.

master
Craig Oates 6 years ago
parent
commit
d03a7dc7c1
  1. 2
      WetPancake/DataServices.fs
  2. 5
      WetPancake/ProductServices.fs
  3. 16
      WetPancake/SystemServices.fs

2
WetPancake/DataServices.fs

@ -7,7 +7,7 @@
open System.Threading
let rec GenerateMarkovChain (map: Map<string, string List>) (state:string) chain =
let nextChoice = map.[state] |> PickRandomItem
let nextChoice = map.[state] |> PickNextWord
if MatchText @"\." nextChoice then nextChoice :: chain
else
let currentWords =

5
WetPancake/ProductServices.fs

@ -7,14 +7,15 @@ module Pancake =
open DataProcessing
open DataStructuring
open DataServices
open System
let RequestRandomText() =
let data =
LoadFile (SelectRandomSampleFile())
|> ApplyStandardSetup
|> SortIntoGroups (PickRandomNumber 5)
|> SortIntoGroups (PickRandomNumber 2 10)
|> GenerateMap
GenerateMarkovText (PickRandomNumber 3) data
GenerateMarkovText (PickRandomNumber 2 10) data
let RequestText (gibberishLevel: int) (sentences: int) =
let data =

16
WetPancake/SystemServices.fs

@ -2,14 +2,22 @@
open System
let PickRandomNumber max = Random().Next(1, max);
let PickRandomNumber min max = Random().Next(min, max);
(*This needs work.
If the seq passed in has count of 0,
it causes exceptions further up the pipe*)
let PickRandomItem seq =
if (Seq.length seq) = 0 then
seq |> Seq.item 0
else
let index = Random().Next(0, Seq.length seq);
seq |> Seq.item index
(* The if-check is used as a fallback.
The "." is used to signifiy the end of a sentence.
This return is picked up in the system,
in the GenerateMarkovChain function. *)
let PickNextWord seq =
if (Seq.length seq) = 0 then
"."
else
let index = Random().Next(0, Seq.length seq);
seq |> Seq.item index
Loading…
Cancel
Save