2016-12-15 19 views
3

Я пытаюсь понять, как работает функция fuzzywuzzy модуля python process.extract()?python fuzzywuzzy's process.extract(): как это работает?

В основном я читал о пакете fuzzywuzzy здесь: http://chairnerd.seatgeek.com/fuzzywuzzy-fuzzy-string-matching-in-python/, который является отличным сообщением, объясняющим разные сценарии при попытке выполнить нечеткое сопоставление. Они обсудили несколько сценариев для частичной схожести строк:

1) Out Of Order
2) маркеров Sort
3) токена

И затем, с этого поста: https://pathindependence.wordpress.com/2015/10/31/tutorial-fuzzywuzzy-string-matching-in-python-improving-merge-accuracy-across-data-products-and-naming-conventions/ я научился используйте функцию process.extract() функции fuzzywuzzy, чтобы в основном выбрать верхние k совпадений.

Я не могу найти слишком много информации о том, как работает функция process.extract(). Вот определение/информация, которую я нашел на своей странице GitHub (https://github.com/seatgeek/fuzzywuzzy/blob/master/fuzzywuzzy/process.py), что эта функция:

Найти лучшие матчи в списке или словаре выбора, возвращает список кортежей, содержащих матч, и это оценка. Если используется словарь , он также возвращает ключ для каждого совпадения.

Однако, он не содержит деталей относительно того, как это найти лучшее? Потребовались ли все три описанных выше сценария, чтобы найти это?

Причина, по которой я прошу, состоит в том, что, когда я использовал эту функцию, иногда есть две строки, которые очень похожи, но не совпадают.

, например, в моем текущем наборе выборки данных, для чтобы быть матч-строки

«Общее время восстановления запасов (в рабочие дни)»

он сравнивается с

"PLANNING_TIME_FENCE_CODE", "BUILD_IN_WIP_FLAG"

но не (правильный ответ)

«FULL_LEAD_TIME»

Даже если правильный ответ имеет «заблаговременности» так же, как к-быть-матч-строка делает, это не соответствует к строке соответствия для всех. ЗАЧЕМ? и каким-то образом другие, которые не похожи на строку соответствия, должны быть сопоставлены. ЗАЧЕМ? Теперь я совершенно не знаю.

ответ

1

Существует четыре соотношения в сравнении с fuzzywuzzy.

  • base_ratio: Левенштейн Расстояние от двух струн.
  • partial_ratio: Отношение большинства подобных подстрок.
  • token_sort_ratio: Измерение сходства последовательностей, сортирующих токен перед сравнением.
  • token_set_ratio: Найти все буквенно-цифровые маркеры в каждой строке.

Более подробную информацию о рационе можно найти здесь http://chairnerd.seatgeek.com/fuzzywuzzy-fuzzy-string-matching-in-python/

process.extract() По умолчанию использование Partial_ratio для сравнения, но вы также можете изменить его с помощью третьего параметра process.extract()

Ex.

print(fuzz.partial_ratio('Total replenishment lead time (in workdays)', 'Lead_time_planning')) 
query = 'Total replenishment lead time (in workdays)' 
choices = ['PLANNING_TIME_FENCE_CODE', 'BUILD_IN_WIP_FLAG','Lead_time_planning'] 
print(process.extract(query, choices)) 

Результаты будут:

50 
[('Lead_time_planning', 50), ('PLANNING_TIME_FENCE_CODE', 38), ('BUILD_IN_WIP_FLAG', 26)] 

Это показывает, что по умолчанию с помощью partial_ratio, которые вы можете переопределить в любое время.

 Смежные вопросы

  • Нет связанных вопросов^_^