summary refs log tree commit diff stats
path: root/lib/frame.cpp
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2017-01-23 11:49:51 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2017-01-23 11:49:51 -0500
commit9bd863c9002b525b7827f9158d9136143393be5c (patch)
tree6b210e9d55286c93a0f3ddd55d2b10d1efa88e99 /lib/frame.cpp
parent9e36dbbe74fd9541f0431b7715d3f97895384d28 (diff)
downloadverbly-9bd863c9002b525b7827f9158d9136143393be5c.tar.gz
verbly-9bd863c9002b525b7827f9158d9136143393be5c.tar.bz2
verbly-9bd863c9002b525b7827f9158d9136143393be5c.zip
Added verb frame parsing
Diffstat (limited to 'lib/frame.cpp')
-rw-r--r--lib/frame.cpp89
1 files changed, 82 insertions, 7 deletions
diff --git a/lib/frame.cpp b/lib/frame.cpp index bc3f842..3ce95ec 100644 --- a/lib/frame.cpp +++ b/lib/frame.cpp
@@ -1,21 +1,96 @@
1#include "frame.h" 1#include "frame.h"
2#include <sqlite3.h> 2#include <sqlite3.h>
3#include <json.hpp>
3 4
4namespace verbly { 5namespace verbly {
5 6
6 const object frame::objectType = object::frame; 7 const object frame::objectType = object::frame;
7 8
8 const std::list<std::string> frame::select = {"frame_id", "data"}; 9 const std::list<std::string> frame::select = {"frame_id", "data"};
9 10
10 const field frame::id = field::integerField(object::frame, "frame_id"); 11 const field frame::id = field::integerField(object::frame, "frame_id");
11 12
12 const field frame::group = field::joinThrough(object::frame, "frame_id", object::group, "groups_frames", "group_id"); 13 const field frame::group = field::joinThrough(object::frame, "frame_id", object::group, "groups_frames", "group_id");
13 14
14 frame::frame(const database& db, sqlite3_stmt* row) : db_(&db), valid_(true) 15 frame::frame(const database& db, sqlite3_stmt* row) : db_(&db), valid_(true)
15 { 16 {
16 id_ = sqlite3_column_int(row, 0); 17 id_ = sqlite3_column_int(row, 0);
17 18
18 // TODO: Initialize frame data from row. 19 // TODO: Initialize frame data from row.
20 std::string partsJsonStr(reinterpret_cast<const char*>(sqlite3_column_blob(row, 1)));
21 nlohmann::json partsJson = nlohmann::json::parse(std::move(partsJsonStr));
22
23 for (const nlohmann::json& partJson : partsJson)
24 {
25 part::type partType = static_cast<part::type>(partJson["type"].get<int>());
26
27 switch (partType)
28 {
29 case part::type::noun_phrase:
30 {
31 std::set<std::string> synrestrs;
32 for (const nlohmann::json& synrestrJson : partJson["synrestrs"])
33 {
34 synrestrs.insert(synrestrJson.get<std::string>());
35 }
36
37 parts_.push_back(part::createNounPhrase(
38 partJson["role"].get<std::string>(),
39 selrestr(partJson["selrestrs"]),
40 std::move(synrestrs)));
41
42 break;
43 }
44
45 case part::type::preposition:
46 {
47 std::vector<std::string> choices;
48 for (const nlohmann::json& choiceJson : partJson["choices"])
49 {
50 choices.push_back(choiceJson.get<std::string>());
51 }
52
53 parts_.push_back(part::createPreposition(
54 std::move(choices),
55 partJson["literal"].get<bool>()));
56
57 break;
58 }
59
60 case part::type::verb:
61 {
62 parts_.push_back(part::createVerb());
63
64 break;
65 }
66
67 case part::type::adjective:
68 {
69 parts_.push_back(part::createAdjective());
70
71 break;
72 }
73
74 case part::type::adverb:
75 {
76 parts_.push_back(part::createAdverb());
77
78 break;
79 }
80
81 case part::type::literal:
82 {
83 parts_.push_back(part::createLiteral(partJson["value"].get<std::string>()));
84
85 break;
86 }
87
88 case part::type::invalid:
89 {
90 throw std::domain_error("Invalid part data");
91 }
92 }
93 }
19 } 94 }
20 95
21}; 96};