Детектор общих частей латексных формулPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Детектор общих частей латексных формул

Сообщение Anonymous »

У меня задача сделать антиплагиат формул. Для этого необходимо в двух формулах выделить похожие места (пример на фото). Но есть проблема, после того как я нашел эти похожие места, я не могу их выделить в исходных формулах, так как их запись в Latex немного другая. Помогите, пожалуйста!
Пример
Код:

Код: Выделить всё

import sympy
from sympy.parsing.latex import parse_latex

def flatten(nested_list) -> list:
result = []
for item in nested_list:
if isinstance(item, list):
result.extend(flatten(item))
else:
result.append(item)
return result

def expression_tree(expression, depth=0, max_depth=1):
if max_depth is not None and depth > max_depth or expression.is_Atom:
return str(expression)

tree_list = []
for arg in expression.args:
tree_list.append(expression_tree(arg, depth + 1, max_depth))

return tree_list

def rec_check_expressions(expr, expressions):
for i in expressions:
if sympy.parse_expr(i).equals(expr):
return [sympy.sympify(i), sympy.sympify(expr)]
if type(expr) is str:
return []
return [rec_check_expressions(a, expressions) for a in flatten(expression_tree(expr))]

def get_same_parts(expr1, expr2, min_len):
depth = 1
all_subtrees1 = []
_ = []
while 1:
subtrees1 = flatten(expression_tree(expr1, max_depth=depth))
if subtrees1 == _:
break

all_subtrees1.append(subtrees1)
all_subtrees1 = flatten(all_subtrees1)

_ = subtrees1
depth += 1

all_subtrees1 = [a for a in set(all_subtrees1) if len(a) > min_len]

return rec_check_expressions(expr2, all_subtrees1)

exp1 = parse_latex(r"\sqrt{(x^2-12x-325)}-\cos(12\pi-x^2)")
exp2 = parse_latex(r"|(x-25)(x+13)|+\sin(-x*x+6\pi+5\pi+\pi)")
parts = get_same_parts(exp1, exp2, 4)

exp1 = sympy.latex(sympy.sympify(exp1)).replace(" ", "")
exp2 = sympy.latex(sympy.sympify(exp2)).replace(" ", "")

for i, j in parts:
a = sympy.latex(i).replace(" ", "")
b = sympy.latex(j).replace(" ", "")
exp1 = exp1.replace(a, "\colorbox{#88E788}{$" + a + "}$")
exp2 = exp2.replace(b, "\colorbox{#88E788}{$" + b + "}$")

print(exp1)
print(exp2)

Помогите, пожалуйста!!!!!!!!!!

Подробнее здесь: https://stackoverflow.com/questions/792 ... s-detector
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»