Как мне написать функцию, которая использует несколько операторов if, где каждый оператор будет изменять слово одно за другим?

Я пытаюсь написать функцию, которая будет изменять помеченное слово в зависимости от тегов, присутствующих в слове, так что в основном это лемматизатор, но для слов на шведском языке.

Например, если слово было помечено буквой A, оно удалит окончание X из слова, а если слово также было помечено буквой B, оно удалит окончание Y из слова и т. д. Всего существует семь различных окончаний, которые могут присутствовать в слове. слово в зависимости от комбинации тегов и которое я в этом случае хочу удалить.

До сих пор я пробовал использовать несколько операторов if друг за другом, которые изменяли бы слово, если оно было помечено одной комбинацией тегов, а затем проверяли, было ли оно помечено другой комбинацией тегов, а затем изменяли его на основе этого и так далее. .

if tag1 == 'A':                                                   
    word = word.rstrip('x')
if tag2 == 'B' and tag3 == 'C' and tag4 == 'D':
    word = word.rstrip('y')
if tag3 == 'B' and tag4 == 'D':
    word = word.rstrip('z')

У меня возникли проблемы с пониманием того, как я должен формулировать операторы if, чтобы каждый из них проверял комбинацию тегов, изменял слово, если утверждение верно, а затем передал измененное слово следующему утверждению. Как бы я это сделал?

РЕДАКТИРОВАТЬ: Как сказал Прун, я знаю, что могу просто добавить операторы if со всеми возможными комбинациями тегов, но я хотел посмотреть, есть ли более элегантное решение, чем сделать это.


person Hantan G    schedule 28.05.2019    source источник
comment
Похоже, этот код будет делать именно то, что вы хотите. Ты это пробовал? Это работает? Если нет, то что он делает вместо этого?   -  person John Gordon    schedule 29.05.2019


Ответы (1)


Судя по твоему описанию, ты знаешь, как забить это насмерть грубой силой, но хотелось бы чего-нибудь поизящнее. Вы можете рассмотреть структуру тегов и связанных с ними удалений, таких как

rules = [ ['A',   'x'],
          ['BCD'. 'y'],
          ['B',   'z'],
          ...
        ]

Затем повторите свой список правил удаления, применяя каждое по мере необходимости, что-то вроде

for rule in rules:
    rule_tags = rule[0]
    # Check to see that all rule tags are in the input tags ... left to you to code
    if <your code here>:
        word = word.rstrip(rule[1])   # strip letter included in that rule

Помогает ли это вам двигаться к решению?

person Prune    schedule 28.05.2019
comment
Да, похоже, это будет выглядеть намного лучше, чем то, что я изначально планировал сделать. Как вы думаете, эта система повлияет на производительность больше, чем исходная? - person Hantan G; 29.05.2019
comment
Задавать спекулятивные вопросы, как правило, нельзя: запустите временной тест и посмотрите, что лучше работает в вашей среде. Сколько человеческого времени стоит потратить на понимание, отладку и обслуживание более сложной системы? - person Prune; 30.05.2019