TL;DR - Names are complex, simply ask the person for an unicode representation of how they'd like to be called and use exactly that.
1. Any reasonable assumptions or generealizations that you could try to make about names are wrong for millions of people, so don't make any.
2. There is no reasonable way to automatically split a person name in meaningful parts, because there is no such thing as a single universal ontology of meaningful name parts that will fit everyone. Treat personal names as indivisible, immutable items; don't try to separate them in parts.
3. There is no reasonable way to automatically generate a short-polite-addressable form from a full name, aside from (a) asking the user or (b) limiting yourself to a whitelisted subset of names that won't work for millions of USA citizens, much less globally. So don't even try.
4. Don't assume that you can infer [non]existence of family relations from their names. You can't.