Cut the given context into sentences.
    Avoid a linebreak in between paried symbols, float numbers, and some abbrs.
    Nothing will be discard after sent_tokeinze, simply ''.join(sents) will get the original context.
    Evey whitespace, tab, linebreak will be kept.

    >>> context = "I love you. Please don't leave."
    >>> sent_tokenize(context)
    ["I love you. ", "Please don't leave."]

def sent_tokenize(context):
    """
    Cut the given context into sentences.
    Avoid a linebreak in between paried symbols, float numbers, and some abbrs.
    Nothing will be discard after sent_tokeinze, simply ''.join(sents) will get the original context.
    Evey whitespace, tab, linebreak will be kept.

    >>> context = "I love you. Please don't leave."
    >>> sent_tokenize(context)
    ["I love you. ", "Please don't leave."]
    """

    # Define the regular expression
    paired_symbols = [("(", ")"),
                  ("[", "]"),
                  ("{", "}")]
    paired_patterns = ["%s.*?%s" % (re.escape(lt), re.escape(rt)) for lt, rt in paired_symbols]
    number_pattern = ['\d+\.\d+']
    arr_pattern = ['(?: \w\.){2,3}|(?:\A|\s)(?:\w\.){2,3}|[A-Z]\. [a-z]|\svs\. |et al\.|Fig\. \d|approx\.|(?:Prof|Dr)\. (?:[A-Z]\.)?']

    # Find the string which matches the above pattern, and remove than from the context, to get a stem string
    escape_re = re.compile("|".join(paired_patterns + number_pattern + arr_pattern))
    escapes = escape_re.findall(context)
    escaped_stem = escape_re.sub('{}', context)

    escaped_escaped_stem = escaped_stem.replace('{','{{').replace('}', '}}')

    # Find the linebreaks
    sent_re = re.compile(r'([A-Z0-9]..+?(?:[.!?]\s+|[\n$]+))')
    linebreaks = sent_re.findall(escaped_escaped_stem)
    sent_stem = sent_re.sub(r'\1###linebreak###', escaped_escaped_stem)
    recovered_sent_stem = sent_stem.replace('{{}}', '{}')
    result = recovered_sent_stem.format(*escapes)
    return [r for r in result.split('###linebreak###') if r is not '']