def _splitNameByAbbreviations(parts):
    """
    If a name contains abbreviations, then split so that first name is abbreviated parts and last name is parts that
    are not abbreviated.
    
    :param parts: Individual words in the name
    :raises: ValueError if parts cannot be partitioned into given and family name
    :returns: Two values: Given name, Family name
    """
    if len(parts[0]) == 1 or parts[0].endswith('.'):
        for i in range(1, len(parts)):
            if len(parts[i]) > 1 and not parts[i].endswith('.'):
                return ' '.join(parts[:i]), ' '.join(parts[i:])
    raise ValueError('Could not split name on abbreviations')