For a student job i'm creating a neural network-based method of determining the probability that two written names are referring to the same person (e.g. what is the probability that kelly m. refers to kely möreson in a simplified example).
To train my network, i'm creating a simulation that generates populations with family structures and corresponding names. The simulation works, but the difficult part is to "corrupt" the data in a realistic way.
If one of the names from my simulation is "kris walton taylor", i'd like this entry to be corrupted in forms like "chris walton t.", "kris w.", "chris wolton tailor", "kris talor" and so on. Basically, all the different forms in which people would write the name based on hearing it.
I am using a tool from an academic institute in germany to convert the names into their most likely ipa representation for a given language: https://clarin.phonetik.uni-muenchen.de/BASWebServices/interface/Grapheme2Phoneme
Now, i'd like to use the list of ipa representations to convert them back into different ways of writing the name. In a perhaps naive attempt i've tried to create a library of all the different letters that can be associated with each ipa symbol and use that to randomly generate corrupted names, but this has given me completely unrealistic results (for example, kris was converted to kʀɪs in ipa, and when corrupted it gave me results like qrrees or ckryc).
I realize that the alphabetical letters associated with ipa symbols have a certain probability of being "chosen" based on the surrounding letters. This seems like a enormous task to codify from scratch however, so i'd like to check if there are any existing algorithms that attempt this?
To be clear: i'm not looking for an algorithm that gives me the most likely spelling. I'm looking for an algorithm that produces random spellings with a realistic probability.
For example:
Given the ipa string "bʀʊk", i'd like the algorithm to give me 6/9 times "brooke", 2/9 times "brook", and 1/9 times "bruke". This is a completely random and not academically proven example, i just want to illustrate the type of results that i'm looking for.
abbreviations and other types of corruption are not required, i already have working algorithms for those.
Does anyone know of a source that can help me along? It doesn't need to be an algorithm, just a set of written rules are already better than what i have now. I can turn the rules into a working algorithm myself.
Either a set of rules for english or spanish would be massively helpful, but i'm happy with any other language also!