A partial match of any kind is going to be hard because you have so many similar entries (i.e. the words "Director" and "Vice President" appear under multiple entries).
It is so hard to program something that will always work when you have so much similar data, and inconsistency in the data. It would be very difficult to come up with a solution that is 100% accurate.
If it is not possible to clean-up the data you get (i.e. get them to send more standard values that match your expected values), I think I would be more inclined to create a lookup table that contains EVERY possibility, and what you want to return, and then use a VLOOKUP formula, and then keep adding new entries to that table as you find new records with no match.