Я строю лемматизатор на питоне. Поскольку мне нужно, чтобы он работал в реальном времени / обрабатывал довольно большой объем данных, скорость обработки имеет существенное значение. Данные: у меня есть все возможные суффиксы, связанные со всеми типами слов, с которыми они могут сочетаться. Кроме того, у меня есть лемма-формы, которые связаны как с их типами слов, так и с леммами. Программа берет слово на вход и выводит свою лемму. слово = лемма + суффикс
Например (Примечание: хотя пример приведен на английском языке, я не создаю лемматизатор для английского языка):
слово: запрещающий
лемма: запрещено
суффикс: ing
лемма: запретить
Мое решение:
Я преобразовал данные в (вложенные) словари:
suffixdict : {suffix1:[type1,type2, ... , type(n)], suffix2:[type1,type2, ... ,
type(n)]}
lemmaformdict : {lemmaform:{type1:lemma}}
1) Найдите все возможные суффиксы и типы слов, с которыми они связаны. Если самый длинный суффикс составляет 3 символа, программа пытается сопоставить 'ing', 'ng', 'n' с ключами в суффиксе. Если ключ существует, он возвращает значение (набор типов слов).
2) Для каждого совпадающего суффикса найдите лемму из словаря. Если леммаформа существует, она возвращает типы слов.
3) Наконец, программа пытается пересечь типы слов, созданные на шагах 1) и 2), и, если пересечение было успешным, она возвращает лемму слова.
Мой вопрос: есть ли лучшее решение моей проблемы с точки зрения скорости? (Не обращая внимания на возможность хранить частые слова и леммы в словаре) Помощь очень полезна.