Ошибка памяти Python3 при изменении большого набора данных - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь реализовать symspell в python3 (64 бит), и у меня есть текстовый файл размером 20 МБ, который содержит слова с частотами. Я могу успешно загрузить эти данные в словарь с именем originalDictionary. В качестве следующего шага для каждого слова в словаре я должен удалять по одному символу за раз, а также добавлять это измененное слово в другой словарь с именем editDictionary. Но я получил ошибку памяти. Я запускаю это на Windows10 (x64) с 16 ГБ ОЗУ. Что я могу сделать, чтобы решить эту проблему?

 for word in originalDictionary:
    for i in range(len(word)):
        edit1 = word[0:i] + word[i + 1:]
        if edit1 not in editedDictionary:
            editedDictionary[edit1] = [word]
        else:
            editedDictionary[edit1].append(word)

Ниже приведена ошибка:

    Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2018.3.2\helpers\pydev\pydevd.py", line 1741, in <module>
    main()
  File "C:\Program Files\JetBrains\PyCharm 2018.3.2\helpers\pydev\pydevd.py", line 1735, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Program Files\JetBrains\PyCharm 2018.3.2\helpers\pydev\pydevd.py", line 1135, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm 2018.3.2\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/ee/PycharmProjects/SymSpell/spellCorrector.py", line 98, in <module>
    createDictionaries()
  File "C:/Users/ee/PycharmProjects/SymSpell/spellCorrector.py", line 40, in createDictionaries
    editedDictionary[edit1] = [word]
MemoryError

1 Ответ

0 голосов
/ 28 июня 2019

В последней версии алгоритма SymSpell вы можете определить длину префикса. Только внутри этого префикса удаляются. Более короткая длина префикса значительно снижает потребление памяти за счет более медленного времени поиска. Длина префикса = 5 обычно является хорошим компромиссом.

Доступен порт Python для SymSpell, который поддерживает настройку длины префикса: https://github.com/mammothb/symspellpy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...