Normalizer — это библиотека с открытым исходным кодом для очистки, нормализации и сравнения текста, выпущенная под лицензией MIT. Библиотека, созданная разработчиком Валентином Хомутенко, написана на Go и позволяет, например, преобразовать строку кода в нижний регистр или быстро заменить «ё» на «е». Полученные значения затем можно сравнивать или использовать в качестве уникальных идентификаторов.
Чтобы установить Normalizer, нужно выполнить следующую команду:
go get -u github.com/avito-tech/normalize
package main import ( "fmt" "github.com/avito-tech/normalize" ) func main() { fuzzy := "VAG-1101" clean := normalize.Normalize(fuzzy) fmt.Print(clean) // vag1101 manyFuzzy := []string{"VAG-1101", "VAG-1102"} manyClean := normalize.Many(manyFuzzy) fmt.Print(manyClean) // {"vag1101", "vag1102"} }
Библиотека по умолчанию работает по следующим принципам:
ё
и й
, заменяются на общие эквиваленты — е
и и
;В (в)
превращается в В (b)
. Автор призывает проверить все заменяющиеся пары через команду WithCyrillicToLookAlike
;ä
, ö
, ü
преобразуются в латинские a
, o
, u
;Расстояние Левенштейна используется для вычисления расстояния между строками:
package main import ( "fmt" "github.com/avito-tech/normalize" ) func main() { fuzzy := "Hyundai-Kia" otherFuzzy := "HYUNDAI" similarityThreshold := 0.3 result := normalize.AreStringsSimilar(fuzzy, otherFuzzy, similarityThreshold) // distance(hyundaikia, hyundai) = 3 // 3 / len(hyundaikia) = 0.3 fmt.Print(result) // true }
Свойства AreStringsSimilar
и Normalize
принимают произвольное количество нормализаторов в качестве обязательного параметра. Автор отмечает, что здесь нормализатор — это любая функция, которая принимает строку и возвращает ее.
Например, опция ниже оставить строку без изменений:
package main import "github.com/avito-tech/normalize" func WithNoNormalization() normalize.Option { return func(str string) string { return str } }
Согласно документации, нормализацию можно настроить только на нужные параметры. Например, использовать только нижний регистр или преобразование кириллицы в латиницу.
package main import ( "fmt" "github.com/avito-tech/normalize" ) func main() { fuzzy := "АВ-123" clean := normalize.Normalize(fuzzy, normalize.WithLowerCase(), normalize.WithCyrillicToLatinLookAlike()) fmt.Print(clean) // ab-123 }
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…