# Network of Phonological Relationships

Does there exist a definitive network or database that maps the relationships between phonetic symbols?

Similar to a word net, it would be a map representing the distance (or similarity) between phonetic symbols.

A primitive example of a Phonetic Network is the Soundex. It clusters sounds that are similar, and as such helps identify homophones or potential misspellings.

soundex clusters example: [a,e,i,o,u,y,h,w,NIL][b,f,p,v][c,g,j,k,q,s,x,z][d,t][l][m,n][r]

If the Soundex were a network, we would have, e.g; edge distances [b,f]: 0, [b,m]: \infty.

Have linguists compiled a more definitive, higher resolution map that covers the entire IPA, and where can I find it?

• Yes, features were invented in 1949. Nov 5, 2016 at 5:01
• @user6726 I'm sorry, what do you mean? Nov 5, 2016 at 15:59
• Do you know what phonological features are? Nov 5, 2016 at 16:19
• That is to say, if you Google "phonological features" you will find a lot of references and definitions. Though not necessarily what you're looking for. Nov 5, 2016 at 17:17
• @powersupply I understand that you want a distance between two phones in terms of their perceptual similarity. This is something language-specific - what is similar to speakers of one language, may be clearly separate for speakers of another language, and vice versa. Do you want to compute perceptual similarity from the point of view of a speaker of some specific language? Nov 5, 2016 at 17:46

To preface: "similarity" depends on the listener, as well as on the sound itself. Categorical perception is a powerful force. To a native English speaker aspiration is almost imperceptible, while /s/ and /θ/ are clearly distinct; to a native Hindi speaker, the opposite would be true.

The best way I know of to objectively define phonetic difference is in terms of distinctive features. Every sound can be written as a combination of these features: for instance, /t/ is a "voiceless alveolar plosive", meaning that it lacks the "voice" feature but has "alveolar" and "plosive".

Some features are boolean, such as "rounded" for a vowel. It's there or it isn't. Others have multiple comparable values, such as "place of articulation", where bilabial is closer to labiodental than it is to velar. Still others are generally incomparable, such as "manner of articulation" (is a click more like a fricative or an approximant?).

Unfortunately I don't know of any definitive, established network of phonemes based on these principles. But a distance metric could be established based on your needs.

For example, here's my attempt at a simple distance algorithm, written in Python (representing phonemes as dictionaries).

def featural_distance(a, b):
distance = 0
for key in set().union(a.keys(), b.keys()):
try:
if key in a and key not in b:
distance += int(a[key])
elif key in b and key not in a:
distance += int(b[key])
elif a[key] != b[key]:
distance += abs(int(a[key]) - int(b[key]))
except ValueError: # This will happen if either of the two has a string value. In that case, assume they can't be directly compared.
distance += 1
return distance

def parse_features(s):
d = {}
for word in s.split():
w = word.strip().lower()
d.update(features[w])
return d


And an example feature set:

features = {
'voiced'        : {'voice' : 1},
'voiceless'     : {'voice' : 0},

'bilabial'      : {'place' : 1},
'labiodental'   : {'place' : 2},
'dental'        : {'place' : 3},
'alveolar'      : {'place' : 4},
'retroflex'     : {'place' : 5},
'palatoalveolar': {'place' : 6},
'palatal'       : {'place' : 7},
'velar'         : {'place' : 8},
'uvular'        : {'place' : 9},
'pharyngeal'    : {'place' : 10},
'glottal'       : {'place' : 11},

'plosive'       : {'type' : 'p'},
'tap'           : {'type' : 't'},
'trill'         : {'type' : 'r'},
'nasal'         : {'type' : 'n'},
'fricative'     : {'type' : 'f'},
'approximant'   : {'type' : 'l'},
'vowel'         : {'type' : 'a'},

'lateral'       : {'lateral' : 1},

'high'          : {'height' : 1},
'mid'           : {'height' : 2},
'low'           : {'height' : 3},

'front'         : {'space' : 1},
'center'        : {'space' : 2},
'back'          : {'space' : 3},

'rounded'       : {'round' : 1},
'unrounded'     : {'round' : 0},

'aspirated'     : {'aspir' : 1},
'unaspirated'   : {'aspir' : 0},

'long'          : {'length' : 1},
'short'         : {'length' : 0},

}


So the distance from "voiced bilabial plosive" to "voiceless bilabial plosive" is 1, to "voiceless bilabial fricative" is 2, and to "voiceless labiodental fricative" is 3.

This certainly has its flaws: /u/ and /w/ are significantly farther apart than they probably should be, for instance, due to vowel and consonant articulation places being stored separately. A better feature set might take that into account and give them a distance of 1 or 2; this is left as an exercise for the reader.

I think I have a bit better handle on what you're looking for. At a linguistic level, each segment is representable as an integer where the nth bit is the + or - specification of the nth feature. The difference between any two segments is thus computable as the number of bits difference between the segments, and the "distance" is the number of different bits. So [b] and [p] which differ in exactly one feature have a distance of 1; [b] and [φ] differ in two features so have a distance of two. From this, you could generate "all the pairs that differ by 1; all the pairs that differ by 2". You can also compute differences in classes, for example [ptk] compared to [bdg] by masking off the bits that are not identical within each class.

For English spell-checking, this could be useless, but it might underlie the North Saami spell-checker, so ultimate utility depends on why you really care.