From d38918ca7fe49e7f07431b2246acfdbde360a06b Mon Sep 17 00:00:00 2001 From: Al Date: Thu, 5 May 2016 18:44:58 -0400 Subject: [PATCH] [directions] wrapper for adding cardinal/relative directions probabilistically --- scripts/geodata/addresses/directions.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/scripts/geodata/addresses/directions.py b/scripts/geodata/addresses/directions.py index 1ab0f39f..bf24b41d 100644 --- a/scripts/geodata/addresses/directions.py +++ b/scripts/geodata/addresses/directions.py @@ -1,4 +1,6 @@ +from geodata.addresses.config import address_config from geodata.addresses.numbering import NumericPhrase +from geodata.math.sampling import weighted_choice class RelativeDirection(NumericPhrase): @@ -9,3 +11,19 @@ class RelativeDirection(NumericPhrase): class CardinalDirection(NumericPhrase): key = 'cardinal_directions' dictionaries = ['cardinal_directions'] + + +class Direction(object): + CARDINAL = 'cardinal' + RELATIVE = 'relative' + + @classmethod + def random(cls, language, country=None, cardinal_proability=0.5): + values = [cls.CARDINAL, cls.RELATIVE] + probs_cdf = [cardinal_proability, 1.0] + + choice = weighted_choice(values, probs_cdf) + if choice == cls.CARDINAL: + return CardinalDirection.phrase(None, language, country=country) + else: + return RelativeDirection.phrase(None, language, country=country)