[Development Tips] چگونه تعداد ضربات را با حروف چینی بدست آوریم؟
![[Development Tips] چگونه تعداد ضربات را با حروف چینی بدست آوریم؟ [Development Tips] چگونه تعداد ضربات را با حروف چینی بدست آوریم؟](https://nabfollower.com/blog/wp-content/uploads/2024/12/Development-Tips-چگونه-تعداد-ضربات-را-با-حروف-چینی-بدست-780x470.png)
Summarize this content to 400 words in Persian Lang
پس زمینه
در طول توسعه یک خط فال ساده، با این مشکل جالب روبرو شدم. اگر فقط چند کاراکتر چینی خاص باشد، میتوانیم یک فرهنگ لغت را در اسکریپت کدگذاری کنیم، اما اگر بخواهیم تعداد ضربهها را برای هر کاراکتر چینی دریافت کنیم، چه؟
کتابخانه pypinyin
from pypinyin import pinyin, Style
def get_strokes_count(chinese_character):
pinyin_list = pinyin(chinese_character, style=Style.NORMAL)
strokes_count = len(pinyin_list[0])
return strokes_count
character = input(“Please enter a Chinese character:”)
strokes = get_strokes_count(character)
print(“Character'{}’stroke numbers:{}”.format(character, strokes))
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
من آن را امتحان کردم و متوجه شدم که نتیجه در واقع تعداد نتایج در قالب پینیین معمولی برای آن شخصیت است.
پایگاه داده Unihan
پایگاه داده Unihan یک پایگاه داده با حروف چینی است که توسط کنسرسیوم یونیکد نگهداری می شود که کاملاً قابل اعتماد به نظر می رسد و ابزارهای آنلاین را نیز ارائه می دهد.
در جستجوی آنلاین خود Unihan Database Lookup دریافتم که نتایج پرس و جو شامل موارد زیر است kTotal Strokes فیلد، که داده های تعداد ضربه های مورد نیاز ما است.به عنوان پایگاه داده رسمی یونیکد، نسخه فعلی به طور کامل نیازهای اساسی پرس و جوهای حروف چینی را برآورده می کند.
خوب! یک قدم به موفقیت نزدیک تر!
دریافت اطلاعات سکته مغزی از پایگاه داده Unihan
من در ابتدا قصد داشتم درخواست های پرس و جو را مستقیماً از طریق جستجو ارسال کنم، اما بسیار کند بود و آدرس در خارج از کشور چین است. من متوجه شدم که خود فایل پایگاه داده بزرگ نیست، بنابراین آن را مستقیما دانلود کردم.
متحد شوید
پس از باز کردن بسته فشرده، چندین فایل وجود دارد.
با جستجوی نتایج، ما به آن نیاز داریم kTotal Strokes میدان در منبع سپاه. این فایل را اکسترکت کنید.من regex را روی regex101 آزمایش کردم تا قسمت یونیکد مورد نظر و قسمت تعداد ضربه را استخراج کنم و آنها را جداگانه برای پرس و جو ذخیره کردم.
کد نویسی
استخراج اطلاعات سکته مغزی
file = Path(“Stroke/Unihan_IRGSources.txt”)
output = Path(“Stroke/unicode2stroke.json”)
stroke_dict = dict()
with open(file,mode=”r”) as f:
for line in f:
raw_line = line.strip()
pattern = r”(U\+.*)\skTotalStrokes.*\s(\d+)”
result = re.findall(pattern=pattern, string=raw_line)
if len(result) == 0:
continue
unicode_key = result[0][0]
unicode_stroke = result[0][1]
print(f”{unicode_key}: {unicode_stroke}”)
stroke_dict[unicode_key] = unicode_stroke
with open(file=output, mode=”w”, encoding=”utf-8″) as f:
json.dump(stroke_dict,f, ensure_ascii=False, indent=4)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
برای دسترسی آسان به json صادر می شود.
نوشتن تابع اکتساب
with open(output) as f:
unicode2stroke = json.load(f)
def get_character_stroke_count(char: str):
unicode = “U+” + str(hex(ord(char)))[2:].upper()
return int(unicode2stroke[unicode])
test_char = “阿”
get_character_stroke_count(char=test_char)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
هنگام بدست آوردن، توجه داشته باشید که یونیکد کاراکتر را به کد هگزادسیمال متناظر خود تبدیل می کند
موفقیت! نتیجه مورد انتظار به دست آمده است!
پس زمینه
در طول توسعه یک خط فال ساده، با این مشکل جالب روبرو شدم. اگر فقط چند کاراکتر چینی خاص باشد، میتوانیم یک فرهنگ لغت را در اسکریپت کدگذاری کنیم، اما اگر بخواهیم تعداد ضربهها را برای هر کاراکتر چینی دریافت کنیم، چه؟
کتابخانه pypinyin
from pypinyin import pinyin, Style
def get_strokes_count(chinese_character):
pinyin_list = pinyin(chinese_character, style=Style.NORMAL)
strokes_count = len(pinyin_list[0])
return strokes_count
character = input("Please enter a Chinese character:")
strokes = get_strokes_count(character)
print("Character'{}'stroke numbers:{}".format(character, strokes))
من آن را امتحان کردم و متوجه شدم که نتیجه در واقع تعداد نتایج در قالب پینیین معمولی برای آن شخصیت است.
پایگاه داده Unihan
پایگاه داده Unihan یک پایگاه داده با حروف چینی است که توسط کنسرسیوم یونیکد نگهداری می شود که کاملاً قابل اعتماد به نظر می رسد و ابزارهای آنلاین را نیز ارائه می دهد.
در جستجوی آنلاین خود Unihan Database Lookup دریافتم که نتایج پرس و جو شامل موارد زیر است kTotal Strokes فیلد، که داده های تعداد ضربه های مورد نیاز ما است.
به عنوان پایگاه داده رسمی یونیکد، نسخه فعلی به طور کامل نیازهای اساسی پرس و جوهای حروف چینی را برآورده می کند.
خوب! یک قدم به موفقیت نزدیک تر!
دریافت اطلاعات سکته مغزی از پایگاه داده Unihan
من در ابتدا قصد داشتم درخواست های پرس و جو را مستقیماً از طریق جستجو ارسال کنم، اما بسیار کند بود و آدرس در خارج از کشور چین است. من متوجه شدم که خود فایل پایگاه داده بزرگ نیست، بنابراین آن را مستقیما دانلود کردم.
متحد شوید
پس از باز کردن بسته فشرده، چندین فایل وجود دارد.
با جستجوی نتایج، ما به آن نیاز داریم kTotal Strokes میدان در منبع سپاه. این فایل را اکسترکت کنید.
من regex را روی regex101 آزمایش کردم تا قسمت یونیکد مورد نظر و قسمت تعداد ضربه را استخراج کنم و آنها را جداگانه برای پرس و جو ذخیره کردم.
کد نویسی
- استخراج اطلاعات سکته مغزی
file = Path("Stroke/Unihan_IRGSources.txt")
output = Path("Stroke/unicode2stroke.json")
stroke_dict = dict()
with open(file,mode="r") as f:
for line in f:
raw_line = line.strip()
pattern = r"(U\+.*)\skTotalStrokes.*\s(\d+)"
result = re.findall(pattern=pattern, string=raw_line)
if len(result) == 0:
continue
unicode_key = result[0][0]
unicode_stroke = result[0][1]
print(f"{unicode_key}: {unicode_stroke}")
stroke_dict[unicode_key] = unicode_stroke
with open(file=output, mode="w", encoding="utf-8") as f:
json.dump(stroke_dict,f, ensure_ascii=False, indent=4)
برای دسترسی آسان به json صادر می شود.
- نوشتن تابع اکتساب
with open(output) as f:
unicode2stroke = json.load(f)
def get_character_stroke_count(char: str):
unicode = "U+" + str(hex(ord(char)))[2:].upper()
return int(unicode2stroke[unicode])
test_char = "阿"
get_character_stroke_count(char=test_char)
هنگام بدست آوردن، توجه داشته باشید که یونیکد کاراکتر را به کد هگزادسیمال متناظر خود تبدیل می کند
موفقیت! نتیجه مورد انتظار به دست آمده است!