$termData = \Drupal::entityTypeManager()
->loadByProperties(['vid' => 'vocabulary_name']);
Always works :D
If you also have the name it is
->loadByProperties(['name' => $term, 'vid' => 'selected_keyword']);
If you need the id from what is returned
// returns an array with the tid as ...
Below are a couple of things you can try to reduce duplicates caused by a multi-value field. Results will vary depending on your particular view.
1. Use aggregation
Under "Other" in Advanced options, enable Use aggregation.
Locate the offending field under "Sort criteria". Click on Aggregration settings, then select Aggregation type: Maximum.
2. Filter ...
You achieve this with a multi-level taxonomy. Your country name would be the term on the top level and then the historic names would exist as children terms. You could write some code to infer the root term based on the historic term selected. Maybe as simple as having a second field on your entity and just populating it with the historic term's parent on ...
You can do this in a custom field type based on the core reference field, adding a second property and dynamically filling the options of the select list depending on the first property.
For the multi-value part of your question a non-coding solution would be a paragraph containing both fields. Adding the dynamic behavior can then be done in a form alter ...