нечеткое сопоставление на основе словаря

Я хочу сопоставить вхождения сущностей в SeqString. Например:

dict_data = ['johnson', 'apple platform']
SeqString = 'Johnson buys a new phone which is based on Apppple Platform. Johnson very likes the Apple Platform.'

Ожидаемые результаты:

Совпадение 1: Джонсон ‹=> johnson, start_char:0, end_char:7, оценка сходства

Совпадение 2: Платформа Apple ‹=> платформа Apple, start_char: 43, end_char: 59, показатель сходства

Совпадение 3: Джонсон ‹=> johnson, start_char:61, end_char:68, оценка сходства

Совпадение 4: платформа Apple ‹=> платформа Apple, start_char:84, end_char:98, оценка сходства

Короче говоря, dict_data очень большой. Я хочу сопоставить объекты в dict_data с порогом.

Я попытался:

  1. библиотека SpaCy. Однако он основан на точном совпадении. Он не может обрабатывать Apppple Platform.

  2. fuzzywuzzy, в которой есть метод SequenceMatcher.get_matching_blocks(), однако "тройки монотонно возрастают по i и по j". Это означает, что он не может соответствовать второму вхождению johnson.

Любое решение для моего случая?


person futurelj    schedule 24.07.2018    source источник


Ответы (1)


В зависимости от того, сколько данных у вас есть, вы можете рассмотреть возможность использования точных совпадений для создания обучающих данных для обучения пользовательских сущностей в NER с помощью (https://spacy.io/usage/training#section-ner). NER должен иметь возможность выполнять нечеткое сопоставление (и многое другое). Тем не менее, вы должны попытаться убедиться, что вы сохраняете тексты, которые будут соответствовать только нечетким данным обучения (в противном случае вы будете обучать NER так, чтобы он также не обнаруживал платформу Apppple).

person Ron Rademaker    schedule 01.08.2018