Package Exports
- @cymen/node-postal
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@cymen/node-postal) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
node-postal
These are the NodeJS bindings to libpostal, a fast, multilingual NLP library for parsing/normalizing physical addresses. libpostal is written in C because virtually every other language can bind to C.
@cymen/node-postal (npm @cymen/node-postal) is a hopefully temporary fork of openvenues/node-postal (npm node-postal). The fork was created in order to get the pending PRs merged for Node.js v12 compatibility.
Usage
var postal = require('node-postal');
// Expansion API
postal.expand.expand_address('V XX Settembre, 20');
// Parser API
postal.parser.parse_address('Barboncino 781 Franklin Ave, Crown Heights, Brooklyn, NY 11238');Installation
Before using the Node bindings, you must install the libpostal C library. Make sure you have the following prerequisites:
On Ubuntu/Debian
sudo apt-get install curl autoconf automake libtool pkg-configOn CentOS/RHEL
sudo yum install curl autoconf automake libtool pkgconfigOn Mac OSX
brew install curl autoconf automake libtool pkg-configInstalling libpostal
git clone https://github.com/openvenues/libpostal
cd libpostal
./bootstrap.sh
./configure --datadir=[...some dir with a few GB of space...]
make
sudo make install
# On Linux it's probably a good idea to run
sudo ldconfigInstall node-gyp
Then install node-gyp system-wide:
sudo npm install -g node-gypInstalling node-gyp on Linux (Ubuntu)
First make sure you have:
- gcc, g++ and make (
sudo apt-get install build-essentialon Ubuntu) - NodeJS with all the development headers (if using a package manager like apt-get, follow the instructions here: https://nodejs.org/en/download/package-manager/)
- python 2.7
Installing the Node bindings
npm install cymen/node-postalCompatibility
node-postal is tested on most major versions of Node (0.10+) in continuous integration. The C++ bindings are written using Nan, which abstracts the API changes across various versions of V8, so the latest versions of Node will likely work.
If you're having trouble compiling, post a Github issue with your OS and Node versions along with the output of npm install / node-gyp rebuild.
Tests
To run the unit tests:
npm testTroubleshooting
Installing libpostal:
node-postal is a thin wrapper around libpostal, which is written in C. Installing node-postal with npm will not install libpostal as a dependency. The install steps described above will install it in standard locations for your OS. For OS X and Linux, that's /usr/local/include and /usr/local/lib. node-postal will look in these locations for the C libraries. If you have problems installing node-postal, check there for recently installed libpostal libraries.
Downloading Large Files
The make process downloads ~750MB of data, ~2GB unzipped (note: these are production-quality machine learning models trained on over a billion addresses, that's how much disk/memory it takes). Make sure the --datadir argument to configure, which requires an absolute path, has enough room to accommodate the models. If you get errors after downloading, e.g.:
make[3]: *** [all-local] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2there may be problems with subsequent install steps. Occasionally something will go wrong and it will give up downloading. Once downloading is complete, the make script will unpack the langauge_classifier.tar.gz.X files. If you see these files, your download may have stopped. Try running the make script again.
Special Thanks
Lucas Hrabovsky (https://github.com/imlucas) for information and examples of repos using Nan, node-gyp, etc.