Esempio n. 1
0
int main(int argc, char **argv) {
    char *arg;

    char *address = NULL;
    char *language = NULL;

    bool use_json = false;

    string_array *languages = NULL;

    for (int i = 1; i < argc; i++) {
        arg = argv[i];
        if (string_equals(arg, "-h") || string_equals(arg, "--help")) {
            printf(LIBPOSTAL_USAGE);
            exit(EXIT_SUCCESS);
        } else if (string_equals(arg, "--json")) {
            use_json = true;
        } else if (address == NULL) {
            address = arg;
        } else if (!string_starts_with(arg, "-")) {
            if (languages == NULL) {
                languages = string_array_new();
            }
            string_array_push(languages, arg);
        }
    }

    if (address == NULL && (!use_json || isatty(fileno(stdin)))) {
        log_error(LIBPOSTAL_USAGE);
        exit(EXIT_FAILURE);
    }

    if (!libpostal_setup() || (languages == NULL && !libpostal_setup_language_classifier())) {
        exit(EXIT_FAILURE);
    }

    normalize_options_t options = get_libpostal_default_options();

    if (languages != NULL) {
        options.languages = languages->a;
        options.num_languages = languages->n;
    }

    if (address == NULL) {
        char *line;
        while ((line = file_getline(stdin)) != NULL) {
            print_output(line, options, use_json);
            free(line);
        }
    } else {
        print_output(address, options, use_json);
    }

    if (languages != NULL) {
        string_array_destroy(languages);
    }

    libpostal_teardown();
    libpostal_teardown_language_classifier();
}
Esempio n. 2
0
/* Startup */
void _PG_init(void)
{
	if (!libpostal_setup() || 
	    !libpostal_setup_parser() ||
	    !libpostal_setup_language_classifier())
	{
		elog(ERROR, "Failed to initialize libpostal.");
	}
}
JNIEXPORT void JNICALL Java_com_mapzen_jpostal_AddressExpander_setup
  (JNIEnv *env, jclass cls) {

    if (!libpostal_setup() || !libpostal_setup_language_classifier()) {
        jclass exceptionClass;
        exceptionClass = (*env)->FindClass(env, "java/lang/RuntimeException");
        if (exceptionClass == NULL) return;
        (*env)->ThrowNew(env, exceptionClass, "Error loading libpostal expansion modules\n");
    }
}
Esempio n. 4
0
int main(int argc, char **argv) {
    if (argc < 3) {
        log_error("Usage: test_libpostal string languages...\n");
        exit(EXIT_FAILURE);
    }

    char *str = argv[1];
    char *languages[argc - 2];
    for (int i = 0; i < argc - 2; i++) {
        char *arg = argv[i + 2];
        if (strlen(arg) >= MAX_LANGUAGE_LEN) {
            printf("arg %d was longer than a language code (%d chars). Make sure to quote the input string\n", i + 2, MAX_LANGUAGE_LEN - 1);
        }
        languages[i] = arg;
    }

    if (!libpostal_setup()) {
        exit(EXIT_FAILURE);
    }

    normalize_options_t options = get_libpostal_default_options();

    options.num_languages = 1;
    options.languages = languages;

    size_t num_expansions;

    char **strings;
    char *normalized;

    int num_loops = 100000;

    token_array *tokens = tokenize(str);
    uint64_t num_tokens = tokens->n;
    token_array_destroy(tokens);

    clock_t t1 = clock();
    for (int i = 0; i < num_loops; i++) {
        strings = expand_address(str, options, &num_expansions);
        for (uint64_t i = 0; i < num_expansions; i++) {
            normalized = strings[i];
            free(normalized);
        }
        free(strings);
    }
    clock_t t2 = clock();

    double benchmark_time = (double)(t2 - t1) / CLOCKS_PER_SEC;
    printf("Benchmark time: %f\n", benchmark_time);
    double addresses_per_second = num_loops / benchmark_time;
    printf("addresses/s = %f\n", addresses_per_second);
    double tokens_per_second = (num_loops * num_tokens) / benchmark_time;
    printf("tokens/s = %f\n", tokens_per_second);
    libpostal_teardown();
}
int main(int argc, char **argv) {
    /*
     From http://codereview.stackexchange.com/questions/71970/creating-a-string-from-command-line-arguments
    */
    if(argc == 1) {
        printf("ERROR: Expected at least 1 argument\n");
        return 0;
    }

    int i, v = 1, size = argc - 1;
    int newsize  = 0;

    char *str = (char *)malloc(v);
    strcpy(str,"");

    for(i = 1; i <= size; i++) {
        newsize = newsize + 1 + sizeof(*str) +strlen(argv[i]);
        str = (char *)realloc(str, (newsize));
        strcat(str, argv[i]);
        strcat(str, " ");
    }


    // Setup (only called once at the beginning of your program)
    if (!libpostal_setup() || !libpostal_setup_parser()) {
        exit(EXIT_FAILURE);
    }

    /* 
        From https://github.com/openvenues/libpostal
     */
    address_parser_options_t options = get_libpostal_address_parser_default_options();
    address_parser_response_t *parsed = parse_address(str, options);

    for (size_t i = 0; i < parsed->num_components; i++) {
        printf("%s: %s\n", parsed->labels[i], parsed->components[i]);
    }

    // Free parse result
    address_parser_response_destroy(parsed);

    // Teardown (only called once at the end of your program)
    libpostal_teardown();
    libpostal_teardown_parser();
}
Esempio n. 6
0
int main(int argc, char **argv) {
    if (argc < 3) {
        log_error("Usage: test_libpostal string languages...\n");
        exit(EXIT_FAILURE);
    }
    char *str = argv[1];
    char *languages[argc - 2];
    for (int i = 0; i < argc - 2; i++) {
        char *arg = argv[i + 2];
        if (strlen(arg) >= MAX_LANGUAGE_LEN) {
            printf("arg %d was longer than a language code (%d chars). Make sure to quote the input string\n", i + 2, MAX_LANGUAGE_LEN - 1);
        }
        languages[i] = arg;
    }

    if (!libpostal_setup()) {
        exit(EXIT_FAILURE);
    }

    normalize_options_t options = LIBPOSTAL_DEFAULT_OPTIONS;
    options.languages = languages;

    uint64_t num_expansions;

    char **strings = expand_address(str, options, &num_expansions);

    char *normalized;
    for (uint64_t i = 0; i < num_expansions; i++) {
        normalized = strings[i];
        printf("%s\n", normalized);        
        free(normalized);
    }

    free(strings);

    libpostal_teardown();
}
Esempio n. 7
0
int main(int argc, char **argv) {
    char *address_parser_dir = LIBPOSTAL_ADDRESS_PARSER_DIR;
    char *history_file = "address_parser.history";

    if (argc > 1) {
        address_parser_dir = argv[1];
    }

    printf("Loading models...\n");

    if (!libpostal_setup() || !libpostal_setup_parser()) {
        exit(EXIT_FAILURE);
    }

    printf("\n");

    printf("Welcome to libpostal's address parser.\n\n");
    printf("Type in any address to parse and print the result.\n\n");
    printf("Special commands:\n\n");
    printf(".language [code] to specify a language\n");
    printf(".country [code] to specify a country\n");
    printf(".exit to quit the program\n\n");

    char *language = NULL;
    char *country = NULL;

    char *input = NULL;

    while((input = linenoise("> ")) != NULL) {

        if (input[0] != '\0') {
            linenoiseHistoryAdd(input); /* Add to the history. */
            linenoiseHistorySave(history_file); /* Save the history on disk. */
        }

        if (strcmp(input, ".exit") == 0) {
            printf("Fin!\n");
            free(input);
            break;
        } else if (strncmp(input, ".language", 9) == 0) {
            size_t num_tokens = 0;
            cstring_array *command = cstring_array_split(input, " ", 1, &num_tokens);
            if (num_tokens > 1) {
                if (language != NULL) {
                    free(language);
                }
                language = strdup(cstring_array_get_string(command, 1));
            } else {
                printf("Must specify language code\n");
            }

            cstring_array_destroy(command);
            goto next_input;
        } else if (strncmp(input, ".country", 8) == 0) {
            size_t num_tokens = 0;
            cstring_array *command = cstring_array_split(input, " ", 1, &num_tokens);
            if (cstring_array_num_strings(command) > 1) {
                if (country != NULL) {
                    free(country);
                }
                country = strdup(cstring_array_get_string(command, 1));
            } else {
                printf("Must specify country code\n");
            }

            cstring_array_destroy(command);
            goto next_input;
        } else if (strlen(input) == 0) {
            goto next_input;
        }

        address_parser_response_t *parsed;
        address_parser_options_t options = get_libpostal_address_parser_default_options();

        if ((parsed = parse_address(input, options))) {
            printf("\n");
            printf("Result:\n\n");
            printf("{\n");
            for (int i = 0; i < parsed->num_components; i++) {
                char *json_string = json_encode_string(parsed->components[i]);
                printf("  \"%s\": %s%s\n", parsed->labels[i], json_string, i < parsed->num_components - 1 ? "," : "");
            }
            printf("}\n");
            printf("\n");

            address_parser_response_destroy(parsed);
        } else {
            printf("Error parsing address\n");
        }

next_input:
        free(input);
    }

    libpostal_teardown();
    libpostal_teardown_parser();
}