Разбор слов в (префикс, корень, суффикс) в Python

Я пытаюсь создать простой синтаксический анализатор для некоторых текстовые данные. (Текст на языке, для которого NLTK не имеет синтаксических анализаторов.)

По сути, у меня есть ограниченное количество префиксов, которые могут состоять из одной или двух букв; слово может иметь более одного префикса. У меня также есть ограниченное количество суффиксов из одной или двух букв. Все, что находится между ними, должно быть «корнем» слова. Многие слова будут иметь больше одного возможного разбора, поэтому я хочу ввести слово и получить список возможных анализов в виде кортежа (префикс, корень, суффикс).

Однако я не могу понять, как структурировать код. Я вставил пример одного из способов, который я пробовал (используя некоторые фиктивные данные на английском языке, чтобы сделать его более понятным), но это явно неправильно. Во-первых, это действительно уродливо и избыточно, поэтому я уверен, что есть лучший способ сделать это. Во-вторых, это не работает со словами, которые имеют более одного префикса или суффикса, или оба префикса (ов) и суффикса (ов).

Есть мысли?

prefixes = ['de','con']
suffixes = ['er','s']

def parser(word):
    poss_parses = []
    if word[0:2] in prefixes:
        poss_parses.append((word[0:2],word[2:],''))
    if word[0:3] in prefixes:
        poss_parses.append((word[0:3],word[3:],''))
    if word[-2:-1] in prefixes:
        poss_parses.append(('',word[:-2],word[-2:-1]))
    if word[-3:-1] in prefixes:
        poss_parses.append(('',word[:-3],word[-3:-1]))
    if word[0:2] in prefixes and word[-2:-1] in suffixes and len(word[2:-2])>2:
        poss_parses.append((word[0:2],word[2:-2],word[-2:-1]))
    if word[0:2] in prefixes and word[-3:-1] in suffixes and len(word[2:-3])>2:
        poss_parses.append((word[0:2],word[2:-2],word[-3:-1]))
    if word[0:3] in prefixes and word[-2:-1] in suffixes and len(word[3:-2])>2:
        poss_parses.append((word[0:2],word[2:-2],word[-2:-1]))
    if word[0:3] in prefixes and word[-3:-1] in suffixes and len(word[3:-3])>2:
        poss_parses.append((word[0:3],word[3:-2],word[-3:-1]))
    return poss_parses



>>> wordlist = ['construct','destructer','constructs','deconstructs']
>>> for w in wordlist:
...   parses = parser(w)
...   print w
...   for p in parses:
...     print p
... 
construct
('con', 'struct', '')
destructer
('de', 'structer', '')
constructs
('con', 'structs', '')
deconstructs
('de', 'constructs', '')
6
задан larapsodia 14 April 2012 в 19:03
поделиться