Merge pull request #683 from openvenues/lang_classifier_gcc14

Using exported libpostal_language_classifier_response_t struct throughout, fixes #677
This commit is contained in:
Al B
2025-01-30 14:14:37 -05:00
committed by GitHub
10 changed files with 22 additions and 27 deletions

View File

@@ -1567,7 +1567,7 @@ cstring_array *expand_address_phrase_option(char *input, libpostal_normalize_opt
size_t len = strlen(input);
language_classifier_response_t *lang_response = NULL;
libpostal_language_classifier_response_t *lang_response = NULL;
if (options.num_languages == 0) {
lang_response = classify_languages(input);
@@ -1627,7 +1627,7 @@ cstring_array *expand_address_phrase_option(char *input, libpostal_normalize_opt
kh_destroy(str_set, unique_strings);
if (lang_response != NULL) {
language_classifier_response_destroy(lang_response);
libpostal_language_classifier_response_destroy(lang_response);
}
char_array_destroy(temp_string);

View File

@@ -46,7 +46,7 @@ language_classifier_t *get_language_classifier(void) {
return language_classifier;
}
void language_classifier_response_destroy(language_classifier_response_t *self) {
void language_classifier_response_destroy(libpostal_language_classifier_response_t *self) {
if (self == NULL) return;
if (self->languages != NULL) {
free(self->languages);
@@ -59,7 +59,7 @@ void language_classifier_response_destroy(language_classifier_response_t *self)
free(self);
}
language_classifier_response_t *classify_languages(char *address) {
libpostal_language_classifier_response_t *classify_languages(char *address) {
language_classifier_t *classifier = get_language_classifier();
if (classifier == NULL) {
@@ -88,7 +88,7 @@ language_classifier_response_t *classify_languages(char *address) {
size_t n = classifier->num_labels;
double_matrix_t *p_y = double_matrix_new_zeros(1, n);
language_classifier_response_t *response = NULL;
libpostal_language_classifier_response_t *response = NULL;
bool model_exp = false;
if (classifier->weights_type == MATRIX_DENSE) {
model_exp = logistic_regression_model_expectation(classifier->weights.dense, x, p_y);
@@ -129,7 +129,7 @@ language_classifier_response_t *classify_languages(char *address) {
free(indices);
response = malloc(sizeof(language_classifier_response_t));
response = malloc(sizeof(libpostal_language_classifier_response_t));
response->num_languages = num_languages;
response->languages = languages;
response->probs = probs;

View File

@@ -6,6 +6,8 @@
#include <stdint.h>
#include <stdbool.h>
#include "libpostal.h"
#include "collections.h"
#include "language_features.h"
#include "logistic_regression.h"
@@ -29,21 +31,14 @@ typedef struct language_classifier {
} weights;
} language_classifier_t;
typedef struct language_classifier_response {
size_t num_languages;
char **languages;
double *probs;
} language_classifier_response_t;
// General usage
language_classifier_t *language_classifier_new(void);
language_classifier_t *get_language_classifier(void);
language_classifier_t *get_language_classifier_country(void);
language_classifier_response_t *classify_languages(char *address);
void language_classifier_response_destroy(language_classifier_response_t *self);
libpostal_language_classifier_response_t *classify_languages(char *address);
void language_classifier_response_destroy(libpostal_language_classifier_response_t *self);
void language_classifier_destroy(language_classifier_t *self);

View File

@@ -29,7 +29,7 @@ int main(int argc, char **argv) {
}
language_classifier_response_t *response = classify_languages(address);
libpostal_language_classifier_response_t *response = classify_languages(address);
if (response == NULL) {
printf("Could not classify language\n");
exit(EXIT_FAILURE);

View File

@@ -34,7 +34,7 @@ double test_accuracy(char *filename) {
continue;
}
language_classifier_response_t *response = classify_languages(address);
libpostal_language_classifier_response_t *response = classify_languages(address);
if (response == NULL || response->num_languages == 0) {
printf("%s\tNULL\t%s\n", language, address);
continue;

View File

@@ -119,7 +119,7 @@ char **libpostal_near_dupe_hashes_languages(size_t num_components, char **labels
char **libpostal_place_languages(size_t num_components, char **labels, char **values, size_t *num_languages) {
language_classifier_response_t *lang_response = place_languages(num_components, labels, values);
libpostal_language_classifier_response_t *lang_response = place_languages(num_components, labels, values);
if (lang_response == NULL) {
*num_languages = 0;
return NULL;

View File

@@ -670,7 +670,7 @@ cstring_array *near_dupe_hashes_languages(size_t num_components, char **labels,
libpostal_normalize_options_t normalize_options = libpostal_get_default_options();
language_classifier_response_t *lang_response = NULL;
libpostal_language_classifier_response_t *lang_response = NULL;
if (num_languages == 0) {
lang_response = place_languages(num_components, labels, values);

View File

@@ -17,10 +17,10 @@ static inline bool is_address_text_component(char *label) {
);
}
language_classifier_response_t *place_languages(size_t num_components, char **labels, char **values) {
libpostal_language_classifier_response_t *place_languages(size_t num_components, char **labels, char **values) {
if (num_components == 0 || values == NULL || labels == NULL) return NULL;
language_classifier_response_t *lang_response = NULL;
libpostal_language_classifier_response_t *lang_response = NULL;
char *label;
char *value;

View File

@@ -32,7 +32,7 @@ typedef struct place {
char *website;
} place_t;
language_classifier_response_t *place_languages(size_t num_components, char **labels, char **values);
libpostal_language_classifier_response_t *place_languages(size_t num_components, char **labels, char **values);
place_t *place_new(void);

View File

@@ -94,15 +94,15 @@ inline bool sparse_matrix_add_unique_columns_alias(sparse_matrix_t *matrix, khas
}
uint32_array *sparse_matrix_unique_columns(sparse_matrix_t *matrix) {
khash_t(int_set) *unique_columns = kh_init(int_set);
khash_t(int_uint32) *unique_columns = kh_init(int_uint32);
uint32_array *ret = uint32_array_new();
if (sparse_matrix_add_unique_columns(matrix, unique_columns, ret)) {
kh_destroy(int_set, unique_columns);
kh_destroy(int_uint32, unique_columns);
return ret;
}
kh_destroy(int_set, unique_columns);
kh_destroy(int_uint32, unique_columns);
uint32_array_destroy(ret);
return NULL;
}