#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
.