diff --git a/libcorpus2/io/relreader.cpp b/libcorpus2/io/relreader.cpp index a55f02c6a0ee08b3ed7cbdaf7c57263951cb0f9c..1fa75c0bcfa5f29c7a653802d4aad789314f8456 100644 --- a/libcorpus2/io/relreader.cpp +++ b/libcorpus2/io/relreader.cpp @@ -28,6 +28,8 @@ RelationReader::RelationReader(const std::string &rela_path) readed_ = false; in_relation_ = false; in_relations_ = false; + in_from_direct_ = false; + in_to_direct_ = false; file_.reset(new std::ifstream(rela_path.c_str(), std::ifstream::in)); @@ -73,9 +75,11 @@ void RelationReader::on_start_element(const Glib::ustring& name, parse_relation_name(attributes); } else if (in_relation_ && name == RELATION_DIRECT_FROM) { + in_from_direct_ = true; parse_direction_from(attributes); } else if (in_relation_ && name == RELATION_DIRECT_TO) { + in_to_direct_ = true; parse_direction_to(attributes); } else { @@ -84,6 +88,8 @@ void RelationReader::on_start_element(const Glib::ustring& name, } void RelationReader::on_end_element(const Glib::ustring& name) { + int annotation_number = 99999999; + if (name == RELATIONS_TAG) { in_relations_ = false; } @@ -96,6 +102,26 @@ void RelationReader::on_end_element(const Glib::ustring& name) { throw; } } + else if (in_from_direct_) { + std::istringstream (ann_number_) >> annotation_number; + rel_from_ = boost::make_shared<DirectionPoint>( + rel_from_->sentence_id(), + rel_from_->channel_name(), + annotation_number + ); + ann_number_ = ""; + in_from_direct_ = false; + } + else if (in_to_direct_) { + std::istringstream (ann_number_) >> annotation_number; + rel_to_ = boost::make_shared<DirectionPoint>( + rel_to_->sentence_id(), + rel_to_->channel_name(), + annotation_number + ); + ann_number_ = ""; + in_to_direct_ = false; + } else { // } @@ -156,8 +182,6 @@ void RelationReader::parse_direction(const AttributeList& attributes, std::string sentence_id = get_attribute_value(attributes, RELATION_SENTENCE_ID); std::string channel_name = get_attribute_value(attributes, RELATION_CHANNEL_NAME); - std::istringstream (ann_number_) >> annotation_number; - direct = boost::make_shared<DirectionPoint>( sentence_id, channel_name, annotation_number); } diff --git a/libcorpus2/io/relreader.h b/libcorpus2/io/relreader.h index 6ec9b79ebb76fd26379fcb71eca6e173f6d191c5..fea4cdab732f86ae2e12d53932a2f09f728cb8ed 100644 --- a/libcorpus2/io/relreader.h +++ b/libcorpus2/io/relreader.h @@ -105,6 +105,8 @@ private: bool readed_; bool in_relation_; bool in_relations_; + bool in_from_direct_; + bool in_to_direct_; /// File pointer boost::scoped_ptr<std::istream> file_; diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt index 1221f861eebe28ecc83369a949809965a8f616b3..732acec748b559786f3bace19959f4e8dc264396 100644 --- a/swig/CMakeLists.txt +++ b/swig/CMakeLists.txt @@ -12,6 +12,10 @@ link_directories(${Libcorpus2_BINARY_DIR}) FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) +FIND_PACKAGE(LibXML++ REQUIRED QUIET) +include_directories(${LibXML++_INCLUDE_DIRS}) + + find_package(PythonLibs) find_package(PythonInterp) # idea taken from pyplot build system diff --git a/swig/corpus2.i b/swig/corpus2.i index 83890f2fb1fa298d96ac843695b9e24615d61977..b925343a152e6c2e05c8aac41b7588b225e4c181 100644 --- a/swig/corpus2.i +++ b/swig/corpus2.i @@ -10,19 +10,22 @@ %include "annotationchannel.i" %include "annotationview.i" %include "chunk.i" +%include "document.i" +%include "documentreader.i" %include "iob.i" %include "lexeme.i" +%include "libpwrnlperror.i" %include "relation.i" +%include "relationreader.i" %include "sentence.i" %include "tag.i" +%include "tagging.i" %include "tagset.i" %include "tagsetmanager.i" %include "token.i" %include "tokenmetadata.i" %include "tokenreader.i" %include "tokenwriter.i" -%include "libpwrnlperror.i" -%include "tagging.i" %{ #include <libcorpus2/util/settings.h> diff --git a/swig/document.i b/swig/document.i new file mode 100644 index 0000000000000000000000000000000000000000..20fc12cd5dda5736c0be436eadbe327b3eb5b4b1 --- /dev/null +++ b/swig/document.i @@ -0,0 +1,33 @@ +#ifndef SWIG_LIBCORPUS2_DOCUMENT_I +#define SWIG_LIBCORPUS2_DOCUMENT_I + +%module libcorpusdocument +%{ + #include <libcorpus2/document.h> +%} + +%include "std_defs.i" +%include "chunk.i" +%include "relation.i" + +%template(DocumentPtr) boost::shared_ptr<Corpus2::Document>; +%template(ConstDocumentPtr) boost::shared_ptr<const Corpus2::Document>; + +namespace Corpus2 { + class Document { + public: + Document(); + ~Document(); + + void add_paragraph(const boost::shared_ptr<Chunk> para); + void add_relation(const boost::shared_ptr<Relation> relation); + + const std::vector< boost::shared_ptr<Chunk> >& paragraphs() const; + const std::vector< boost::shared_ptr<Relation> >& relations() const; + }; +} + +using namespace std; +using namespace Corpus2; + +#endif /* SWIG_LIBCORPUS2_DOCUMENT_I */ diff --git a/swig/documentreader.i b/swig/documentreader.i new file mode 100644 index 0000000000000000000000000000000000000000..1a4bf310479ec25181c39ff5d4afb6a8c41f9d93 --- /dev/null +++ b/swig/documentreader.i @@ -0,0 +1,26 @@ +#ifndef SWIG_LIBCORPUS2_DOCUMENTREADER_I +#define SWIG_LIBCORPUS2_DOCUMENTREADER_I + +%module libcorpusdocumentreader +%{ + #include <libcorpus2/io/docreader.h> +%} + +%include "document.i" +%include "boost_shared_ptr.i" + +namespace Corpus2 { + class DocumentReader { + public: + DocumentReader(const Tagset&, const std::string&, const std::string &); + boost::shared_ptr<Document> read(); + + /* --------------------------------------------------------------------- */ + ~DocumentReader(); + }; +} + +using namespace std; +using namespace Corpus2; + +#endif /* SWIG_LIBCORPUS2_DOCUMENTREADER_I */ diff --git a/swig/relationreader.i b/swig/relationreader.i new file mode 100644 index 0000000000000000000000000000000000000000..0fbd550bee2608bf50123dc09bb67be89472a0d1 --- /dev/null +++ b/swig/relationreader.i @@ -0,0 +1,20 @@ +#ifndef SWIG_LIBCORPUS2_RELATIONREADER_I +#define SWIG_LIBCORPUS2_RELATIONREADER_I + +%module libcorpusrelationreader +%{ + #include <libcorpus2/io/relreader.h> +%} + +namespace Corpus2 { + class RelationReader { + public: + RelationReader(const std::string &rela_path); + const std::vector< boost::shared_ptr<Relation> >& relations(); + }; +} + +using namespace std; +using namespace Corpus2; + +#endif /* SWIG_LIBCORPUS2_RELATIONREADER_I */