110 lines
3.8 KiB
Python
110 lines
3.8 KiB
Python
|
|
import re
|
|
import unicodedata
|
|
import random
|
|
|
|
|
|
def description_fix(description):
|
|
description = description.lower()
|
|
description = unicodedata.normalize('NFKD', description).encode('ASCII', 'ignore').decode('ASCII')
|
|
description = re.sub(r'[^a-z0-9\s]', '', description)
|
|
return description.strip()
|
|
|
|
|
|
# def name_fix(name: str) -> str:
|
|
# """
|
|
# Normalize the string to lowercase ASCII, replace spaces and specific punctuations with underscores,
|
|
# and remove non-ASCII characters.
|
|
# """
|
|
# name = name.lower()
|
|
# name = unicodedata.normalize('NFKD', name).encode('ascii', 'ignore').decode('ascii')
|
|
# name = re.sub(r'[ :;!]', '_', name) # Replace spaces and specific punctuations with underscores
|
|
# name = re.sub(r'\W+', '', name) # Remove any other non-word characters
|
|
# return name
|
|
|
|
|
|
def name_fix(name: str) -> str:
|
|
"""
|
|
Normalize the string to lowercase ASCII, replace spaces and specific punctuations with underscores,
|
|
maintain dots, and remove non-ASCII characters.
|
|
"""
|
|
name = name.lower()
|
|
name = unicodedata.normalize('NFKD', name).encode('ascii', 'ignore').decode('ascii')
|
|
name = re.sub(r'[ :;!]', '_', name) # Replace spaces and specific punctuations with underscores
|
|
name = re.sub(r'[^\w._]+', '', name) # Remove any non-word characters except dots and underscores
|
|
return name
|
|
|
|
def name_obfuscate(name):
|
|
# Define a mapping of consonants to their obfuscated counterparts
|
|
consonant_map = {
|
|
'b': 'p', 'c': 'k', 'd': 't', 'f': 'v', 'g': 'j', 'h': 'x',
|
|
'j': 'q', 'k': 'c', 'l': 'r', 'm': 'n', 'n': 'm', 'p': 'b',
|
|
'q': 'g', 'r': 'l', 's': 'z', 't': 'd', 'v': 'f', 'w': 'y',
|
|
'x': 'h', 'y': 'w', 'z': 's'
|
|
}
|
|
|
|
# Define a mapping of vowels to their obfuscated counterparts
|
|
vowel_map = {
|
|
'a': 'e', 'e': 'i', 'i': 'o', 'o': 'u', 'u': 'a'
|
|
}
|
|
|
|
# Convert the name to lowercase
|
|
name = name.lower()
|
|
|
|
# Split the name into words
|
|
words = name.split()
|
|
|
|
obfuscated_words = []
|
|
for word in words:
|
|
obfuscated_word = ''
|
|
for char in word:
|
|
if char in vowel_map:
|
|
# Obfuscate vowels
|
|
obfuscated_word += vowel_map[char]
|
|
elif char in consonant_map:
|
|
# Obfuscate consonants
|
|
obfuscated_word += consonant_map[char]
|
|
else:
|
|
# Keep non-alphabetic characters unchanged
|
|
obfuscated_word += char
|
|
obfuscated_words.append(obfuscated_word)
|
|
|
|
# Join the obfuscated words back into a single string
|
|
obfuscated_name = ' '.join(obfuscated_words)
|
|
|
|
# Capitalize the first letter of each word
|
|
obfuscated_name = obfuscated_name.title()
|
|
|
|
return obfuscated_name
|
|
|
|
def dedent(content: str) -> str:
|
|
# Split the input content into lines
|
|
lines = content.splitlines()
|
|
|
|
# Remove leading and trailing empty lines
|
|
while lines and not lines[0].strip():
|
|
lines.pop(0)
|
|
while lines and not lines[-1].strip():
|
|
lines.pop()
|
|
|
|
if not lines:
|
|
return ""
|
|
|
|
# Find the minimum indentation (leading spaces) in all non-empty lines
|
|
min_indent = None
|
|
for line in lines:
|
|
stripped_line = line.lstrip()
|
|
if stripped_line: # Only consider non-empty lines
|
|
leading_spaces = len(line) - len(stripped_line)
|
|
if min_indent is None or leading_spaces < min_indent:
|
|
min_indent = leading_spaces
|
|
|
|
# Dedent each line by the minimum indentation found
|
|
dedented_lines = [line[min_indent:] if len(line) > min_indent else line for line in lines]
|
|
|
|
# Join the dedented lines back into a single string
|
|
return "\n".join(dedented_lines)
|
|
|
|
if __name__ == "__main__":
|
|
print("fixed name:", name_fix("John Doe"))
|
|
print("obfuscated name:", name_obfuscate("John Doe")) |