Browse Source

Wrote some script code to test the current state of the CoOrdinator.

master
Craig Oates 6 years ago
parent
commit
d4c3c0de5e
  1. 13
      WetPancake/CoOrdinator.fs
  2. 27
      WetPancake/MapProcessing.fs
  3. 16
      WetPancake/Script.fsx
  4. 18
      WetPancake/Textprocessing.fs

13
WetPancake/CoOrdinator.fs

@ -4,8 +4,17 @@
open TextProcessing
open MapProcessing
let GenerateRandomText = 0;
let GenerateRandomText =
let text = SelectRandomSampleFile |> LoadFile
let wordGroups = GetWordPairs (PickRandomNumber 10) text
let map = BuildMarkovMap wordGroups
let startWords = SeperateStartWords map
let startingWord = PickRandomNumber (Map.count startWords)
//let result = seq { for i in 1 .. PickRandomNumber 10 -> GetMarkovSentence startWords map}
//result |> JoinWords
//result
0
let GenerateText gibberishLevel sentences = 0;
let GenerateText gibberishLevel sentences = 0
let GenerateTextFromFile gibberishLevel sentences path = 0

27
WetPancake/MapProcessing.fs

@ -1 +1,26 @@
module internal MapProcessing
module internal MapProcessing
open TextProcessing
open System
let SeperateStartWords map =
let startWords =
map
|> Map.partition (fun k _ -> IsStartOfSentence k)
fst startWords
let rec MarkovChain currentWords (map: Map<string, string list>) sentence =
let nextChoice = map.[currentWords] |> GetRandomWord
if IsEndOfSentence nextChoice then nextChoice :: sentence
else
let currentState =
currentWords
|> SplitIntoWords
|> Seq.skip 1
|> JoinWords
MarkovChain (CombineWords currentState nextChoice) map (nextChoice :: sentence)
let GetMarkovSentence startWords map =
MarkovChain startWords map [startWords]
|> List.rev
|> JoinWords

16
WetPancake/Script.fsx

@ -1,8 +1,24 @@
// Learn more about F# at http://fsharp.org
// See the 'F# Tutorial' project for more help.
#load "FileProcessing.fs"
#load "TextProcessing.fs"
#load "MapProcessing.fs"
#load "CoOrdinator.fs"
open FileProcessing
open TextProcessing
open MapProcessing
open CoOrdinator
IsStartOfSentence "bob"
IsEndOfSentence "bill."
let text = SelectRandomSampleFile |> LoadFile
let wordGroups = GetWordPairs 4 text
//let wordGroups = GetWordPairs (PickRandomNumber 13) text
let map = BuildMarkovMap wordGroups
let startWords = SeperateStartWords map
//let temp = snd startWords
let count = Map.count startWords
let random = PickRandomNumber (Map.count startWords)

18
WetPancake/Textprocessing.fs

@ -5,7 +5,7 @@
let PickRandomNumber max = Random().Next(0, max);
let SplitIntoWords text = Regex.Split(text, @"\@s+")
let SplitIntoWords text = Regex.Split(text, @"\s+")
let IsStartOfSentence word = Regex(@"^[A-Z]").IsMatch(word)
@ -13,7 +13,10 @@
let JoinWords words = String.concat " " words
let GetWordPairs pairSize = SplitIntoWords >> Seq.windowed pairSize
let GetWordPairs pairSize text =
text
|> SplitIntoWords
|> Seq.windowed pairSize
let BisectWords (words:_[]) =
let length = Array.length words
@ -33,20 +36,11 @@
let BuildMarkovMap<'a> = Seq.fold MapBuilder Map.empty
let GetRandomWord (random: int -> int) seq =
let randomIndex = random (Seq.length seq)
seq |> Seq.item randomIndex
let GetWord words =
let GetRandomWord words =
let randomWord = Random().Next(Seq.length words)
words |> Seq.item randomWord
let CombineWords prev next =
[prev; next]
|> List.filter (fun s -> not (String.IsNullOrWhiteSpace s))
|> JoinWords
let GetMarkovSentence startWord markovChain =
markovChain startWord [startWord]
|> List.rev
|> JoinWords
Loading…
Cancel
Save