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

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

Например, если слово было помечено буквой 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, чтобы каждый из них проверял комбинацию тегов, изменил слово, если утверждение истинно, и затем передал измененное слово следующему утверждению. Как бы я это сделал?

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

1 Ответ

1 голос
/ 29 мая 2019

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

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

Получает ли этовы движетесь к решению?

...