Febrl's geocode matching engine is based on the G-NAF inverted index data, and takes a rule-based approach to find an exact match or alternatively one or more approximate matches. It's input is one or many cleaned and standardised user record(s).
The matching engine tries to find an exact match first, but if none can be found it extends its search to neighbouring postcode and suburb regions. First direct neighbouring regions (level 1) are searched, then direct and indirect neighbouring regions (level 2), until either an exact match or a set of approximate matches can been found. In the latter case, either an average location over all the found matches is returned, or a ranked (according to a matching weight) list of possible matches. The following steps explain in more detail (but still on a high conceptual level) how the matching engine works.
neighbour_level
to 0 (no
neighbouring regions are searched).
neighbour_level
. Locality names are first searched using
exact string comparison, and if no locality name match can be
found approximate string matching will be applied, allowing to
find matches with typographical errors.
Postcodes are only used in the matching process if they result
in the same matches as the locality names (i.e. if they
contribute to these matches). If postcodes result in different
matches, they are not used in the final match (this is because
postcodes are not fixed locality regions, but can be changed by
Australia Post at any time).
street_locality_match
to
True
(otherwise set it to False
).
address_locality_match
to
True
(otherwise set it to False
).
address_street_match
to True
(otherwise set it to False
).
neighbour_level
has to be increased), according to
the values of the matching flags. A match has been found if all
three match flags are True
, or if there was no address
level match and the street_locality_match
flag is
True
, or if there was no street level match and the
address_locality_match
flag is True
, or if there
was no locality level match and the
address_street_match
flag is True
. If no match
has been found then increase the neighbour_level
(up to
a maximum of 2) and jump back to step 3.
match_level
(to
either address
, street
or locality
).
'no_match'
match status.