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