Я работаю над сложным анализатором правил, который имеет следующие свойства:
Правила разделяются пробелом
< li>Символ «+» обозначает оператор «И».
Символ «,» обозначает оператор «ИЛИ».
А «-». указывает на необязательный элемент
Я могу создавать простые правила, но у меня возникают проблемы с оценкой сложных правил во вложенных скобках.
Вот определение вложенного правила, которое я пытаюсь оценить:
Это как-то сложно. В основном это правило либо K00925, затем отдельно K00625, ИЛИ только K01895. Поскольку все это заключено в круглые скобки, это преобразуется в (K00925 и K00625) ИЛИ K01895, как указано символом ",".
[*]Правило 2: (K00193+K00197+K00194)
Должны присутствовать все 3 элемента, отмеченные знаком «+».
[*]Правило 3: (K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584)
< ul>
Все, кроме K00582 и K00583, поскольку перед ними стоят символы «-», а если присутствует «+», то должны присутствовать все элементы.
[*]Правило 4: (K00399+K00401+K00402)
Все 3 пункта должны присутствовать, как указано Знак "+"
Это проще, чем кажется. Либо (K22480+K22481+K22482), ИЛИ (K03388+K03389+K03390). Для последнего подправила это K08264+K08265,K03388+K03389+K03390+K14127+(либо K14126+K14128 ИЛИ K22516+K00125))
Я работаю над сложным анализатором правил, который имеет следующие свойства: [list] [*]Правила разделяются пробелом < li>Символ «+» обозначает оператор «И». [*]Символ «,» обозначает оператор «ИЛИ». [*]А «-». указывает на необязательный элемент [/list] Я могу создавать простые правила, но у меня возникают проблемы с оценкой сложных правил во вложенных скобках. Вот определение вложенного правила, которое я пытаюсь оценить: [code]definition = '((K00925 K00625),K01895) (K00193+K00197+K00194) (K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584) (K00399+K00401+K00402) (K22480+K22481+K22482,K03388+K03389+K03390,K08264+K08265,K03388+K03389+K03390+K14127+(K14126+K14128,K22516+K00125))' [/code] [list] [*]Правило 1: ((K00925 K00625),K01895)
Это как-то сложно. В основном это правило либо K00925, затем отдельно K00625, ИЛИ только K01895. Поскольку все это заключено в круглые скобки, это преобразуется в (K00925 и K00625) ИЛИ K01895, как указано символом ",". [/list]
[*]Правило 2: (K00193+K00197+K00194) [list] Должны присутствовать все 3 элемента, отмеченные знаком «+». [/list]
[*]Правило 3: (K00577+K00578+K00579+K00580+K00581-K00582-K00583+K00584) < ul> Все, кроме K00582 и K00583, поскольку перед ними стоят символы «-», а если присутствует «+», то должны присутствовать все элементы.
[*]Правило 4: (K00399+K00401+K00402) [list] Все 3 пункта должны присутствовать, как указано Знак "+" [/list]
[*]Правило 5: (K22480+K22481+K22482,K03388+K03389+K03390,K08264+K08265 ,K03388+K03389+K03390+K14127+(K14126+K14128,K22516+K00125)) [list] Это проще, чем кажется. Либо (K22480+K22481+K22482), ИЛИ (K03388+K03389+K03390). Для последнего подправила это K08264+K08265,K03388+K03389+K03390+K14127+(либо K14126+K14128 ИЛИ K22516+K00125)) [/list]
Args: rule (str): Boolean logical string. split_characters (list): List of characters to split in rule.
Returns: set: Unique symbols in a rule. """ rule_decomposed = str(rule) if split_characters: for character in split_characters: character = character.strip() rule_decomposed = rule_decomposed.replace(character, "") unique_symbols = set(rule_decomposed.split()) return unique_symbols
# Replace characters for standard logical formatting if replace: for character_before, character_after in replace.items(): rule = rule.replace(character_before, character_after)
# Split the rule into individual symbols unique_symbols = rule_splitter(rule, replace.values())
# Create a dictionary with the presence of each symbol in the items item_to_bool = {sym: (sym in items) for sym in unique_symbols}
Args: definition (str): Complex boolean logical string with multiple rules. items (set): Set of items to check against the rules.
Returns: dict: Dictionary with each rule and its evaluated result. """ # Extract individual rules from the definition rules = re.findall(r'\([^\)]+\)', definition)
# Evaluate each rule rule_results = {} for rule in rules: cleaned_rule = rule[1:-1] # Remove the outer parentheses try: result = evaluate_rule(cleaned_rule, items) except SyntaxError as e: # Handle syntax errors from eval() due to incorrect formatting result = False rule_results[rule] = result
Я делаю калькулятор Java с графическим интерфейсом и ищу функцию, которая оценивает математическое выражение из строки. Я нашел, как оценить математическое выражение, приведенное в строковой форме?. После упрощения, потому что мой калькулятор не...
У меня есть модель Pydantic, представляющая транзакции по хранению банковского счета, которые сами по себе являются моделями, вложенными в модель счета. Транзакции хранятся в списке в скрытом поле, и доступ к ним осуществляется через вычисляемое...
Я сталкиваюсь с проблемой, когда я пытаюсь использовать ModelMapper для преобразования вложенных объектов Java в вложенные DTO. Получение NULL для ребенка DTO в родительском объекте DTO. Ниже приведены фрагменты кода. public class User {
private...
Я сталкиваюсь с проблемой, когда я пытаюсь использовать ModelMapper для преобразования вложенных объектов Java в вложенные DTO. Получение NULL для ребенка DTO в родительском объекте DTO. Ниже приведены фрагменты кода. public class User {
private...