From eef5de613c75661e5d94baa086f6f2ddc26c7ed0 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Thu, 24 Mar 2016 23:16:07 -0400 Subject: Added verb frames In addition: - Added prepositions. - Rewrote a lot of the query interface. It now, for a lot of relationships, supports nested AND, OR, and NOT logic. - Rewrote the token class. It is now a union-like class instead of being polymorphic, which means smart pointers are no longer necessary. - Querying with regards to word derivation has been temporarily removed. - Sentinel values are now supported for all word types. - The VerbNet data retrieved from http://verbs.colorado.edu/~mpalmer/projects/verbnet/downloads.html was found to not be perfectly satisfactory in some regards, especially regarding adjective phrases. A patch file is now included in the repository describing the changes made to the VerbNet v3.2 download for the canonical verbly datafile. --- lib/frame.h | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 lib/frame.h (limited to 'lib/frame.h') diff --git a/lib/frame.h b/lib/frame.h new file mode 100644 index 0000000..fa57e1b --- /dev/null +++ b/lib/frame.h @@ -0,0 +1,118 @@ +#ifndef FRAME_H_9A5D90FE +#define FRAME_H_9A5D90FE + +namespace verbly { + + class frame_query; + + class frame { + public: + class selrestr { + public: + enum class type { + empty, + singleton, + group + }; + + type get_type() const; + selrestr(const selrestr& other); + ~selrestr(); + selrestr& operator=(const selrestr& other); + + // Empty + selrestr(); + + // Singleton + selrestr(std::string restriction, bool pos); + std::string get_restriction() const; + bool get_pos() const; + + // Group + selrestr(std::list children, bool orlogic); + std::list get_children() const; + std::list::const_iterator begin() const; + std::list::const_iterator end() const; + bool get_orlogic() const; + + private: + union { + struct { + bool pos; + std::string restriction; + } _singleton; + struct { + std::list children; + bool orlogic; + } _group; + }; + type _type; + }; + + class part { + public: + enum class type { + noun_phrase, + verb, + literal_preposition, + selection_preposition, + adjective, + adverb, + literal + }; + + type get_type() const; + part(const part& other); + ~part(); + + // Noun phrase + std::string get_role() const; + selrestr get_selrestrs() const; + std::set get_synrestrs() const; + + // Literal preposition + std::vector get_choices() const; + + // Selection preposition + std::vector get_preprestrs() const; + + // Literal + std::string get_literal() const; + + private: + friend class frame_query; + + part(); + + union { + struct { + std::string role; + selrestr selrestrs; + std::set synrestrs; + } _noun_phrase; + struct { + std::vector choices; + } _literal_preposition; + struct { + std::vector preprestrs; + } _selection_preposition; + struct { + std::string lexval; + } _literal; + }; + type _type; + }; + + std::vector parts() const; + std::map roles() const; + + private: + friend class frame_query; + + std::vector _parts; + std::map _roles; + }; + +}; + +#endif /* end of include guard: FRAME_H_9A5D90FE */ -- cgit 1.4.1