def full_name_natural_split(full_name, middle_initials=True):
    """
    This function splits a full name into a natural first name, last name
    and middle initials.
    """
    parts = full_name.strip().split(' ')
    first_name = ''
    if parts:
        first_name = parts.pop(0)
    if first_name.lower() == 'el' and parts:
        first_name += ' ' + parts.pop(0)
    last_name = ''
    if parts:
        last_name = parts.pop()
    if last_name.lower() == 'i' or last_name.lower(
        ) == 'ii' or last_name.lower() == 'iii' and parts:
        last_name = parts.pop() + ' ' + last_name
    if middle_initials:
        mid_name = ''
        for middle_name in parts:
            if middle_name:
                mid_name += middle_name[0]
    else:
        mid_name = ' '.join(parts)
    return first_name, mid_name, last_name
