Мы с другом используем FuzzyWuzzy для приблизительного сопоставления строк (представьте, что lol), чтобы найти заданный вход в массиве, который мы сгенерировали из JSON (в частности, JSON Steam API).
Вот код, который мы используем для создания массива из JSON, где path
- это путь к JSON, сохраненному на диске, а array_location
- просто для извлечения только идентификаторов игр и названий игр.
def array_from_json_file(path, array_location):
array = {}
with open(path, encoding='utf-8') as f:
array = json.load(f)
array = enumerate_json(array, array_location)
return array
А вот код, который перебирает весь список для нечеткого сопоставления, где query
- пользовательский ввод, data
- массив, который мы сгенерировали из JSON, а str_location
- это толькопоиск по именам вместо идентификаторов
def fuzzy_query(query, data, str_location):
results = []
for i in range(0, len(data)):
target = enumerate_json(data[i], str_location)
if (len(target) > 1):
strength = fuzz.partial_ratio(query.lower(), target.lower()) # This is where the issue is
results.append((strength, data[i]))
return results
Наконец, обратная связь, которую я получаю при запуске скрипта
Traceback (most recent call last):
File "main.py", line 81, in <module>
main()
File "main.py", line 73, in main
query_results = fuzzy_query(query, games, ["name"])
File "main.py", line 45, in fuzzy_query
strength = fuzz.partial_ratio(query.lower(), target.lower())
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\fuzzywuzzy\utils.py", line 38, in decorator
return func(*args, **kwargs)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\fuzzywuzzy\utils.py", line 29, in decorator
return func(*args, **kwargs)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\fuzzywuzzy\utils.py", line 47, in decorator
return func(*args, **kwargs)
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\fuzzywuzzy\fuzz.py", line 47, in partial_ratio
blocks = m.get_matching_blocks()
File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\fuzzywuzzy\StringMatcher.py", line 59, in get_matching_blocks
self._str1, self._str2)
ValueError: apply_edit edit operations are invalid or inapplicable
У меня и моего друга одинаковые версии в обеих версиях Python (v3.6.6) и версия FuzzyWuzzy (v0.17.0).Он использует Ubuntu, а я использую Windows 10 LTSB.У него нет проблем с запуском нашего скрипта.Насколько мы можем судить, нет никаких различий в окружающей среде, которые могли бы сделать это проблемой.