난 그냥 웹에서이 대답을 발견
import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
only_ascii = nfkd_form.encode('ASCII', 'ignore')
return only_ascii
그것은 (예를 들어, 프랑스어) 잘 작동하지만 내가 두 번째 단계는 (악센트를 제거) 비를 떨어보다 더 처리 할 수 있다고 생각 일부 언어 (예 : 그리스어)에서는 실패 할 것이기 때문에 -ASCII 문자를 사용하십시오. 가장 좋은 해결책은 분음 부호로 태그 지정된 유니 코드 문자를 명시 적으로 제거하는 것입니다.
편집 : 문자 c
가 선행 문자와 결합 할 수있는 경우
import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])
unicodedata.combining(c)
그것이 분음 부호 인 경우 즉, 주로, true를 돌려줍니다 :이 트릭을 수행합니다.
편집 2는 : remove_accents
는 유니 코드 문자열이 아닌 바이트 문자열을 기대하고있다. 당신이 바이트 문자열이있는 경우, 당신은이 같은 유니 코드 문자열로 디코딩해야합니다
encoding = "utf-8" # or iso-8859-15, or cp1252, or whatever encoding you use
byte_string = b"café" # or simply "café" before python 3.
unicode_string = byte_string.decode(encoding)
그래,이 방법은 단순히 액센트를 제거하는 것보다 나은 해결책입니다. ASCII로 단어를 작성하기위한 규칙이있는 언어에 대해 훨씬 더 유용한 음역을 제공합니다. –
중국어와 잘 어울리는 것 같지만 불행하게도 "François"라는 프랑스어 이름의 변형은 더 자연스럽지 않은 "Francois"에 비해 "Franassois"를 제공하지 못합니다. – EOL
은 달성하려는 목표에 따라 다릅니다. 예를 들어 지금은 수색 중입니다. 그리스어/러시아어/중국어를 음역하고 싶지 않으므로 "±/ę/ś/ć"를 "a/e/s/c"로 바꾸고 싶습니다. – kolinko