import gradio as gr import difflib from io import BytesIO import matplotlib.pyplot as plt import numpy as np import gradio as gr import difflib def word_lcs(text1, text2): words1 = text1.split() words2 = text2.split() m, n = len(words1), len(words2) # Initialize a 2D array to store the length of word-level LCS dp = [[0] * (n + 1) for _ in range(m + 1)] # Fill the dp array using bottom-up dynamic programming for i in range(1, m + 1): for j in range(1, n + 1): if words1[i - 1] == words2[j - 1]: dp[i][j] = dp[i - 1][j - 1] + 1 else: dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) # Reconstruct the word-level LCS from the dp array i, j = m, n word_lcs = [] while i > 0 and j > 0: if words1[i - 1] == words2[j - 1]: word_lcs.append(words1[i - 1]) i -= 1 j -= 1 elif dp[i - 1][j] > dp[i][j - 1]: i -= 1 else: j -= 1 # Reverse the word-level LCS to get the correct order word_lcs = word_lcs[::-1] result=[] for word in text2.split(): if word in word_lcs: result.append((word+" ","-")) word_lcs.remove(word) else: result.append((word,"+")) #result=[(word+" ",None) for word in word_lcs] return result #定义处理函数 # 定义处理函数 f def process(text1, text2,function): # 这里替换成你的处理逻辑,生成图片的代码 # 示例:使用Matplotlib生成一个简单的图像 if function=="naive": d = difflib.Differ() return [ (token[2:], token[0] if token[0] != " " else None) for token in d.compare(text1, text2) ] else: return(word_lcs(text1,text2)) # 创建 Gradio 界面 iface = gr.Interface( fn=process, # 此处的 fn 将在运行时动态设置 inputs=[ gr.Textbox(label="Origin Text",value="The quick brown fox jumped over the lazy dogs.",lines=3), gr.Textbox(label="Edited Text",value="The fast brown fox jumps over lazy dogs.",lines=3), gr.Radio(["naive", "Largest Common Subsequence"], label="Select Function") ], outputs=gr.HighlightedText( label="Diff", combine_adjacent=True, show_legend=True, color_map={"+": "red", "-": "green"}), theme=gr.themes.Base() ) # 设置动态函数选择 # 启动 Gradio 应用 iface.launch(share=True)