您可以通过将候选字符串标记为双字母组 (成对的相邻字母)并根据英语双字母组频率表检查每个双字母组来实现。
- 很简单:如果频率表上的任何二元组足够低(或根本不存在),则认为该字符串不合理。 (字符串包含一个“ QZ”双字?拒绝!)
- 不太简单:用每个二元组的频率除以该长度的有效英语字符串的平均频率的乘积来计算整个字符串的总体合理性。这样一来,您既可以(a)接受一个带有奇数个低频二元组的字符串,也可以接受一个(b)拒绝一个包含几个单独的低但不完全低于阈值二元组的字符串。
这两种方法都需要对阈值进行一些调整,第二种技术要比第一种更加。
使用三字组合做同样的事情可能会更健壮,尽管这也可能导致一组更为严格的“有效”字符串。是否获胜取决于您的应用程序。
基于现有研究语料库的Bigram和Trigram表可能是免费提供或购买的(到目前为止,我没有免费提供,但只有一个粗略的google可用),但是您可以从自己的任何商品中计算出Bigram或Trigram表,大小的英文文本语料库。只需将每个单词作为标记进行曲柄处理,然后将每个双字母组合起来即可-您可以将其作为哈希处理,以给定的双字母组合作为键,并使用递增的整数计数器作为值。
英语形态和英语语音学(著名!)比等轴测少,因此,该技术很可能会生成“看起来”英语但出现麻烦发音的字符串。这是三元组而不是二元组的另一个论点—如果n-gram跨越整个声音,则通过分析依次使用多个字母来产生给定音素的声音而产生的怪异感将会减少。 (例如,以“低谷”或“海啸”为例。)
0
我有一种算法,可根据输入单词列表生成字符串。如何仅将听起来像英语单词的字符串分开?即。保留耶和华的同时丢弃RDLO 。
编辑:为澄清起见,它们不必是词典中的实际单词。他们只需要听起来像英语。例如, KEAL将被接受。