Рубріки: Решения

Normalizer: опенсорс-библиотека для «нормализации» текста

Богдан Мирченко

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 – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023