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 }
Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…
В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…
Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…
Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…
Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…
IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…