ValueError при переборе массива - PullRequest
0 голосов
/ 12 октября 2018

Мы с другом используем 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.У него нет проблем с запуском нашего скрипта.Насколько мы можем судить, нет никаких различий в окружающей среде, которые могли бы сделать это проблемой.

...