Thank you for your help, I appreciate your time.
This is not a standard problem but you should be able to roughly do this using two basic kinds of tools that usually go together anyway:
Use an NER system to identify people (as opposed to organizations) in sentences. Most systems have a default model that flags people.
Use an Open Information Extraction system to get relation triples from sentences like
(Sarah, has, brown_hair). See OpenIE for an example. You could also use a dependency parser.
So you take the relationships you get from the tools in part 2 and throw out any where the referrent/noun isn't a person. If you have to deal with relative clauses like in your first example ("John, who was..."), you'll also have to deal with coreference resolution, which is its own complicated problem.