1 #ifndef LANGUAGE_CLASSIFIER_H 2 #define LANGUAGE_CLASSIFIER_H 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <stdint.h> 7 #include <stdbool.h> 8 9 #include "collections.h" 10 #include "language_features.h" 11 #include "logistic_regression.h" 12 #include "matrix.h" 13 #include "tokens.h" 14 #include "sparse_matrix.h" 15 #include "string_utils.h" 16 #include "trie.h" 17 18 #define LANGUAGE_CLASSIFIER_FILENAME "language_classifier.dat" 19 20 typedef struct language_classifier { 21 size_t num_labels; 22 size_t num_features; 23 trie_t *features; 24 cstring_array *labels; 25 matrix_type_t weights_type; 26 union { 27 double_matrix_t *dense; 28 sparse_matrix_t *sparse; 29 } weights; 30 } language_classifier_t; 31 32 33 typedef struct language_classifier_response { 34 size_t num_languages; 35 char **languages; 36 double *probs; 37 } language_classifier_response_t; 38 39 // General usage 40 41 language_classifier_t *language_classifier_new(void); 42 language_classifier_t *get_language_classifier(void); 43 language_classifier_t *get_language_classifier_country(void); 44 45 language_classifier_response_t *classify_languages(char *address); 46 void language_classifier_response_destroy(language_classifier_response_t *self); 47 48 void language_classifier_destroy(language_classifier_t *self); 49 50 // I/O methods 51 52 language_classifier_t *language_classifier_load(char *path); 53 bool language_classifier_save(language_classifier_t *self, char *output_dir); 54 55 // Module setup/teardown 56 57 bool language_classifier_module_setup(char *dir); 58 void language_classifier_module_teardown(void); 59 60 61 #endif