Compare commits

..

No commits in common. "6b79d8c5bb6dbcdb84c8cae7c46d28109176f35f" and "d99692ff1cf9ee3d7c7e06364722cefb95d0d340" have entirely different histories.

3 changed files with 12 additions and 40 deletions

View file

@ -90,7 +90,6 @@ namespace MarkovGrams
return word.Split(' ');
return new string[] { word.Trim() };
});
List<float> choicePointRatios = new List<float>();
switch (operationMode)
{
@ -102,11 +101,9 @@ namespace MarkovGrams
);
unweightedChain.StartOnUppercase = startOnUppercase;
for (int i = 0; i < count; i++) {
Console.WriteLine(unweightedChain.Generate(length, out float nextChoicePathRatio));
choicePointRatios.Add(nextChoicePathRatio);
}
Console.Error.WriteLine($"{count} words in {utimer.ElapsedMilliseconds}ms (average choice-point-ratio: {Math.Round(choicePointRatios.Sum()/count, 2)})");
for (int i = 0; i < count; i++)
Console.WriteLine(unweightedChain.Generate(length));
Console.Error.WriteLine($"{count} words in {utimer.ElapsedMilliseconds}ms");
break;
case Mode.WeightedMarkov:
@ -117,11 +114,9 @@ namespace MarkovGrams
);
weightedChain.StartOnUppercase = startOnUppercase;
for (int i = 0; i < count; i++) {
Console.WriteLine(weightedChain.Generate(length, out float nextChoicePointRatio));
choicePointRatios.Add(nextChoicePointRatio);
}
Console.Error.WriteLine($"{count} words in {wtimer.ElapsedMilliseconds}ms (average choice-point-ratio: {Math.Round(choicePointRatios.Sum() / count, 2)})");
for (int i = 0; i < count; i++)
Console.WriteLine(weightedChain.Generate(length));
Console.Error.WriteLine($"{count} words in {wtimer.ElapsedMilliseconds}ms");
break;
case Mode.NGrams:

View file

@ -66,21 +66,15 @@ namespace MarkovGrams
/// </param>
/// <returns>A new random string.</returns>
public string Generate(int length)
{
return Generate(length, out float noop);
}
public string Generate(int length, out float choicePointRatio)
{
string result = RandomNgram();
string lastNgram = result;
List<int> choiceCounts = new List<int>(); int i = 0;
while((Mode == GenerationMode.CharacterLevel ? result.Length : result.Split(' ').Length) < length)
{
// The substring that the next ngram in the chain needs to start with
string nextStartsWith = Mode == GenerationMode.CharacterLevel ? lastNgram.Substring(1) : string.Join(" ", lastNgram.Split(' ').Skip(1));
string nextStartsWith = Mode == GenerationMode.CharacterLevel ? lastNgram.Substring(1) : lastNgram.Split(' ').Last();
// Get a list of possible n-grams we could choose from next
List<string> nextNgrams = ngrams.FindAll(gram => gram.StartsWith(nextStartsWith));
choiceCounts.Add(nextNgrams.Count);
// If there aren't any choices left, we can't exactly keep adding to the new string any more :-(
if(nextNgrams.Count == 0)
break;
@ -90,15 +84,10 @@ namespace MarkovGrams
if (Mode == GenerationMode.CharacterLevel)
result += nextNgram[nextNgram.Length - 1];
else
result += ' ' + nextNgram.Split(' ').Last();
lastNgram = nextNgram; i++;
result += ' ' + string.Join(" ", nextNgram.Split(' ').Skip(1));
lastNgram = nextNgram;
}
if (choiceCounts.Sum() > 0)
choicePointRatio = (float)choiceCounts.Sum() / (float)(i + 1);
else
choicePointRatio = 0;
return result;
}
}

View file

@ -80,25 +80,18 @@ namespace MarkovGrams
/// </param>
/// <returns>A new random string.</returns>
public string Generate(int length)
{
return Generate(length, out float noop);
}
public string Generate(int length, out float choicePointRatio)
{
string result = RandomNgram();
string lastNgram = result;
List<int> choiceCounts = new List<int>(); int i = 0;
while((Mode == GenerationMode.CharacterLevel ? result.Length : result.Split(' ').Length) < length)
{
wrandom.ClearContents();
// The substring that the next ngram in the chain needs to start with
string nextStartsWith = Mode == GenerationMode.CharacterLevel ? lastNgram.Substring(1) : string.Join(" ", lastNgram.Split(' ').Skip(1));
string nextStartsWith = Mode == GenerationMode.CharacterLevel ? lastNgram.Substring(1) : lastNgram.Split(' ').Last();
// Get a list of possible n-grams we could choose from next
Dictionary<string, double> convNextNgrams = new Dictionary<string, double>();
ngrams.Where(gram_data => gram_data.Key.StartsWith(nextStartsWith))
.ForEach((KeyValuePair<string, double> ngramData) => convNextNgrams.Add(ngramData.Key, ngramData.Value));
choiceCounts.Add(convNextNgrams.Count);
// If there aren't any choices left, we can't exactly keep adding to the new string any more :-(
if(convNextNgrams.Count() == 0)
break;
@ -109,15 +102,10 @@ namespace MarkovGrams
if (Mode == GenerationMode.CharacterLevel)
result += nextNgram[nextNgram.Length - 1];
else
result += ' ' + nextNgram.Split(' ').Last();
lastNgram = nextNgram; i++;
result += ' ' + string.Join(" ", nextNgram.Split(' ').Skip(1));
lastNgram = nextNgram;
}
wrandom.ClearContents();
if (choiceCounts.Sum() > 0)
choicePointRatio = (float)choiceCounts.Sum() / (float)(i + 1);
else
choicePointRatio = 0;
return result;
}
}