Couldn't Machine Learning be trained to do this? For example something similar in already built in training set - use the "FacebookTopic" built-in classifier to detect the topic of a Facebook post:
Classify["FacebookTopic", {"I bought a new computer", "happy birthday!", "this skirt looks nice"}]
{"Technology", "SpecialOccasions", "Fashion"}
You can come up with your own training sets, see examples here. Also I think could be done simpler via clustering. Say you can define relations between words. This is a toy example - not your case of course. Generate a network of "nearby" words in a dictionary:
words = DictionaryLookup["wol*"];
Flatten[Map[(Thread[# \[DirectedEdge] DeleteCases[Nearest[words, #, 3], #]]) &, words]];
CommunityGraphPlot@Graph[%, VertexLabels -> "Name", ImageSize -> 450]
Then determining to which cluster most of the words in your chain land, will result in getting another word from that cluster. I can imagine many other similar methods can be used.