Приблизительная библиотека регулярных выражений для Java?

Я только что написал некоторый код для приблизительного сопоставления строк. Я хотел бы сравнить своего наивного алгоритма с более сформировавшейся реализацией, работающей на JVM. Какие-либо предложения?

1
задан Gabriel Mitchell 17 July 2010 в 20:20
поделиться

2 ответа

Я нашел эти ответы в другом месте на этом сайте для аналогичных проблем.

Commons Lang имеет реализацию расстояния Левенштейна.
http://commons.apache.org/lang/api-release/org/apache/commons/lang/StringUtils.html

Commons Codec имеет реализацию саундекса и метафона.
http://commons.apache.org/codec/api-release/org/apache/commons/codec/language/Soundex.html
http://commons.apache.org/codec/api-release/org/apache/commons/codec/language/Metaphone.html

(source)

Lucene (http://lucene.apache.org/) также реализует расстояние Левенштейна.

(source: zarawesome)

2
ответ дан 2 September 2019 в 22:58
поделиться

Так получилось, что я изобрел это колесо много лет назад - в программе на FORTRAN на мэйнфрейме :)

Когда я с гордостью рассказывал о своем алгоритме другим людям в Интернете, они смеялись и указывали мне на два (четыре?) больших имени в этой области:

Это алгоритмы для сравнения огромных последовательностей похожих строк. Требуется память около m + n, где m и n - размеры строк, а время работы - около m * n.

Gunslinger47 упоминает Levenshtein, Soundex и Metaphone. Левенштейн также является мощным средством вычисления расстояний между строками, но он лучше подходит для "нормального" текста. Soundex и Metaphone вычисляют короткую строку, предназначенную для кодирования звука строки при произнесении человеком... они становятся неэффективными примерно после 3 слогов, они действительно предназначены для слов в человеческом языке, а не для строк геномов или тому подобного.

EDIT

Упс, я только что нашел свои 4 громких имени внизу статьи, которую вы цитировали. Так что вы уже знаете о них. Я думаю, что если вы проведете поиск по этим именам и "Java", вы должны найти их реализации. Вот первое, что я нашел.

0
ответ дан 2 September 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: