Почему двойной метафон Java выдает только четырехбуквенные коды?

#java #codec #phonetics #metaphone

#java #кодек #фонетика #метафон

Вопрос:

Я хочу использовать 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 закодированных символа и останавливается. В данном случае Dustin -> TSTN.

Я использовал реализацию Double Metaphone на Python, и она работает так, как ожидалось.

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

Комментарии:

1. Какую версию org.apache.commons.codec.language.DoubleMetaphone вы используете?

2. Я использую 1.9. Думаю, теперь проблема решена 🙂

3. Размер по умолчанию равен 4, см. github.com/apache/commons-codec/blob /…

Ответ №1:

Кажется, мне нужно было установить максимальную длину кода.

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

Что дает ожидаемое TSTNFMNSNKTR .