Нечеткое сопоставление строк в Python для структурированных строк?

У меня есть реализация Python нечеткого сопоставления с использованием подобия Левенштейна. Я очень доволен этим, но я чувствую, что многое оставляю на столе, не учитывая структуру струн.

Вот несколько примеров совпадений, которые явно хороши, но Левенштейн не уловил их хорошо:

  • The Hobbit / Hobbit/The
  • Charlies Angles / Charlie's Angels
  • Apples & Pairs / Apples and Pairs

Я думаю, что некоторая нормализация перед использованием Левенштейна была бы хорошей - например. заменить все & на and, удалить знаки препинания и т. д. ... не уверен, что хочу сразу перейти к удалению стоп-слов и лематизации, но что-то в этом роде

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

Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
0
0
82
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

да, вы можете использовать некоторую предварительную обработку, как показано ниже, и удалить небуквенно-цифровые символы или преобразовать все в нижний регистр или дополнительные пробелы:

def preprocess_string(s):
    s = s.lower()
    
    s = s.replace('&', 'and')
    
    s = re.sub(r'[^a-z0-9 ]', '', s)
    
    s = re.sub(r'\s+', ' ', s).strip()

    s = re.sub(r'&', 'and', s).strip()
    
    return s

на самом деле предварительная обработка всегда имеет решающее значение для такого рода сравнения.

Я ищу какое-то стандартное применение этих замен, я бы не хотел заново изобретать все нормализации.

MYK 05.04.2023 16:44
Ответ принят как подходящий

rapidfuzz.utils.default_process может быть вариантом для предварительной обработки.

Rapidfuzz.utils.default_process(предложение: ул) → ул Эта функция предварительно обрабатывает строку:

  • удаление всех не буквенно-цифровых символов
  • удаление пробелов
  • перевод всех символов в нижний регистр

ПАРАМЕТРЫ: предложение (str) – строка для предварительной обработки

ВОЗВРАТ: обрабатываемая_строка – обработанная строка

ТИП ВОЗВРАТА: ул

https://maxbachmann.github.io/RapidFuzz/Usage/utils.html

Другие вопросы по теме

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

Получение входного текста из конвейера трансформаторов
ValueError: Вход 0 слоя "conv1d" несовместим со слоем: ожидается min_ndim=3, найдено ndim=2. Получена полная форма: (Нет, 128)
Как интерпретировать атрибут model_max_len объекта PreTrainedTokenizer в Huggingface Transformers
Я получаю сообщение об ошибке torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse) при вызове функции train.train() модели GPT2
AttributeError: объект «список» не имеет атрибута «сходство» при использовании средства извлечения плотных проходов (сосновой шишки) в Haystack – Python
Какова классификационная голова обнимающего лица AutoModelForTokenClassification Model
Как вычислить недоумение на уровне предложения из языковых моделей объятий?
Панды добавляют строковые токены в список с соответствующим столбцом, где эти столбцы в этих строковых строках имеют одинаковое значение
SBERT дает одинаковый результат независимо от того, что
Что ({!Lookup.minorType == country}) означает в JAPE для GATE