如何自动生成零件号中0与O的所有组合以创建同义词列表?
自动生成零件号0/O替换的所有组合方案
针对零件号无固定格式、0随机分布的情况,以下两种方法可以自动生成所有0与O的混合组合,直接导出为表格作为同义词使用:
方法一:Python脚本批量处理(推荐,高效灵活)
用Python递归生成所有替换组合,适合批量处理大量零件号,输出CSV格式直接可用。
代码示例
import csv def generate_variants(part_num): # 递归生成所有0/O替换的可能组合 if not part_num: return [''] first_char = part_num[0] rest_variants = generate_variants(part_num[1:]) if first_char == '0': # 遇到0时,同时保留0和生成O的分支 return [f'0{var}' for var in rest_variants] + [f'O{var}' for var in rest_variants] else: # 非0字符直接保留 return [f'{first_char}{var}' for var in rest_variants] # 1. 批量处理零件号并导出CSV original_parts = ["00h-1038-k0", "AJO-9000", "X0Y-7Z0"] # 替换为你的零件号列表 with open('part_synonyms.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['原零件号', '同义词']) for part in original_parts: all_variants = generate_variants(part) # 排除原零件号本身(若不需要可删除该行) synonyms = [var for var in all_variants if var != part] for syn in synonyms: writer.writerow([part, syn])
使用说明
- 将你的零件号列表替换到
original_parts中; - 运行脚本后会生成
part_synonyms.csv文件,包含原零件号和所有对应的0/O替换同义词; - 若零件号存储在现有CSV中,可添加代码读取文件(比如用
csv.reader),无需手动输入列表。
方法二:Excel VBA宏(适合熟悉Excel的用户)
通过VBA在Excel内直接生成组合,无需额外工具。
代码示例
Sub GeneratePartSynonyms() Dim originalPart As String Dim variants As Collection Dim tempVariants As Collection Dim i As Integer, rowNum As Integer Dim currentChar As String Dim tempStr As String ' 初始化变量 rowNum = 1 ' 结果起始行 Set variants = New Collection variants.Add "" ' 遍历A列所有零件号(可根据实际修改列) For Each cell In Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row) originalPart = cell.Value Set variants = New Collection variants.Add "" ' 逐个字符生成组合 For i = 1 To Len(originalPart) currentChar = Mid(originalPart, i, 1) Set tempVariants = New Collection For Each var In variants If currentChar = "0" Then tempVariants.Add var & "0" tempVariants.Add var & "O" Else tempVariants.Add var & currentChar End If Next var Set variants = tempVariants Next i ' 将结果写入B、C列(原零件号、同义词) For Each var In variants If var <> originalPart Then Cells(rowNum, "B").Value = originalPart Cells(rowNum, "C").Value = var rowNum = rowNum + 1 End If Next var Next cell Set variants = Nothing Set tempVariants = Nothing MsgBox "同义词生成完成!" End Sub
使用说明
- 打开Excel,将原零件号放在A列;
- 按
Alt+F11打开VBA编辑器,插入新模块,粘贴上述代码; - 运行宏,结果会自动写入B(原零件号)、C(同义词)列;
- 若需要调整列位置,修改代码中的
Range("A1:A"...)和Cells(rowNum, "B")等参数即可。
注意事项
- 组合数量为
2^n(n为零件号中0的个数),比如含3个0的零件号会生成7个同义词(排除原号); - 若零件号中0的数量极多(比如超过10个),生成的组合会非常庞大,可根据实际需求筛选(比如只替换部分0),但一般搜索系统支持批量导入,无需担心。
内容的提问来源于stack exchange,提问作者ratsurfer
相关产品推荐
相关产品推荐

