In the example, if `extraction_class` can be any string, how does it know that "relationship" implies it should have attributes "character_1" and "character_2" when your example data didn't?