Remove Accents/Diacritics
remove_diacritics · text · text
2026-09-23
กำลังประมวลผล…
remove_diacritics · text · text
2026-09-23
ชื่อที่มีเครื่องหมายเสียง เช่น Café, naïve หรือ Müller มักถูกพิมพ์ทั้งแบบมีและไม่มีเครื่องหมาย ทำให้จับคู่ไม่ติด เทคนิคนี้ตัดเครื่องหมายของ อักษรละตินเท่านั้น และปล่อยสระกับวรรณยุกต์ไทยไว้ครบ เพราะการตัดเครื่องหมายไทยจะทำให้คำอ่านไม่ออก
| ก่อน | หลัง |
|---|---|
| Café | Cafe |
| naïve | naive |
| ไทย | ไทย |
| Parameter | Type | Default |
|---|---|---|
columns | string[] | — |
import json
import unicodedata
def remove_diacritics(value):
if not isinstance(value, str):
return value
out = []
for ch in unicodedata.normalize('NFD', value):
latin_base = out and unicodedata.name(out[-1], '').startswith('LATIN')
if unicodedata.combining(ch) and latin_base:
continue
out.append(ch)
return unicodedata.normalize('NFC', ''.join(out))
values = ['Café', 'naïve', 'ไทย', None]
print(json.dumps([remove_diacritics(v) for v in values], ensure_ascii=False))
รายชื่อโรงแรมจากสองระบบมี Café de Paris กับ Cafe de Paris ปนกัน สร้างขั้นตอน remove_diacritics ตามด้วย change_case แบบ lower เพื่อให้ได้กุญแจเดียวกัน แล้วใช้ remove_duplicate_by_column กับกุญแจนั้น เก็บคอลัมน์ชื่อเดิมไว้เสมอสำหรับการแสดงผล
ใช้ unicode_normalize ก่อนเพื่อจัดรหัสอักขระให้เป็นมาตรฐาน ใช้ change_case เพื่อลดความต่างของตัวพิมพ์ และใช้ find_similar_values เมื่อความต่างมากกว่าเรื่องเครื่องหมาย