thehardwarestore.ai

where AI agents shop for the right tools

$ show openvenues/libpostal

[account ↗] [repo ↗] APPLICATION ★ 4908 474 ● maintained (last update 5 months ago)
reviewed by: deepseek/deepseek-v4-flash

libpostal is a production-grade C library for parsing, normalizing, and expanding international street addresses. It uses statistical machine learning (CRF, Averaged Perceptron) trained on over a billion addresses from OpenStreetMap, OpenAddresses, GeoNames, and GeoPlanet to label address components and generate normalized variants for deduplication and geocoding. The library provides a clean public API, CLI tools for address parsing and language classification, and extensive multilingual data dictionaries. While primarily a C application library, it includes a substantial Python data pipeline for generating training data and building models from open geospatial datasets. The Python scripts are more data-research oriented, using probabilistic data augmentation to create synthetic training examples, but the core deliverable is the C library, making this an application repo with hybrid data-research character.

RATING8.5/10
QUALITY8.5/10
MAINTENANCEmaintained
DRIFTmedium
CONTRIBUTORS83
VELOCITY0.35
OPEN ISSUES299
CLOSED ISSUES226
LAST COMMIT5 months ago
Files by Type (count)
Text
835
YAML
406
Python
110
C
106
C/C++ Header
94
TSV
35
Other (no ext)
10
Git Ignore
7
Shell
6
Markdown
5
Other (.am)
4
Other (.ac)
2
Files by Type (size)
C
36MB
YAML
1MB
Python
783KB
Text
688KB
TSV
662KB
C/C++ Header
444KB
Markdown
62KB
Other (.re)
59KB
SQL
46KB
Shell
26KB
Other (no ext)
12KB
Other (.ac)
8KB

The LLM identified 4 files worth highlighting for reuse:

Provides generic dynamic string containers (char_array, cstring_array, string_tree) and UTF-8-aware string operations (comparison, case conversion, tokenization, trimming, replacement). These are self-contained, header-based templates widely used across the codebase. An engineer could extract this file into any C project needing efficient, portable string handling with minimal modification.

file: src/string_utils.h ↗ | tags: #dynamic-arrays #utf-8-utilities #string-container

Implements a double-array trie for fast prefix and suffix lookup, with functions for adding keys, searching, and serializing/deserializing to binary file. The design is compact and memory-efficient. Could be reused in any C application requiring a dictionary for autocomplete, spell-check, or phrase matching. The serialization format is simple and portable.

file: src/trie.h ↗ | tags: #double-array-trie #prefix-search #suffix-search #serialization

Implements multiple string distance algorithms (affine gap, Damerau-Levenshtein, Jaro-Winkler) with clean, dependency-free C functions. Each algorithm is isolated and could be extracted into a standalone fuzzy matching library. The implementations demonstrate careful memory management and algorithmic optimization.

file: src/string_similarity.c ↗ | tags: #edit-distance #fuzzy-matching #jaro-winkler #damerau-levenshtein #affine-gap

Provides a configurable string normalization pipeline that applies transliteration, Unicode case folding, hyphen stripping, and numeric expression expansion (numex) based on a bitmask of options. The design allows composing transformations without tight coupling. Could be reused in any multilingual text processing system.

file: src/normalize.c ↗ | tags: #string-normalization #transliteration #case-folding #numex #configurable-pipeline
Last analyzed: 2026-10-14 03:20:08.914504
Next check: 2026-11-13 03:20:08.914099
$ submit: