def capitalize(self): """ Capitalization Support ---------------------- The HumanName class can try to guess the correct capitalization of name entered in all upper or lower case. It will not adjust the case of names entered in mixed case. Usage:: >>> name = HumanName('bob v. de la macdole-eisenhower phd') >>> name.capitalize() >>> u(name) u'Bob V. de la MacDole-Eisenhower Ph.D.' >>> # Don't touch good names >>> name = HumanName('Shirley Maclaine') >>> name.capitalize() >>> u(name) u'Shirley Maclaine' """ name = u(self) if not (name == name.upper() or name == name.lower()): return self.title_list = self.cap_piece(self.title).split(' ') self.first_list = self.cap_piece(self.first).split(' ') self.middle_list = self.cap_piece(self.middle).split(' ') self.last_list = self.cap_piece(self.last).split(' ') self.suffix_list = self.cap_piece(self.suffix).split(' ')
def __ne__(self, other): return not (u(self)).lower() == (u(other)).lower()
def __eq__(self, other): """ HumanName instances are equal to other objects whose lower case unicode representations are the same """ return (u(self)).lower() == (u(other)).lower()
def _parse_full_name(self): """ Parse full name into the buckets """ if not isinstance(self._full_name, text_type): self._full_name = u(self._full_name, self.ENCODING) self.parse_nicknames() # collapse multiple spaces self._full_name = re.sub(re_spaces, u" ", self._full_name.strip() ) # break up full_name by commas parts = [x.strip() for x in self._full_name.split(",")] log.debug(u"full_name: {0}".format(self._full_name)) log.debug(u"parts: {0}".format(parts)) if len(parts) == 1: # no commas, title first middle middle middle last suffix pieces = self._parse_pieces(parts) for i, piece in enumerate(pieces): try: nxt = pieces[i + 1] except IndexError: nxt = None # title must have a next piece, unless it's just a title if self.is_title(piece) and (nxt or len(pieces) == 1): self.title_list.append(piece) continue if not self.first: self.first_list.append(piece) continue if (i == len(pieces) - 2) and self.is_suffix(nxt): self.last_list.append(piece) self.suffix_list.append(nxt) break if not nxt: self.last_list.append(piece) continue self.middle_list.append(piece) else: if lc(parts[1]) in self.SUFFIXES_C: # suffix comma: title first middle last, suffix [, suffix] self.suffix_list += parts[1:] pieces = self._parse_pieces(parts[0].split(' ')) log.debug(u"pieces: {0}".format(u(pieces))) for i, piece in enumerate(pieces): try: nxt = pieces[i + 1] except IndexError: nxt = None if self.is_title(piece) and (nxt or len(pieces) == 1): self.title_list.append(piece) continue if not self.first: self.first_list.append(piece) continue if not nxt: self.last_list.append(piece) continue self.middle_list.append(piece) else: # lastname comma: last, title first middles[,] suffix [,suffix] pieces = self._parse_pieces(parts[1].split(' '), 1) log.debug(u"pieces: {0}".format(u(pieces))) self.last_list.append(parts[0]) for i, piece in enumerate(pieces): try: nxt = pieces[i + 1] except IndexError: nxt = None if self.is_title(piece) and (nxt or len(pieces) == 1): self.title_list.append(piece) continue if not self.first: self.first_list.append(piece) continue if self.is_suffix(piece): self.suffix_list.append(piece) continue self.middle_list.append(piece) try: if parts[2]: self.suffix_list += parts[2:] except IndexError: pass if len(self) < 0: log.info(u"Unparsable full_name: " + self._full_name) else: self.unparsable = False