summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2021-03-13 07:09:38 -0500
committerBen Culkin <scorpress@gmail.com>2021-03-13 07:09:38 -0500
commit768aacdf6e02ad39b8a26a88cb64670235378e1a (patch)
treec565d859305a2f4342a2b7fe060247769c863137 /src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java
parent223dc6d10617d282204c515cf3794d59a31ebf16 (diff)
Move factory method from StandaloneTextGenerator
It is now in StandaloneMarkov, which is the produced type anyways. This also allows the removal of the StandaloneTextGenerator file, as it no longer contains anything
Diffstat (limited to 'src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java')
-rwxr-xr-xsrc/main/java/bjc/rgens/text/markov/StandaloneMarkov.java66
1 files changed, 65 insertions, 1 deletions
diff --git a/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java b/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java
index cebf2bc..78db77f 100755
--- a/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java
+++ b/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java
@@ -1,6 +1,7 @@
package bjc.rgens.text.markov;
-import java.util.Map;
+import java.io.*;
+import java.util.*;
/**
* A standalone Markov generator.
@@ -67,4 +68,67 @@ public class StandaloneMarkov {
return text.toString();
}
+
+ /**
+ * Build a markov generator from a provided source.
+ *
+ * @param order
+ * The markov order to use.
+ *
+ * @param reader
+ * The source to seed the generator from.
+ *
+ * @return
+ * The markov generator for the provided text.
+ */
+ public static StandaloneMarkov generateMarkovMap(int order, Reader reader) {
+ Map<String, Markov> hash = new HashMap<>();
+
+ Character next = null;
+
+ try {
+ next = (char) reader.read();
+ } catch (IOException e1) {
+ System.out.println("IOException in stepping through the reader");
+
+ e1.printStackTrace();
+
+ System.exit(1);
+ }
+
+ StringBuilder origFileBuffer = new StringBuilder();
+
+ while (next != null && Character.isDefined(next)) {
+ Character.toString(next);
+ origFileBuffer.append(next);
+
+ try {
+ next = (char) reader.read();
+ } catch (IOException e) {
+ System.out.println("IOException in stepping through the reader");
+
+ e.printStackTrace();
+ }
+
+ }
+
+ String origFile = origFileBuffer.toString();
+ String firstSub = origFile.substring(0, order);
+
+ for (int i = 0; i < origFile.length() - order; i++) {
+ String sub = origFile.substring(i, i + order);
+ Character suffix = origFile.charAt(i + order);
+
+ if (hash.containsKey(sub)) {
+ Markov marvin = hash.get(sub);
+ marvin.add(suffix);
+ hash.put(sub, marvin);
+ } else {
+ Markov marvin = new Markov(sub, suffix);
+ hash.put(sub, marvin);
+ }
+ }
+
+ return new StandaloneMarkov(order, hash, firstSub);
+ }
}