summaryrefslogtreecommitdiff
path: root/RGens/src
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2016-04-13 19:41:50 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2016-04-13 19:41:50 -0400
commit7de9c1affab3f5f187fcced44fd11291217bb105 (patch)
treeff8158e241f338ccbad77620b2bf7ffc29e8116e /RGens/src
parent7b9cd884a0447aa1ab58bfec4f801ee2b5153b19 (diff)
General refactoring
Diffstat (limited to 'RGens/src')
-rw-r--r--RGens/src/main/java/bjc/RGens/ZadronsPouch.java5
-rw-r--r--RGens/src/main/java/bjc/RGens/parser/GrammarReader.java73
-rw-r--r--RGens/src/main/java/bjc/RGens/parser/GrammarReaderApp.java30
-rw-r--r--RGens/src/main/java/bjc/RGens/parser/GrammarReaderCLI.java22
-rw-r--r--RGens/src/main/java/bjc/RGens/parser/PragmaErrorException.java14
-rw-r--r--RGens/src/main/java/bjc/RGens/parser/RBGrammarReader.java74
-rw-r--r--RGens/src/main/java/bjc/RGens/parser/ReaderState.java100
-rwxr-xr-xRGens/src/main/java/bjc/RGens/text/markov/FrequencyCounter.java11
-rwxr-xr-xRGens/src/main/java/bjc/RGens/text/markov/Markov.java28
-rwxr-xr-xRGens/src/main/java/bjc/RGens/text/markov/SuffixCounter.java8
-rwxr-xr-xRGens/src/main/java/bjc/RGens/text/markov/TextGenerator.java71
-rw-r--r--RGens/src/test/java/bjc/RGens/AppTest.java34
12 files changed, 308 insertions, 162 deletions
diff --git a/RGens/src/main/java/bjc/RGens/ZadronsPouch.java b/RGens/src/main/java/bjc/RGens/ZadronsPouch.java
index 742f0f3..279ef42 100644
--- a/RGens/src/main/java/bjc/RGens/ZadronsPouch.java
+++ b/RGens/src/main/java/bjc/RGens/ZadronsPouch.java
@@ -1,6 +1,7 @@
package bjc.RGens;
import bjc.utils.funcdata.FunctionalStringTokenizer;
+import bjc.utils.funcdata.IFunctionalList;
import bjc.utils.funcdata.FunctionalList;
import bjc.utils.gen.RandomGrammar;
@@ -21,7 +22,7 @@ public class ZadronsPouch {
ZadronsPouch zp = new ZadronsPouch();
for (int i = 0; i < 100; i++) {
- FunctionalList<String> ls = zp.grammar
+ IFunctionalList<String> ls = zp.grammar
.generateListValues("<item>", " ");
StringBuilder sb = new StringBuilder();
@@ -155,7 +156,7 @@ public class ZadronsPouch {
}
private void addRule(String rule, String... cases) {
- FunctionalList<FunctionalList<String>> cses = new FunctionalList<>();
+ IFunctionalList<IFunctionalList<String>> cses = new FunctionalList<>();
for (String strang : cases) {
cses.add(FunctionalStringTokenizer.fromString(strang)
diff --git a/RGens/src/main/java/bjc/RGens/parser/GrammarReader.java b/RGens/src/main/java/bjc/RGens/parser/GrammarReader.java
index 496cd30..a0be342 100644
--- a/RGens/src/main/java/bjc/RGens/parser/GrammarReader.java
+++ b/RGens/src/main/java/bjc/RGens/parser/GrammarReader.java
@@ -1,7 +1,7 @@
package bjc.RGens.parser;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
+import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;
import java.util.Map;
@@ -13,6 +13,12 @@ import bjc.utils.exceptions.UnknownPragmaException;
import bjc.utils.funcdata.FunctionalStringTokenizer;
import bjc.utils.gen.WeightedGrammar;
+/**
+ * Read a weighted grammar from a stream
+ *
+ * @author ben
+ *
+ */
public class GrammarReader {
private static Map<String, BiConsumer<StringTokenizer, ReaderState>> actMap;
private static Map<String, BiConsumer<StringTokenizer, ReaderState>> pragmaMap;
@@ -49,10 +55,14 @@ public class GrammarReader {
pragmaMap.put("subordinate", GrammarReader::subordinateGrammar);
}
+ /**
+ * @param stk
+ * documented to conform with expected sig
+ */
private static void debugGrammar(StringTokenizer stk, ReaderState rs) {
System.out.println("Printing rule names: ");
- for (String rul : rs.getRules().getRuleNames()) {
+ for (String rul : rs.currGrammar().getRuleNames().toIterable()) {
System.out.println("\t" + rul);
}
@@ -66,7 +76,7 @@ public class GrammarReader {
prob = Integer.parseInt(stk.nextToken());
}
- rs.getRules().addCase(rs.getRule(), prob,
+ rs.currGrammar().addCase(rs.getRule(), prob,
new FunctionalStringTokenizer(stk).toList(s -> s));
}
@@ -80,7 +90,7 @@ public class GrammarReader {
private static void doRule(String tk, StringTokenizer stk,
ReaderState rs) {
- rs.getRules().addRule(tk);
+ rs.currGrammar().addRule(tk);
rs.setRule(tk);
doCase(stk, rs);
@@ -89,9 +99,16 @@ public class GrammarReader {
private static void editSubGrammar(StringTokenizer stk,
ReaderState rs) {
String sgName = stk.nextToken();
- rs.pushGrammar(rs.getRules().getSubgrammar(sgName));
+ rs.pushGrammar(rs.currGrammar().getSubgrammar(sgName));
}
+ /**
+ * Create a grammar from the contents of the stream
+ *
+ * @param is
+ * The stream to read from
+ * @return A grammar, read from the contents of the stream
+ */
public static WeightedGrammar<String> fromStream(InputStream is) {
ReaderState rs = new ReaderState();
rs.toggleUniformity();
@@ -117,14 +134,14 @@ public class GrammarReader {
}
scn.close();
- return rs.getRules();
+ return rs.currGrammar();
}
private static void importRule(StringTokenizer stk, ReaderState rs) {
String ruleName = stk.nextToken();
String sgName = stk.nextToken();
- rs.getRules().addGrammarAlias(sgName, ruleName);
+ rs.currGrammar().addGrammarAlias(sgName, ruleName);
}
private static void initialRule(StringTokenizer stk, ReaderState rs) {
@@ -155,23 +172,30 @@ public class GrammarReader {
String sgName = stk.nextToken();
String fName = stk.nextToken();
- try {
- rs.getRules().addSubgrammar(sgName,
- fromStream(new FileInputStream(fName)));
- } catch (FileNotFoundException e) {
- throw new PragmaErrorException("Could not load subgrammar "
- + sgName + " from file " + fName);
+ try (FileInputStream fileStream = new FileInputStream(fName)) {
+
+ rs.currGrammar().addSubgrammar(sgName, fromStream(fileStream));
+ } catch (IOException ioex) {
+ PragmaErrorException peex = new PragmaErrorException(
+ "Could not load subgrammar " + sgName + " from file "
+ + fName);
+
+ peex.initCause(ioex);
+
+ throw peex;
}
}
+ @SuppressWarnings("unused")
private static void multiPrefixRule(StringTokenizer stk,
ReaderState rs) {
-
+ // TODO not yet implemented
}
+ @SuppressWarnings("unused")
private static void multiSuffixRule(StringTokenizer stk,
ReaderState rs) {
-
+ // TODO not yet implemented
}
private static void prefixRule(StringTokenizer stk, ReaderState rs) {
@@ -180,7 +204,7 @@ public class GrammarReader {
int addProb = rs.isUniform() ? 0
: Integer.parseInt(stk.nextToken());
- rs.getRules().prefixRule(rName, prefixToken, addProb);
+ rs.currGrammar().prefixRule(rName, prefixToken, addProb);
}
private static void promoteGrammar(StringTokenizer stk,
@@ -188,29 +212,30 @@ public class GrammarReader {
String gName = stk.nextToken();
String rName = stk.nextToken();
- WeightedGrammar<String> nwg = rs.getRules().getSubgrammar(gName);
- rs.getRules().deleteSubgrammar(gName);
+ WeightedGrammar<String> nwg = rs.currGrammar()
+ .getSubgrammar(gName);
+ rs.currGrammar().deleteSubgrammar(gName);
- nwg.addSubgrammar(rName, rs.getRules());
+ nwg.addSubgrammar(rName, rs.currGrammar());
rs.setRules(nwg);
}
private static void removeRule(StringTokenizer stk, ReaderState rs) {
String rName = stk.nextToken();
- rs.getRules().deleteRule(rName);
+ rs.currGrammar().deleteRule(rName);
}
private static void removeSubGrammar(StringTokenizer stk,
ReaderState rs) {
String sgName = stk.nextToken();
- rs.getRules().deleteSubgrammar(sgName);
+ rs.currGrammar().deleteSubgrammar(sgName);
}
private static void saveGrammar(StringTokenizer stk, ReaderState rs) {
String sgName = stk.nextToken();
WeightedGrammar<String> sg = rs.popGrammar();
- rs.getRules().addSubgrammar(sgName, sg);
+ rs.currGrammar().addSubgrammar(sgName, sg);
}
private static void subordinateGrammar(StringTokenizer stk,
@@ -218,7 +243,7 @@ public class GrammarReader {
String gName = stk.nextToken();
WeightedGrammar<String> nwg = new WeightedGrammar<>();
- nwg.addSubgrammar(gName, rs.getRules());
+ nwg.addSubgrammar(gName, rs.currGrammar());
rs.setRules(nwg);
}
@@ -228,6 +253,6 @@ public class GrammarReader {
int addProb = rs.isUniform() ? 0
: Integer.parseInt(stk.nextToken());
- rs.getRules().suffixRule(rName, prefixToken, addProb);
+ rs.currGrammar().suffixRule(rName, prefixToken, addProb);
}
}
diff --git a/RGens/src/main/java/bjc/RGens/parser/GrammarReaderApp.java b/RGens/src/main/java/bjc/RGens/parser/GrammarReaderApp.java
index 8adaa62..c24b479 100644
--- a/RGens/src/main/java/bjc/RGens/parser/GrammarReaderApp.java
+++ b/RGens/src/main/java/bjc/RGens/parser/GrammarReaderApp.java
@@ -3,6 +3,7 @@ package bjc.RGens.parser;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.IOException;
import java.io.PrintStream;
import javax.swing.UIManager;
@@ -12,8 +13,21 @@ import bjc.utils.gen.WeightedGrammar;
import bjc.utils.gui.SimpleDialogs;
import bjc.utils.gui.awt.SimpleFileDialog;
+/**
+ * App that reads a grammar from a file and generates results
+ *
+ * @author ben
+ *
+ */
public class GrammarReaderApp {
+ /**
+ * Main method of class
+ *
+ * @param args
+ * CLI args
+ */
+ @SuppressWarnings("null")
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(
@@ -30,10 +44,9 @@ public class GrammarReaderApp {
WeightedGrammar<String> wg = null;
- try {
- wg = RBGrammarReader.fromStream(new FileInputStream(gramFile));
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
+ try (FileInputStream fStream = new FileInputStream(gramFile)) {
+ wg = RBGrammarReader.fromStream(fStream);
+ } catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
@@ -41,10 +54,13 @@ public class GrammarReaderApp {
String initRule = "";
if (!wg.hasInitialRule()) {
+ wg.getRuleNames().sort((leftString, rightString) -> {
+ return leftString.compareTo(rightString);
+ });
+
initRule = SimpleDialogs.getChoice(null, "Pick a initial rule",
"Pick a initial rule to generate choices from",
- wg.getRuleNames().stream().sorted()
- .toArray(String[]::new));
+ wg.getRuleNames().toArray(new String[0]));
} else {
initRule = wg.getInitialRule();
}
@@ -74,5 +90,7 @@ public class GrammarReaderApp {
ps.println(s);
}
+
+ ps.close();
}
}
diff --git a/RGens/src/main/java/bjc/RGens/parser/GrammarReaderCLI.java b/RGens/src/main/java/bjc/RGens/parser/GrammarReaderCLI.java
index f782c5f..96d2f25 100644
--- a/RGens/src/main/java/bjc/RGens/parser/GrammarReaderCLI.java
+++ b/RGens/src/main/java/bjc/RGens/parser/GrammarReaderCLI.java
@@ -1,13 +1,25 @@
package bjc.RGens.parser;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
+import java.io.IOException;
import bjc.utils.gen.WeightedGrammar;
+/**
+ * App that reads a grammar from a file and generates results
+ *
+ * @author ben
+ *
+ */
public class GrammarReaderCLI {
private static WeightedGrammar<String> wg = null;
+ /**
+ * Main application method
+ *
+ * @param args
+ * CLI args
+ */
public static void main(String[] args) {
if (args.length == 0) {
GrammarReaderApp.main(args);
@@ -22,14 +34,14 @@ public class GrammarReaderCLI {
String rName = args[1];
- try {
- wg = GrammarReader.fromStream(new FileInputStream(fName));
- } catch (FileNotFoundException e) {
+ try (FileInputStream fStream = new FileInputStream(fName)) {
+ wg = GrammarReader.fromStream(fStream);
+ } catch (IOException e) {
e.printStackTrace();
}
if (rName.equalsIgnoreCase("--list-rules")) {
- for (String rn : wg.getRuleNames()) {
+ for (String rn : wg.getRuleNames().toIterable()) {
System.out.println(rn);
}
System.exit(0);
diff --git a/RGens/src/main/java/bjc/RGens/parser/PragmaErrorException.java b/RGens/src/main/java/bjc/RGens/parser/PragmaErrorException.java
index bede82a..afa368b 100644
--- a/RGens/src/main/java/bjc/RGens/parser/PragmaErrorException.java
+++ b/RGens/src/main/java/bjc/RGens/parser/PragmaErrorException.java
@@ -1,9 +1,21 @@
package bjc.RGens.parser;
+/**
+ * Exception for error executing a pragma
+ *
+ * @author ben
+ *
+ */
public class PragmaErrorException extends RuntimeException {
private static final long serialVersionUID = 7245421182038076899L;
+ /**
+ * Create a new exception with the given message
+ *
+ * @param message
+ * The message of the exception
+ */
public PragmaErrorException(String message) {
super(message);
- }
+ }
}
diff --git a/RGens/src/main/java/bjc/RGens/parser/RBGrammarReader.java b/RGens/src/main/java/bjc/RGens/parser/RBGrammarReader.java
index 86079ac..7f1af27 100644
--- a/RGens/src/main/java/bjc/RGens/parser/RBGrammarReader.java
+++ b/RGens/src/main/java/bjc/RGens/parser/RBGrammarReader.java
@@ -1,7 +1,7 @@
package bjc.RGens.parser;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
+import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;
import java.util.Map;
@@ -12,6 +12,12 @@ import bjc.utils.funcdata.FunctionalStringTokenizer;
import bjc.utils.gen.WeightedGrammar;
import bjc.utils.parserutils.RuleBasedConfigReader;
+/**
+ * Read a grammar from a stream
+ *
+ * @author ben
+ *
+ */
public class RBGrammarReader {
private static Map<String, BiConsumer<StringTokenizer, ReaderState>> pragmaMap;
@@ -39,10 +45,12 @@ public class RBGrammarReader {
pragmaMap.put("subordinate", RBGrammarReader::subordinateGrammar);
}
- private static void debugGrammar(StringTokenizer stk, ReaderState rs) {
+ private static void debugGrammar(
+ @SuppressWarnings("unused") StringTokenizer stk,
+ ReaderState rs) {
System.out.println("Printing rule names: ");
- for (String rul : rs.getRules().getRuleNames()) {
+ for (String rul : rs.currGrammar().getRuleNames().toIterable()) {
System.out.println("\t" + rul);
}
@@ -56,16 +64,25 @@ public class RBGrammarReader {
prob = Integer.parseInt(stk.nextToken());
}
- rs.getRules().addCase(rs.getRule(), prob,
+ rs.currGrammar().addCase(rs.getRule(), prob,
new FunctionalStringTokenizer(stk).toList(s -> s));
}
private static void editSubGrammar(StringTokenizer stk,
ReaderState rs) {
String sgName = stk.nextToken();
- rs.pushGrammar(rs.getRules().getSubgrammar(sgName));
- }
-
+ rs.pushGrammar(rs.currGrammar().getSubgrammar(sgName));
+ }
+
+ /**
+ * Read a grammar from a stream
+ *
+ * @param is
+ * The stream to read from
+ * @return A grammar read from the stream
+ *
+ * TODO redo the implementation for this
+ */
public static WeightedGrammar<String> fromStream(InputStream is) {
ReaderState rs = new ReaderState();
rs.toggleUniformity();
@@ -74,7 +91,7 @@ public class RBGrammarReader {
null, null, null);
reader.setStartRule((stk, par) -> par.doWith((left, right) -> {
- rs.getRules().addRule(left);
+ rs.currGrammar().addRule(left);
rs.setRule(left);
doCase(stk.getInternal(), right);
@@ -94,14 +111,14 @@ public class RBGrammarReader {
});
});
- return reader.fromStream(is, rs).getRules();
+ return reader.fromStream(is, rs).currGrammar();
}
private static void importRule(StringTokenizer stk, ReaderState rs) {
String ruleName = stk.nextToken();
String sgName = stk.nextToken();
- rs.getRules().addGrammarAlias(sgName, ruleName);
+ rs.currGrammar().addGrammarAlias(sgName, ruleName);
}
private static void initialRule(StringTokenizer stk, ReaderState rs) {
@@ -134,20 +151,26 @@ public class RBGrammarReader {
String sgName = stk.nextToken();
String fName = stk.nextToken();
- try {
- rs.getRules().addSubgrammar(sgName,
- fromStream(new FileInputStream(fName)));
- } catch (FileNotFoundException e) {
- throw new PragmaErrorException("Could not load subgrammar "
- + sgName + " from file " + fName);
+ try (FileInputStream fStream = new FileInputStream(fName)) {
+ rs.currGrammar().addSubgrammar(sgName, fromStream(fStream));
+ } catch (IOException e) {
+ PragmaErrorException peex = new PragmaErrorException(
+ "Could not load subgrammar " + sgName + " from file "
+ + fName);
+
+ peex.initCause(e);
+
+ throw peex;
}
}
+ @SuppressWarnings("unused")
private static void multiPrefixRule(StringTokenizer stk,
ReaderState rs) {
// TODO implement me :)
}
+ @SuppressWarnings("unused")
private static void multiSuffixRule(StringTokenizer stk,
ReaderState rs) {
// TODO implement me :)
@@ -159,7 +182,7 @@ public class RBGrammarReader {
int addProb = rs.isUniform() ? 0
: Integer.parseInt(stk.nextToken());
- rs.getRules().prefixRule(rName, prefixToken, addProb);
+ rs.currGrammar().prefixRule(rName, prefixToken, addProb);
}
private static void promoteGrammar(StringTokenizer stk,
@@ -167,29 +190,30 @@ public class RBGrammarReader {
String gName = stk.nextToken();
String rName = stk.nextToken();
- WeightedGrammar<String> nwg = rs.getRules().getSubgrammar(gName);
- rs.getRules().deleteSubgrammar(gName);
+ WeightedGrammar<String> nwg = rs.currGrammar()
+ .getSubgrammar(gName);
+ rs.currGrammar().deleteSubgrammar(gName);
- nwg.addSubgrammar(rName, rs.getRules());
+ nwg.addSubgrammar(rName, rs.currGrammar());
rs.setRules(nwg);
}
private static void removeRule(StringTokenizer stk, ReaderState rs) {
String rName = stk.nextToken();
- rs.getRules().deleteRule(rName);
+ rs.currGrammar().deleteRule(rName);
}
private static void removeSubGrammar(StringTokenizer stk,
ReaderState rs) {
String sgName = stk.nextToken();
- rs.getRules().deleteSubgrammar(sgName);
+ rs.currGrammar().deleteSubgrammar(sgName);
}
private static void saveGrammar(StringTokenizer stk, ReaderState rs) {
String sgName = stk.nextToken();
WeightedGrammar<String> sg = rs.popGrammar();
- rs.getRules().addSubgrammar(sgName, sg);
+ rs.currGrammar().addSubgrammar(sgName, sg);
}
private static void subordinateGrammar(StringTokenizer stk,
@@ -197,7 +221,7 @@ public class RBGrammarReader {
String gName = stk.nextToken();
WeightedGrammar<String> nwg = new WeightedGrammar<>();
- nwg.addSubgrammar(gName, rs.getRules());
+ nwg.addSubgrammar(gName, rs.currGrammar());
rs.setRules(nwg);
}
@@ -207,6 +231,6 @@ public class RBGrammarReader {
int addProb = rs.isUniform() ? 0
: Integer.parseInt(stk.nextToken());
- rs.getRules().suffixRule(rName, prefixToken, addProb);
+ rs.currGrammar().suffixRule(rName, prefixToken, addProb);
}
}
diff --git a/RGens/src/main/java/bjc/RGens/parser/ReaderState.java b/RGens/src/main/java/bjc/RGens/parser/ReaderState.java
index 50be322..e115530 100644
--- a/RGens/src/main/java/bjc/RGens/parser/ReaderState.java
+++ b/RGens/src/main/java/bjc/RGens/parser/ReaderState.java
@@ -4,57 +4,119 @@ import java.util.Stack;
import bjc.utils.gen.WeightedGrammar;
+/**
+ * Represents the internal state of reader
+ *
+ * @author ben
+ *
+ */
public class ReaderState {
- private String currRule = "";
+ private String currRule = "";
// Pragma settings
- private boolean isUniform = false;
-
- private Stack<WeightedGrammar<String>> wg;
-
+ private boolean isUniform = false;
+
+ private Stack<WeightedGrammar<String>> wg;
+
+ /**
+ * Create a new reader state
+ */
public ReaderState() {
- wg = new Stack<WeightedGrammar<String>>();
+ wg = new Stack<>();
wg.push(new WeightedGrammar<>());
}
-
+
+ /**
+ * Get the current grammar
+ *
+ * @return The current grammar
+ */
public WeightedGrammar<String> currGrammar() {
return wg.peek();
}
-
+
+ /**
+ * Get the current rule
+ *
+ * @return The current rule
+ */
public String getRule() {
return currRule;
}
-
+
+ /**
+ * Use {@link #currGrammar()} instead
+ *
+ * @return The current grammar
+ */
+ @Deprecated
public WeightedGrammar<String> getRules() {
return wg.peek();
}
-
+
+ /**
+ * Check if this reader is currently in uniform mode
+ *
+ * @return Whether this grammar is in uniform mode
+ */
public boolean isUniform() {
return isUniform;
}
-
+
+ /**
+ * Pop the grammar currently being worked on
+ *
+ * @return The grammar currently being worked on
+ */
public WeightedGrammar<String> popGrammar() {
return wg.pop();
}
-
+
+ /**
+ * Push a new grammar to work on
+ *
+ * @param nwg
+ * The new grammar to work on
+ */
public void pushGrammar(WeightedGrammar<String> nwg) {
wg.push(nwg);
}
-
+
+ /**
+ * Set the initial rule of this grammar
+ *
+ * @param rName
+ * The initial rule of this grammar
+ */
+ public void setInitialRule(String rName) {
+ wg.peek().setInitialRule(rName);
+ }
+
+ /**
+ * Set the rule currently being worked on
+ *
+ * @param r
+ * The rule currently being worked on
+ */
public void setRule(String r) {
currRule = r;
}
-
+
+ /**
+ * Set the current grammar to be the specified one
+ *
+ * @param nwg
+ * The new grammar to use
+ */
public void setRules(WeightedGrammar<String> nwg) {
wg.pop();
wg.push(nwg);
}
-
+
+ /**
+ * Toggle this grammars uniformity setting
+ */
public void toggleUniformity() {
isUniform = !isUniform;
}
-
- public void setInitialRule(String rName) {
- wg.peek().setInitialRule(rName);
- }
}
diff --git a/RGens/src/main/java/bjc/RGens/text/markov/FrequencyCounter.java b/RGens/src/main/java/bjc/RGens/text/markov/FrequencyCounter.java
index abe1c8c..ccc8cb5 100755
--- a/RGens/src/main/java/bjc/RGens/text/markov/FrequencyCounter.java
+++ b/RGens/src/main/java/bjc/RGens/text/markov/FrequencyCounter.java
@@ -10,6 +10,12 @@ import java.util.*;
*/
public class FrequencyCounter {
+ /**
+ * Main method
+ *
+ * @param args
+ * CLI args
+ */
public static void main(String[] args) {
String text;
@@ -24,7 +30,7 @@ public class FrequencyCounter {
Scanner s = new Scanner(System.in);
text = s.nextLine();
- Map<String, Integer> hash = new HashMap<String, Integer>();
+ Map<String, Integer> hash = new HashMap<>();
int distinct = 0;
for (int i = 0; i <= text.length() - k; i++) {
@@ -40,10 +46,9 @@ public class FrequencyCounter {
hash.put(sub, m.count);
distinct++;
}
-
- s.close();
}
+ s.close();
System.out.println(distinct + " distinct keys");
Iterator<String> keys = hash.keySet().iterator();
diff --git a/RGens/src/main/java/bjc/RGens/text/markov/Markov.java b/RGens/src/main/java/bjc/RGens/text/markov/Markov.java
index 1956111..7509a99 100755
--- a/RGens/src/main/java/bjc/RGens/text/markov/Markov.java
+++ b/RGens/src/main/java/bjc/RGens/text/markov/Markov.java
@@ -11,10 +11,10 @@ import java.util.*;
*
*/
public class Markov {
- String substring;
- int count = 0;
+ String substring;
+ int count = 0;
- TreeMap<Character, Integer> map;
+ TreeMap<Character, Integer> map;
/**
* Constructs a Markov object from a given substring.
@@ -25,7 +25,7 @@ public class Markov {
public Markov(String substring) {
this.substring = substring;
- map = new TreeMap<Character, Integer>();
+ map = new TreeMap<>();
add();
}
@@ -42,7 +42,7 @@ public class Markov {
public Markov(String substring, Character suffix) {
this.substring = substring;
- map = new TreeMap<Character, Integer>();
+ map = new TreeMap<>();
add(suffix);
}
@@ -82,23 +82,24 @@ public class Markov {
public int getFrequencyCount(char c) {
if (!map.containsKey(c)) {
return -1;
- } else {
- return map.get(c);
}
+
+ return map.get(c);
}
/**
* Gives a percentage of frequency count / number of total suffixes.
*
* @param c
- * @return
+ * @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;
- } else {
- return (double) getFrequencyCount(c) / (double) count;
}
+
+ return (double) getFrequencyCount(c) / (double) count;
}
/**
@@ -111,9 +112,9 @@ public class Markov {
public boolean containsChar(char c) {
if (!map.containsKey(c)) {
return false;
- } else {
- return true;
}
+
+ return true;
}
/**
@@ -152,7 +153,7 @@ public class Markov {
Iterator<Entry<Character, Integer>> it = s.iterator();
- ArrayList<Character> suffixes = new ArrayList<Character>();
+ ArrayList<Character> suffixes = new ArrayList<>();
while (it.hasNext()) {
Entry<Character, Integer> tmp = it.next();
@@ -173,6 +174,7 @@ public class Markov {
*
* @return said String representation.
*/
+ @Override
public String toString() {
String ret = "Substring: " + substring + ", Count: " + count;
ret += "\n" + "Suffixes and frequency counts: ";
diff --git a/RGens/src/main/java/bjc/RGens/text/markov/SuffixCounter.java b/RGens/src/main/java/bjc/RGens/text/markov/SuffixCounter.java
index 0a8034b..8f9a076 100755
--- a/RGens/src/main/java/bjc/RGens/text/markov/SuffixCounter.java
+++ b/RGens/src/main/java/bjc/RGens/text/markov/SuffixCounter.java
@@ -15,6 +15,12 @@ import java.util.Scanner;
*/
public class SuffixCounter {
+ /**
+ * Main method
+ *
+ * @param args
+ * CLI args
+ */
public static void main(String[] args) {
String text;
int k = 0;
@@ -27,7 +33,7 @@ public class SuffixCounter {
Scanner s = new Scanner(System.in);
text = s.nextLine();
- Map<String, Markov> hash = new HashMap<String, Markov>();
+ Map<String, Markov> hash = new HashMap<>();
int distinct = 0;
diff --git a/RGens/src/main/java/bjc/RGens/text/markov/TextGenerator.java b/RGens/src/main/java/bjc/RGens/text/markov/TextGenerator.java
index 8c8bf57..1a76e86 100755
--- a/RGens/src/main/java/bjc/RGens/text/markov/TextGenerator.java
+++ b/RGens/src/main/java/bjc/RGens/text/markov/TextGenerator.java
@@ -4,6 +4,12 @@ import java.io.*;
import java.util.*;
import java.util.Map.Entry;
+/**
+ * Generate text from a markov model of an input text
+ *
+ * @author ben
+ *
+ */
public class TextGenerator {
/**
@@ -18,6 +24,7 @@ public class TextGenerator {
* the file to be read. The generated text will be the same
* number of characters as the original file.
*/
+ @SuppressWarnings("null")
public static void main(String[] args) {
int k = 0;
int M = 0;
@@ -45,17 +52,47 @@ public class TextGenerator {
System.exit(1);
}
- FileReader reader = null;
+ Map<String, Markov> hash = null;
- try {
- reader = new FileReader(file);
+ try (FileReader reader = new FileReader(file)) {
+ hash = generateMarkovMap(k, M, text, reader);
} 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);
}
- Map<String, Markov> hash = new HashMap<String, Markov>();
+ if (hash.size() < 100) {
+ Iterator<String> keys = hash.keySet().iterator();
+
+ while (keys.hasNext()) {
+ String hashKey = keys.next();
+ Markov hashValue = hash.get(hashKey);
+
+ System.out.print(hashValue.count() + " " + hashKey + ":");
+
+ for (Entry<Character, Integer> entry : hashValue.getMap()
+ .entrySet()) {
+ char suffix = entry.getKey();
+ int frequencyCount = entry.getValue();
+ System.out.print(" " + frequencyCount + " " + suffix);
+ }
+
+ System.out.println();
+ }
+ }
+
+ System.out.println(
+ text.toString().substring(0, Math.min(M, text.length())));
+ }
+
+ private static Map<String, Markov> generateMarkovMap(int k, int M,
+ StringBuilder text, Reader reader) {
+ Map<String, Markov> hash = new HashMap<>();
Character next = null;
@@ -100,9 +137,6 @@ public class TextGenerator {
}
}
- if (M == 0) {
- M = origFile.length();
- }
for (int i = k; i < M; i++) {
if (i == k) {
text.append(firstSub);
@@ -122,27 +156,6 @@ public class TextGenerator {
}
}
- if (hash.size() < 100) {
- Iterator<String> keys = hash.keySet().iterator();
-
- while (keys.hasNext()) {
- String hashKey = keys.next();
- Markov hashValue = hash.get(hashKey);
-
- System.out.print(hashValue.count() + " " + hashKey + ":");
-
- for (Entry<Character, Integer> entry : hashValue.getMap()
- .entrySet()) {
- char suffix = entry.getKey();
- int frequencyCount = entry.getValue();
- System.out.print(" " + frequencyCount + " " + suffix);
- }
-
- System.out.println();
- }
- }
-
- System.out.println(
- text.toString().substring(0, Math.min(M, text.length())));
+ return hash;
}
} \ No newline at end of file
diff --git a/RGens/src/test/java/bjc/RGens/AppTest.java b/RGens/src/test/java/bjc/RGens/AppTest.java
deleted file mode 100644
index 7620403..0000000
--- a/RGens/src/test/java/bjc/RGens/AppTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package bjc.RGens;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Unit test for simple App.
- */
-public class AppTest extends TestCase {
- /**
- * Create the test case
- *
- * @param testName
- * name of the test case
- */
- public AppTest(String testName) {
- super(testName);
- }
-
- /**
- * @return the suite of tests being tested
- */
- public static Test suite() {
- return new TestSuite(AppTest.class);
- }
-
- /**
- * Rigourous Test :-)
- */
- public void testApp() {
- assertTrue(true);
- }
-}