blob: 339e8d53b02afdc104b499070bff374e9de56625 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
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);
}
}
|