summaryrefslogtreecommitdiff
path: root/RGens/src/main/java/bjc/rgens/text/markov
diff options
context:
space:
mode:
Diffstat (limited to 'RGens/src/main/java/bjc/rgens/text/markov')
-rwxr-xr-xRGens/src/main/java/bjc/rgens/text/markov/Markov.java208
-rwxr-xr-xRGens/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java70
-rwxr-xr-xRGens/src/main/java/bjc/rgens/text/markov/StandaloneTextGenerator.java76
-rwxr-xr-xRGens/src/main/java/bjc/rgens/text/markov/TextGenerator.java73
4 files changed, 0 insertions, 427 deletions
diff --git a/RGens/src/main/java/bjc/rgens/text/markov/Markov.java b/RGens/src/main/java/bjc/rgens/text/markov/Markov.java
deleted file mode 100755
index e21d60f..0000000
--- a/RGens/src/main/java/bjc/rgens/text/markov/Markov.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package bjc.rgens.text.markov;
-
-import java.util.Map.Entry;
-import java.util.*;
-
-/**
- * Represents a k-character substring.
- *
- * Can give a pseudo-random suffix character based on probability.
- *
- * @author Daniel Friedman (Fall 2011)
- */
-public class Markov {
- String substring;
- int count = 0;
-
- TreeMap<Character, Integer> map;
-
- /**
- * Constructs a Markov object from a given substring.
- *
- * @param substr
- * The given substring.
- */
- public Markov(String substr) {
- this.substring = substr;
-
- map = new TreeMap<>();
-
- add();
- }
-
- /**
- * Constructs a Markov object from a given substring and suffix
- * character.
- *
- * Suffix characters are stored in a TreeMap.
- *
- * @param substr
- * The specified substring.
- *
- * @param suffix
- * The specified suffix.
- */
- public Markov(String substr, Character suffix) {
- this.substring = substr;
-
- map = new TreeMap<>();
-
- add(suffix);
- }
-
- /**
- * Increments the count of number of times the substring appears in a
- * text.
- */
- public void add() {
- count++;
- }
-
- /**
- * Adds a suffix character to the TreeMap.
- *
- * @param c
- * The suffix character to be added.
- */
- public void add(char c) {
- add();
-
- if (map.containsKey(c)) {
- int frequency = map.get(c);
- map.put(c, frequency + 1);
- } else {
- map.put(c, 1);
- }
- }
-
- /**
- * Gives the frequency count of a suffix character; that is, the number
- * of times the specified suffix follows the substring in a text.
- *
- * @param c
- * The specified suffix.
- *
- * @return
- * The frequency count.
- */
- public int getFrequencyCount(char c) {
- if (!map.containsKey(c)) {
- return -1;
- }
-
- return map.get(c);
- }
-
- /**
- * Gives a percentage of frequency count / number of total suffixes.
- *
- * @param c
- * The character to look for the frequency for.
- *
- * @return
- * The ratio of frequency count of a single character to the total
- * number of suffixes.
- */
- public double getCharFrequency(char c) {
- if (getFrequencyCount(c) == -1) {
- return -1;
- }
-
- return (double) getFrequencyCount(c) / (double) count;
- }
-
- /**
- * Finds whether or not the given suffix is in the TreeMap.
- *
- * @param c
- * The given suffix.
- *
- * @return
- * True if the suffix exists in the TreeMap, false otherwise.
- */
- public boolean containsChar(char c) {
- if (!map.containsKey(c)) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Gives the number of times this substring occurs in a text.
- *
- * @return
- * Said number of times.
- */
- public int count() {
- return count;
- }
-
- /**
- * Gives the TreeMap.
- *
- * @return
- * The TreeMap.
- */
- public TreeMap<Character, Integer> getMap() {
- return map;
- }
-
- /**
- * Using probability, returns a pseudo-random character to follow the
- * substring.
- *
- * Character possibilities are added to an ArrayList (duplicates
- * allowed), and a random number from 0 to the last index in the
- * ArrayList is picked. Since more common suffixes occupy more indices
- * in the ArrayList, the probability of getting a more common suffix is
- * greater than the probability of getting a less common suffix.
- *
- * @return
- * The pseudo-random suffix.
- */
- public char random() {
- Character ret = null;
-
- Set<Entry<Character, Integer>> s = map.entrySet();
-
- Iterator<Entry<Character, Integer>> it = s.iterator();
-
- ArrayList<Character> suffixes = new ArrayList<>();
-
- while (it.hasNext()) {
- Entry<Character, Integer> tmp = it.next();
-
- for (int i = 0; i < tmp.getValue(); i++) {
- suffixes.add(tmp.getKey());
- }
- }
-
- Random rand = new Random();
-
- int retIndex = rand.nextInt(suffixes.size());
- ret = suffixes.get(retIndex);
-
- return ret;
- }
-
- /**
- * Gives a String representation of the Markov object.
- *
- * @return
- * Said String representation.
- */
- @Override
- public String toString() {
- String ret = "Substring: " + substring + ", Count: " + count;
- ret += "\n" + "Suffixes and frequency counts: ";
-
- for (Entry<Character, Integer> entry : map.entrySet()) {
- char key = entry.getKey();
- int value = entry.getValue();
- ret += "\n" + "Suffix: " + key + ", frequency count: " + value;
- }
-
- return ret;
- }
-}
diff --git a/RGens/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java b/RGens/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java
deleted file mode 100755
index cebf2bc..0000000
--- a/RGens/src/main/java/bjc/rgens/text/markov/StandaloneMarkov.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package bjc.rgens.text.markov;
-
-import java.util.Map;
-
-/**
- * A standalone Markov generator.
- *
- * @author bjculkin
- */
-public class StandaloneMarkov {
- /* The order of the generator. */
- private int ord;
-
- /* The generators to use. */
- private Map<String, Markov> hash;
- /* The initial string. */
- private String first;
-
- /**
- * Create a new standalone Markov generator.
- *
- * @param order
- * The order of this generator.
- *
- * @param markovHash
- * The generators to use.
- *
- * @param firstSub
- * The string to start out with.
- */
- public StandaloneMarkov(int order, Map<String, Markov> markovHash, String firstSub) {
- ord = order;
- hash = markovHash;
- first = firstSub;
- }
-
- /**
- * Generate random text from the markov generator.
- *
- * @param charsToGenerate
- * The number of characters of text to generate.
- *
- * @return
- * The randomly generate text.
- */
- public String generateTextFromMarkov(int charsToGenerate) {
- StringBuilder text = new StringBuilder();
-
- for (int i = ord; i < charsToGenerate; i++) {
- if (i == ord) {
- text.append(first);
-
- if (text.length() > ord) i = text.length();
- }
-
- String sub = text.substring(i - ord, i);
- Markov tmp = hash.get(sub);
-
- if (tmp != null) {
- Character nextChar = tmp.random();
-
- text.append(nextChar);
- } else {
- i = ord - 1;
- }
- }
-
- return text.toString();
- }
-}
diff --git a/RGens/src/main/java/bjc/rgens/text/markov/StandaloneTextGenerator.java b/RGens/src/main/java/bjc/rgens/text/markov/StandaloneTextGenerator.java
deleted file mode 100755
index 339e8d5..0000000
--- a/RGens/src/main/java/bjc/rgens/text/markov/StandaloneTextGenerator.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package bjc.rgens.text.markov;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Create a Markov generate from a provided source.
- *
- * @author bjculkin
- */
-public class StandaloneTextGenerator {
- /**
- * 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);
- }
-}
diff --git a/RGens/src/main/java/bjc/rgens/text/markov/TextGenerator.java b/RGens/src/main/java/bjc/rgens/text/markov/TextGenerator.java
deleted file mode 100755
index f629d49..0000000
--- a/RGens/src/main/java/bjc/rgens/text/markov/TextGenerator.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package bjc.rgens.text.markov;
-
-import java.io.*;
-
-/**
- * Generate text from a markov model of an input text
- *
- * @author ben
- *
- */
-public class TextGenerator {
- /**
- * Main method.
- *
- * @param args
- * When used with three arguments, the first represents the k-order
- * of the Markov objects. The second represents the number of
- * characters to print out. The third represents the file to be
- * read.
- *
- * When used with two arguments, the first represents the k-order
- * of the Markov objects, and the second represents the file to be
- * read. The generated text will be the same number of characters
- * as the original file.
- */
- public static void main(String[] args) {
- int k = 0;
- int M = 0;
-
- String file = "";
- StringBuilder text = new StringBuilder();
-
- if (args.length == 3) {
- k = Integer.parseInt(args[0]);
- M = Integer.parseInt(args[1]);
-
- file = args[2];
- } else if (args.length == 2) {
- k = Integer.parseInt(args[0]);
-
- file = args[1];
- } else {
- System.out.println("\n" + "Usage: java TextGenerator k M file");
- System.out.println("where k is the markov order, M is the number");
- System.out.println("of characters to be printed, and file is the");
- System.out.println("name of the file to print from. M may be left out." + "\n");
- System.exit(1);
- }
-
- StandaloneMarkov markov = null;
-
- try (FileReader reader = new FileReader(file)) {
- markov = StandaloneTextGenerator.generateMarkovMap(k, reader);
-
- String generatedText = markov.generateTextFromMarkov(M);
- String desiredText = generatedText.substring(0, Math.min(M, text.length()));
-
- System.out.println(desiredText);
- } catch (FileNotFoundException e) {
- System.out.println("File not found.");
-
- e.printStackTrace();
-
- System.exit(1);
- } catch (IOException ioex) {
- System.out.println("IOException");
-
- ioex.printStackTrace();
-
- System.exit(1);
- }
- }
-}