diff --git a/Makefile b/Makefile index 4ce6a4d..3a7a198 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ # CXX = c++ -CXXFLAGS = -pthread -std=c++0x +CXXFLAGS = -pthread -std=c++0x -fPIC -m64 OBJS = args.o dictionary.o productquantizer.o matrix.o shmem_matrix.o qmatrix.o vector.o model.o utils.o fasttext.o INCLUDES = -I. ifneq ($(shell uname),Darwin) @@ -54,5 +54,11 @@ fasttext.o: src/fasttext.cc src/*.h fasttext: $(OBJS) src/fasttext.cc $(CXX) $(CXXFLAGS) $(OBJS) src/main.cc -o fasttext $(LINK_RT) +sent2vec.o: $(OBJS) src/sent2vec.cc src/*.h + $(CXX) $(CXXFLAGS) -c src/sent2vec.cc + +so: $(OBJS) sent2vec.o + $(CXX) $(CXXFLAGS) $(OBJS) sent2vec.o -shared -o libsent2vec.so $(LINK_RT) + clean: - rm -rf *.o fasttext + rm -rf *.o *.so fasttext diff --git a/src/sent2vec.cc b/src/sent2vec.cc new file mode 100644 index 0000000..66c9d28 --- /dev/null +++ b/src/sent2vec.cc @@ -0,0 +1,38 @@ + +#include "fasttext.h" + +using namespace fasttext; + +extern "C" void* loadModel(char* path) +{ + FastText* fastText = new FastText(); + (*fastText).loadModel(std::string(path)); + return fastText; +} + +extern "C" void freeModel(void* modelPtr) +{ + FastText* model = (FastText*)modelPtr; + free(model); +} + +extern "C" int getDimension(void* modelPtr) +{ + FastText* model = (FastText*)modelPtr; + return (*model).getDimension(); +} + +extern "C" void getSentenceVector( + void* modelPtr, + char* input, + float* svec +) +{ + FastText* model = (FastText*)modelPtr; + int dim = (*model).getDimension(); + std::vector strList(1); + strList[0] = std::string(input); + std::vector vector(dim); + (*model).textVectors(strList, 1, vector); + memcpy(svec, &vector[0], vector.size() * sizeof(float)); +}