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
|
#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include <sstream>
#include "../src/fst.h"
#define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x)
using namespace SFST;
const int GENERATE_MODE = 1;
const int ANALYSE_MODE = 2;
Transducer *transducer;
/**
* Initialize transducer.
*/
void init(char *transducer_filename) {
if (transducer_filename == NULL) {
printf("Please provide transducer file");
exit(1);
}
FILE *transducer_file;
transducer_file = fopen(transducer_filename, "rb");
if (transducer_file != NULL) {
transducer = new Transducer(transducer_file);
fclose(transducer_file);
} else {
perror("Could not read transducer file");
exit(1);
}
}
/*
* Destroys the transducer object.
* args: None
*/
void delete_transducer() { delete transducer; }
const vector<std::string> analyse(char *input) {
return transducer->analyze_string(input, true);
}
const vector<std::string> generate(char *input) {
return transducer->generate_string(input, true);
}
namespace py = pybind11;
PYBIND11_MODULE(sfst, m) {
m.def("init", &init, R"pbdoc(
Initialize transducer
)pbdoc");
m.def("analyse", &analyse, R"pbdoc(
Analyse a string
)pbdoc");
m.def("generate", &generate, R"pbdoc(
Generate a string
)pbdoc");
m.def("delete", &delete_transducer, R"pbdoc(
Delete the transducer instance
)pbdoc");
#ifdef VERSION_INFO
m.attr("__version__") = MACRO_STRINGIFY(VERSION_INFO);
#else
m.attr("__version__") = "dev";
#endif
}
|