00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "PyPipe.h"
00025
00026 namespace Tanl {
00027 namespace NER {
00028
00029 Enumerator<Sentence*>* NER::pipe(PyObject* pit)
00030 {
00031
00032 if (PyIter_Check(pit))
00033 return new NerPyPipe(*this, pit);
00034 return 0;
00035 }
00036
00037
00038 struct PySwigObject {
00039 PyObject_HEAD
00040 void* ptr;
00041 void* ty;
00042 int own;
00043 PyObject* next;
00044 };
00045
00046 NerPyPipe::NerPyPipe(NER& ner, PyObject* pit) :
00047 ner(ner),
00048 eventStream(ner.resources),
00049 pit(pit)
00050 {
00051 Py_INCREF(pit);
00052 }
00053
00054 NerPyPipe::~NerPyPipe()
00055 {
00056 Py_DECREF(pit);
00057 }
00058
00059 void NerPyPipe::Dispose()
00060 {
00061 ner.decRef();
00062 delete this;
00063 }
00064
00065 bool NerPyPipe::MoveNext()
00066 {
00067 next = PyIter_Next(pit);
00068 return next;
00069 }
00070
00071 static void* extract_swig_wrapped_pointer(PyObject* obj)
00072 {
00073 PyObject* thisAttr = PyObject_GetAttrString(obj, "this");
00074 if (thisAttr == NULL)
00075 return NULL;
00076
00077 void* pointer = ((PySwigObject*)thisAttr)->ptr;
00078 Py_DECREF(thisAttr);
00079 return pointer;
00080 }
00081
00082 Sentence* NerPyPipe::Current()
00083 {
00084
00085 PyObject* iterator = PyObject_GetIter(next);
00086 if (iterator == NULL) {
00087
00088 }
00089
00090 vector<Token*>* sentence = new vector<Token*>();
00091 PyObject* item;
00092 while (item = PyIter_Next(iterator)) {
00093
00094 Token* tok = (Token*)extract_swig_wrapped_pointer(item);
00095 sentence->push_back(tok);
00096 Py_DECREF(item);
00097 }
00098
00099 Py_DECREF(iterator);
00100
00101 if (PyErr_Occurred()) {
00102
00103 }
00104 return ner.tag(sentence, &eventStream);
00105 }
00106
00107 }
00108 }