如何修改随机拼写错误生成代码,实现单词增删随机字母?
实现支持替换、添加、删除随机字母的拼写错误生成代码
原代码仅支持替换单词中的随机字符,我们可以扩展为替换、插入、删除三种随机操作,给每种操作分配概率,对符合修改条件的单词随机执行其中一种操作,同时避免修改单词末尾的标点符号(比如逗号、句号)。
修改后的代码如下:
import string import random phrase = "Lorem ipsum dolor sit amet, lorem ipsum." # 单词被修改的总概率 p_modify = 0.8 # 三种操作的概率分配(总和需为1) op_probs = { 'replace': 0.4, 'insert': 0.3, 'delete': 0.3 } def process_word(word): # 分离单词主体和末尾的标点(如逗号、句号) word_body = word punctuation = '' if len(word) > 0 and not word[-1].isalpha(): punctuation = word[-1] word_body = word[:-1] # 如果单词主体长度小于2,不执行删除操作(避免变成空字符串) if len(word_body) < 2: return word # 随机选择操作类型 op_choice = random.choices( list(op_probs.keys()), weights=list(op_probs.values()), k=1 )[0] new_body = word_body if op_choice == 'replace': # 替换随机位置的字符 ix = random.randint(0, len(new_body)-1) new_body = new_body[:ix] + random.choice(string.ascii_letters) + new_body[ix+1:] elif op_choice == 'insert': # 随机位置插入随机字符 ix = random.randint(0, len(new_body)) new_body = new_body[:ix] + random.choice(string.ascii_letters) + new_body[ix:] elif op_choice == 'delete': # 删除随机位置的字符 ix = random.randint(0, len(new_body)-1) new_body = new_body[:ix] + new_body[ix+1:] # 拼接回标点 return new_body + punctuation new_phrase = [] words = phrase.split(' ') for word in words: if random.random() <= p_modify: new_word = process_word(word) new_phrase.append(new_word) else: new_phrase.append(word) new_phrase = ' '.join(new_phrase) print(new_phrase)
关键说明
- 标点处理:单独分离单词末尾的标点,确保修改操作只作用于字母部分,避免破坏标点符号。
- 操作概率:通过
op_probs字典可灵活调整三种操作的出现频率,总和需保持为1。 - 边界处理:当单词主体长度小于2时,跳过删除操作,避免生成空字符串。
- 操作逻辑:
- 替换:随机选择一个字母位置,替换为随机大小写字母
- 插入:随机选择一个位置(包括开头和结尾),插入随机大小写字母
- 删除:随机选择一个字母位置,删除该字符
内容的提问来源于stack exchange,提问作者user21007683
相关产品推荐
相关产品推荐

