morfeusz.i
3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// XXX
// set module name with preprocessor
// because Mac OS X doesn't seem to recognize jniclassname option
#ifdef SWIGJAVA
%module MorfeuszWrapper
#else
%module morfeusz2
#endif
%feature("autodoc", "2");
%{
#include "Morfeusz.hpp"
#include "MorphInterpretation.hpp"
#include "exceptions.hpp"
#include "const.hpp"
%}
%include "std_vector.i"
%include "std_string.i"
%include "std_except.i"
%include "exception.i"
%exception
{
try{
$action
}
catch(const FileFormatException& e) {
SWIG_exception(SWIG_IOError, const_cast<char*>(e.what()));
}
catch(const std::exception& e) {
SWIG_exception(SWIG_RuntimeError, const_cast<char*>(e.what()));
}
catch(...) {
SWIG_exception(SWIG_RuntimeError, "Unknown exception");
}
}
#ifdef SWIGJAVA
%typemap(javaimports) Morfeusz %{
import java.io.IOException;
%}
%javaexception("java.io.IOException") Morfeusz::setAnalyzerFile {
try {
$action
}
catch(FileFormatException & e) {
jclass clazz = jenv->FindClass("java/io/IOException");
jenv->ThrowNew(clazz, "Invalid file format");
return $null;
}
}
%javaexception("java.io.IOException") Morfeusz::setGeneratorFile {
try {
$action
}
catch(FileFormatException & e) {
jclass clazz = jenv->FindClass("java/io/IOException");
jenv->ThrowNew(clazz, "Invalid file format");
return $null;
}
}
%include "enums.swg"
/* Force the generated Java code to use the C enum values rather than making a JNI call */
%javaconst(1);
%pragma(java) jniclasscode=%{
static {
System.loadLibrary("jmorfeusz");
}
%}
#endif
%ignore MorphInterpretation::MorphInterpretation(
int startNode,
int endNode,
const std::string& orth,
const std::string& lemma,
int tagnum,
int namenum,
const Tagset& tagset,
const CharsetConverter& charsetConverter);
%ignore MorphInterpretation::createIgn(int startNode, const std::string& orth, const Tagset& tagset, const CharsetConverter& charsetConverter);
%ignore Tagset::Tagset(const unsigned char* fsaData);
%include "Morfeusz.hpp"
%include "MorphInterpretation.hpp"
%include "const.hpp"
%include "exceptions.hpp"
// instantiate vector of interpretations
namespace std {
// dirty hack so it will compile without no-arg constructor for MorphInterpretation
%ignore vector<MorphInterpretation>::vector(size_type);
%ignore vector<MorphInterpretation>::resize;
%template(InterpsVector) vector<MorphInterpretation>;
}
#ifdef SWIGPYTHON
%pythoncode %{
def analyze(self, text):
res = InterpsVector()
_morfeusz2.Morfeusz_analyze(self, text, res)
return list(res)
Morfeusz.analyze = analyze
def getOrth(self):
return _morfeusz2.MorphInterpretation_getOrth(self).decode('utf8')
def getLemma(self):
return _morfeusz2.MorphInterpretation_getLemma(self).decode('utf8')
def getTag(self):
return _morfeusz2.MorphInterpretation_getTag(self).decode('utf8')
def getName(self):
return _morfeusz2.MorphInterpretation_getName(self).decode('utf8')
MorphInterpretation.getOrth = getOrth
MorphInterpretation.getLemma = getLemma
MorphInterpretation.getTag = getTag
MorphInterpretation.getName = getName
%}
#endif