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
} На фоне роста спроса на ликвидность в бычьем рынке 2025 года, криптозаймы снова выходят на…
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…