Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 41 additions & 34 deletions pyap/source_US/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ def states_abbrvs_regex() -> str:

numbered_road_re = r"""[Ss][Tt][Aa][Tt][Ee]\ [Rr][Oo][Aa][Dd]\ \d{1,4}(?!\d)"""

numbered_route_re = r"""[Rr][Oo][Uu][Tt][Ee]\ \d{1,4}(?!\d)"""
numbered_route_re = r"""(?:[Uu][Ss]\ )?[Rr][Oo][Uu][Tt][Ee]\ \#?\d{1,4}(?!\d)"""

numbered_alternate = (
r"""(?:[Aa][Ll][Tt]|[Aa][Ll][Tt][Ee][Rr][Nn][Aa][Tt][Ee])\ \d{1,4}(?!\d)"""
Expand All @@ -268,41 +268,45 @@ def states_abbrvs_regex() -> str:
states=states_abbrvs_regex()
)


# Used to handle edge cases where streets don't have a street type:
# eg. `55 HIGHPOINT`, `600 HIGHWAY 32`
numbered_or_typeless_street_name = r"""
(?P<typeless_street_name>
(?:{post_direction_re}{space_div})?
(?:
{single_street_name_regex}
|
[Aa][Tt]\ {interstate_street_type}
|
{highway_re}
|
{numbered_avenue_re}
|
{numbered_road_re}
|
{numbered_route_re}
|
{numbered_alternate}
|
{numbered_state_highway}
def numbered_or_typeless_street_name(idx: str) -> str:
return r"""
(?P<typeless_street_name_{idx}>
(?:{post_direction_re}{space_div})?
(?:
{single_street_name_regex}
|
[Aa][Tt]\ {interstate_street_type}
|
{highway_re}
|
{numbered_avenue_re}
|
{numbered_road_re}
|
{numbered_route_re}
|
{numbered_alternate}
|
{numbered_state_highway}
)
)
""".format(
idx=idx,
post_direction_re=post_direction_re,
space_div=space_div,
single_street_name_regex=str_list_to_upper_lower_regex(single_street_name_list),
interstate_street_type=interstate_street_type,
highway_re=highway_re,
numbered_avenue_re=numbered_avenue_re,
numbered_road_re=numbered_road_re,
numbered_route_re=numbered_route_re,
numbered_alternate=numbered_alternate,
numbered_state_highway=numbered_state_highway,
)
""".format(
post_direction_re=post_direction_re,
space_div=space_div,
single_street_name_regex=str_list_to_upper_lower_regex(single_street_name_list),
interstate_street_type=interstate_street_type,
highway_re=highway_re,
numbered_avenue_re=numbered_avenue_re,
numbered_road_re=numbered_road_re,
numbered_route_re=numbered_route_re,
numbered_alternate=numbered_alternate,
numbered_state_highway=numbered_state_highway,
)


post_direction = r"""
(?P<post_direction>
Expand Down Expand Up @@ -1128,7 +1132,7 @@ def street_type_extended(idx: str) -> str:
(?:
{street_number}{space_div}?
(?:
(?:{numbered_or_typeless_street_name})
(?:{numbered_or_typeless_street_name_a})
|
(?:{typed_street_name}(?![A-Za-z\d\.]))
|
Expand All @@ -1144,6 +1148,8 @@ def street_type_extended(idx: str) -> str:
\d{{1,4}}{space_div}{post_direction_re}{space_div}
\d{{1,4}}{space_div}{post_direction_re}
)
|
(?:{numbered_or_typeless_street_name_b})
)
(?P<line2>
(?:{part_div}{floor})?
Expand All @@ -1161,7 +1167,8 @@ def street_type_extended(idx: str) -> str:
part_div=part_div,
street_number=street_number,
typed_street_name=typed_street_name,
numbered_or_typeless_street_name=numbered_or_typeless_street_name,
numbered_or_typeless_street_name_a=numbered_or_typeless_street_name("a"),
numbered_or_typeless_street_name_b=numbered_or_typeless_street_name("b"),
street_type=street_type_extended("c"),
post_direction=post_direction,
post_direction_re=post_direction_re,
Expand Down
6 changes: 5 additions & 1 deletion tests/test_parser_us.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,9 @@ def test_street_name(input, expected):
)
def test_numbered_or_typeless_street_name(input, expected):
"""tests positive string match for a street name"""
execute_matching_test(input, expected, data_us.numbered_or_typeless_street_name)
execute_matching_test(
input, expected, data_us.numbered_or_typeless_street_name("a")
)


@pytest.mark.parametrize(
Expand Down Expand Up @@ -525,6 +527,7 @@ def test_po_box_positive(input, expected):
("6123 SHEFFIELD HOUSE", True),
("99 Valley Greens Dr\nSouth Tower", True),
("612 NC 54 Apt B77", True),
("US ROUTE #25", True),
# negative assertions
("6 95 34 75 COMPANY PHONE IS", False),
(", 666 Hell ST PMB 29700", False),
Expand Down Expand Up @@ -665,6 +668,7 @@ def test_full_street_positive(input, expected):
("1234 LONG LANE\nB2 \nUPPER DARBY PA 19082", True),
("567-55 Arlington Terrace Fl1 \nJamaica, NY 11435", True),
("612 NC 54 Apt B77 \nCarrboro, NC 27510-6105", True),
("US ROUTE #25\nMEGAVILLE NJ 08876", True),
# negative assertions
("123 Nw Awesome Drive\n12345", False),
("ONE HEALING CENTER LLC, 16444", False),
Expand Down
Loading