新增编辑距离函数

This commit is contained in:
2025-10-23 15:09:29 +08:00
parent da56b12c22
commit 61df36626c
2 changed files with 18 additions and 4 deletions

View File

@@ -218,7 +218,7 @@ class ToolFile(BaseModel):
with open(self.OriginFullPath, 'rb') as f: with open(self.OriginFullPath, 'rb') as f:
return f.read() return f.read()
def LoadAsText(self) -> str: def LoadAsText(self) -> str:
with open(self.OriginFullPath, 'r') as f: with open(self.OriginFullPath, 'r', encoding='utf-8') as f:
return f.read() return f.read()
def LoadAsWav(self): def LoadAsWav(self):
try: try:
@@ -370,8 +370,8 @@ class ToolFile(BaseModel):
f.write(binary_data) f.write(binary_data)
return self return self
def SaveAsText(self, text_data:str): def SaveAsText(self, text_data:str):
with open(self.OriginFullPath, 'w') as f: with open(self.OriginFullPath, 'w', encoding='utf-8') as f:
f.writelines(text_data) f.write(text_data)
return self return self
def SaveAsAudio(self, audio_data:"AudioSegment"): def SaveAsAudio(self, audio_data:"AudioSegment"):
''' '''

View File

@@ -52,7 +52,10 @@ def word_segmentation(
except ImportError: except ImportError:
raise ValueError("jieba is not install") raise ValueError("jieba is not install")
def GetEditorDistanceAndOperations(s1:str, s2:str) -> Tuple[int, List[Tuple[str, int, int, str]]]: def GetEditorDistanceAndOperations(
s1:str,
s2:str,
) -> Tuple[int, List[Tuple[Literal["add","delete"], int, int, str]]]:
""" """
计算两个字符串的编辑距离和操作序列 计算两个字符串的编辑距离和操作序列
操作格式: (操作类型, 开始位置, 结束位置, 内容) 操作格式: (操作类型, 开始位置, 结束位置, 内容)
@@ -112,3 +115,14 @@ def GetEditorDistanceAndOperations(s1:str, s2:str) -> Tuple[int, List[Tuple[str,
edit_distance = m + n - 2 * lcs[m][n] edit_distance = m + n - 2 * lcs[m][n]
return edit_distance, merged_operations return edit_distance, merged_operations
def GetDiffOperations(
s1:str,
s2:str,
) -> List[Tuple[Literal["add","delete"], int, int, str]]:
"""
计算两个字符串的差异操作序列
操作格式: (操作类型, 开始位置, 结束位置, 内容)
位置基于源字符串s1
"""
return operations