コード例 #1
0
def convert_many(token):
    """Convert several values."""
    values = token.group["value"]
    units = as_list(token.group.get("len_units", []))

    traits = []
    for i, value in enumerate(values):
        trait = Trait(start=token.start, end=token.end)
        if i < len(units):
            trait.units = units[i]
            trait.units_inferred = False
        else:
            trait.units = units[-1] if units else None
            trait.units_inferred = True
        trait.value = convert_units.convert_units(to_positive_float(value),
                                                  trait.units)
        if trait.value > TOO_BIG:
            continue
        add_flags(token, trait)
        traits.append(trait)
    return traits
コード例 #2
0
def shorthand_length(token, measurement=""):
    """Handle shorthand length notation like 11-22-33-44:55g."""
    trait = Trait(start=token.start, end=token.end)
    trait.value = to_positive_float(token.group.get(measurement))
    if not trait.value:
        return None
    trait.units = "mm_shorthand"
    trait.units_inferred = False
    trait.is_shorthand = True
    flag = measurement.split("_")[1]
    flag = f"estimated_{flag}"
    trait.is_flag_in_token(token, flag, rename="estimated_value")
    return trait
コード例 #3
0
def compound(token):
    """Handle a pattern like: 4 ft 9 in."""
    trait = Trait(start=token.start, end=token.end)
    trait.units = [token.group["feet"], token.group["inches"]]
    trait.units_inferred = False
    trait.is_flag_missing(token, "key", rename="ambiguous_key")
    fts = convert_units(to_positive_float(token.group["ft"]), "ft")
    ins = [
        convert_units(to_positive_float(i), "in")
        for i in as_list(token.group["in"])
    ]
    value = [round(fts + i, 2) for i in ins]
    trait.value = squash(value)
    add_flags(token, trait)
    return trait
コード例 #4
0
def compound(token):
    """Convert a compound weight like: 2 lbs. 3.1 - 4.5 oz."""
    trait = Trait(start=token.start, end=token.end)
    trait.units = [token.group["pounds"], token.group["ounces"]]
    trait.units_inferred = False
    trait.is_flag_missing(token, "key", rename="ambiguous_key")
    lbs = convert_units(to_positive_float(token.group["lbs"]), "lbs")
    ozs = [
        convert_units(to_positive_float(oz), "ozs")
        for oz in as_list(token.group["ozs"])
    ]
    value = [round(lbs + oz, 2) for oz in ozs]
    trait.value = squash(value)
    add_flags(token, trait)
    return trait
コード例 #5
0
def fraction(token):
    """Handle fractional values like 10 3/8 inches."""
    trait = Trait(start=token.start, end=token.end)
    trait.units = token.group.get("units")
    trait.units_inferred = not bool(trait.units)
    whole = to_positive_float(token.group.get("whole", "0"))
    numerator = to_positive_int(token.group["numerator"])
    denominator = to_positive_int(token.group["denominator"])
    try:
        trait.value = whole + Fraction(numerator, denominator)
    except TypeError:
        print(f"Fraction error: {numerator} / {denominator}")
        return None
    if trait.units:
        trait.value = convert_units(trait.value, trait.units)
    add_flags(token, trait)
    return trait