为什么 Java 的 Double Metaphone 只给出四个字母的代码?

Why is Java's Double Metaphone only giving four letter codes?

我想使用 DoubleMetaphone 获取给定字符串的语音编码。例如:

import org.apache.commons.codec.language.DoubleMetaphone;
String s1 = "computer";
(new DoubleMetaphone()).doubleMetaphone(s1);

结果:计算机 -> KMPT

当我尝试对更长的字符串进行编码时出现问题。

import org.apache.commons.codec.language.DoubleMetaphone;
String s1 = "dustinhoffmanisanactor";
(new DoubleMetaphone()).doubleMetaphone(s1);

结果:dustinhoffmanisanactor -> TSTN

很明显,它使用前 4 个编码字符并停止。在这种情况下,达斯汀 -> TSTN。

我使用了 Double Metaphone 的 Python 实现,它按预期工作。

>>>from metaphone import doublemetaphone
>>>doublemetaphone("dustinhoffmanisanactor")[0]
"TSTNFMNSNKTR"

看来我需要设置最大代码长度。

String s1 = "dustinhoffmanisanactor";
DoubleMetaphone dm = new DoubleMetaphone();
dm.setMaxCodeLen(100);
dm.doubleMetaphone(s1);

这给出了预期的 TSTNFMNSNKTR