diff options
Diffstat (limited to 'dialogue.cpp')
-rw-r--r-- | dialogue.cpp | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/dialogue.cpp b/dialogue.cpp new file mode 100644 index 0000000..dd34ee5 --- /dev/null +++ b/dialogue.cpp | |||
@@ -0,0 +1,122 @@ | |||
1 | #include "vendor/csv.h" | ||
2 | #include "identifier.h" | ||
3 | #include "histogram.h" | ||
4 | #include <rawr.h> | ||
5 | #include <cstdlib> | ||
6 | #include <ctime> | ||
7 | #include <map> | ||
8 | #include <string> | ||
9 | #include <iostream> | ||
10 | #include <sstream> | ||
11 | |||
12 | |||
13 | |||
14 | using speakerstore = identifier<std::string>; | ||
15 | using speaker_id = speakerstore::key_type; | ||
16 | |||
17 | |||
18 | struct speaker_data { | ||
19 | |||
20 | std::string name; | ||
21 | histogram<speaker_id> nextSpeaker; | ||
22 | rawr chain; | ||
23 | |||
24 | }; | ||
25 | |||
26 | |||
27 | |||
28 | |||
29 | int main(int, char**) | ||
30 | { | ||
31 | srand(time(NULL)); | ||
32 | rand(); rand(); rand(); rand(); | ||
33 | |||
34 | speakerstore speakers; | ||
35 | std::map<speaker_id, speaker_data> speakerData; | ||
36 | histogram<speaker_id> allSpeakers; | ||
37 | |||
38 | |||
39 | |||
40 | io::CSVReader<2,io::trim_chars<' ', '\t'>,io::double_quote_escape<',', '"'>> in("../dialogue.csv"); | ||
41 | std::string speaker; | ||
42 | std::string line; | ||
43 | |||
44 | bool hadPrev = false; | ||
45 | speaker_id prevSpeaker; | ||
46 | |||
47 | while (in.read_row(speaker, line)) | ||
48 | { | ||
49 | speaker_id spId = speakers.add(speaker); | ||
50 | speaker_data& myData = speakerData[spId]; | ||
51 | myData.name = speaker; | ||
52 | |||
53 | allSpeakers.add(spId); | ||
54 | |||
55 | if (hadPrev && prevSpeaker != spId) | ||
56 | { | ||
57 | speaker_data& psd = speakerData[prevSpeaker]; | ||
58 | psd.nextSpeaker.add(spId); | ||
59 | } | ||
60 | |||
61 | myData.chain.addCorpus(line); | ||
62 | |||
63 | hadPrev = true; | ||
64 | prevSpeaker = spId; | ||
65 | } | ||
66 | |||
67 | for (auto& sp : speakerData) | ||
68 | { | ||
69 | sp.second.chain.compile(4); | ||
70 | sp.second.nextSpeaker.compile(); | ||
71 | } | ||
72 | |||
73 | std::cout << "Speakers:" << std::endl; | ||
74 | for (auto& sp : speakerData) | ||
75 | { | ||
76 | std::cout << " " << sp.second.name << std::endl; | ||
77 | } | ||
78 | std::cout << std::endl; | ||
79 | |||
80 | allSpeakers.compile(); | ||
81 | |||
82 | for (;;) | ||
83 | { | ||
84 | speaker_id curSpeaker = allSpeakers.next(); | ||
85 | |||
86 | std::ostringstream theEnd; | ||
87 | |||
88 | for (int i = 0; i < 5; i++) | ||
89 | { | ||
90 | speaker_data& curSd = speakerData.at(curSpeaker); | ||
91 | |||
92 | //std::ostringstream thisLine; | ||
93 | |||
94 | if (curSd.name != "") | ||
95 | { | ||
96 | theEnd << curSd.name << ": "; | ||
97 | } | ||
98 | |||
99 | theEnd << curSd.chain.randomSentence(1); | ||
100 | |||
101 | /*if (i > 0 && theEnd.str().length() + thisLine.str().length() > 280) | ||
102 | { | ||
103 | break; | ||
104 | }*/ | ||
105 | |||
106 | theEnd << std::endl; | ||
107 | //theEnd << thisLine.str(); | ||
108 | |||
109 | curSpeaker = curSd.nextSpeaker.next(); | ||
110 | } | ||
111 | |||
112 | std::string output = theEnd.str(); | ||
113 | output.resize(280); | ||
114 | output = output.substr(0, output.find_last_of('\n')); | ||
115 | std::cout << output; | ||
116 | |||
117 | std::cout << std::endl; | ||
118 | std::cout << std::endl; | ||
119 | |||
120 | getc(stdin); | ||
121 | } | ||
122 | } | ||