Создание лемматизатора: оптимизация скорости

Я создаю лемматизатор на питоне. Поскольку мне нужно, чтобы он работал в реальном времени/обрабатывал довольно большой объем данных, скорость обработки имеет существенное значение. Данные: у меня есть все возможные суффиксы, связанные со всеми типами слов, с которыми они могут сочетаться. Кроме того, у меня есть леммоформы, которые связаны как с их типами слов, так и с леммами. Программа принимает слово на вход и выводит его лемму. слово = лемма из + суффикс

Например (Примечание: хотя пример дан на английском языке, я не создаю лемматизатор для английского):

слово: запрещающий

леммаформа: запрещающий

суффикс: 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), и если пересечение в случае успеха возвращает лемму слова.

Мой вопрос: может ли быть лучшее решение моей проблемы с точки зрения скорости? (без учета возможности оставлять в словаре часто встречающиеся слова и леммы) Помощь очень ценится.

5
задан root 23 March 2012 в 17:42
поделиться