পাঠ্যে অনুপস্থিত গ্লাইফগুলি সনাক্ত করুন


10

আমি পাইথন 3 অ্যাপিনডিকেটর লিখেছি যা fortuneঅন ​​স্ক্রিনে বিজ্ঞপ্তিতে প্রদর্শন করার জন্য আউটপুট কল করে এবং ক্যাপচার করে।

কিছু ভাগ্যে একটি হেক্সাডেসিমাল সংখ্যা সহ স্কোয়ার থাকে যখন বর্তমান ফন্টে সংশ্লিষ্ট গ্লাইফ উপস্থিত না থাকে। প্রতিটি স্কোয়ার হ'ল গ্লিফের জন্য হেক্সাডেসিমাল ইউনিকোড কোড পয়েন্টের উপস্থাপনা।

আমি ব্যবহারকারীর কাছে প্রদর্শিত হওয়ার আগে আমি হেক্সাডেসিমাল পাঠ্যটি সরাতে চাই। আমি কিছু পাইথন এপিআইয়ের সন্ধান করছিলাম যা আমাকে পাঠ্য, চরিত্র অনুসারে চরিত্র অনুসারে, এর মতো char.isValidCodePoint()বা অনুরূপ কিছু নির্ধারণ করতে দেয় তবে আমি এর মতো পাই না।

আমি একটি সম্ভাব্য সমাধান খুঁজে পেয়েছি যা আমি এখানে তদন্ত করতে চেয়েছিলাম কিন্তু fonttoolsটার্মিনালের মাধ্যমে ইনস্টল করার পরে , আমার পাইথন প্রোগ্রামটি আমদানি করতে পারেনি fonttools/fontTools

কোনও ধারণা - পাইথন এপিআই ব্যবহার করে বা টার্মিনালে কল করছে?

আপডেট # 1: আমি তখন থেকে বুঝতে পেরেছি fonttoolsউপরের লিঙ্কটি থেকে নমুনা কোডটি পাইথন 2 হওয়ায় আমার পক্ষে কাজ করবে না। আমি মনে করি যদি fonttoolsকোনওভাবে ব্যবহার করা যায় তবে আমি আমার পাইথন 3 লিপি থেকে পাইথন 2 অনুবাদককে ডাকতে পারি oke

আপডেট # 2: প্রচুর পড়ার পরে (নীচের উল্লেখগুলি দেখুন), এর পরে আমি খুঁজে পেয়েছি fc-matchতবে এটি সর্বদা ব্যবহৃত ফন্টটি অনন্যভাবে সনাক্ত করতে পারে না । পাইথনে আমি বর্তমান ফন্টটি পেয়েছি:

from gi.repository import Gio
fontName = Gio.Settings( "org.gnome.desktop.interface" ).get_string( "font-name" )

ফলস্বরূপ Ubuntu 11pango-viewহেক্সাডেসিমাল চরিত্রের সাথে এই ফলাফলটি পাস করার সাথে সাথে আমি হরফ সহ ফন্টের একটি তালিকা পেয়েছি Ubuntu। আমার ভাবনায় যদি গ্লিফটি ফন্ট দ্বারা রেন্ডার করা না হয় তবে ফন্টটি ফল থেকে প্রদর্শিত হবে না pango-view!

তথ্যসূত্র:

উত্তর:


0

আপনি যেখানে যাচ্ছিলেন সেখান থেকে এটি আলাদা পদ্ধতির, তবে সম্ভবত আপনি আপনার টেক্সট বডি থেকে হেক্সিডেসিমাল স্ট্রিংগুলি পার্স করার জন্য অজগর str.replace()বা re.sub()পদ্ধতিগুলি ব্যবহার করতে পারেন । অর্থাৎ,

যদি হেক্স অনুমানযোগ্য হয়:

originalText = "\xc3\xa5Test"
filteredText = originalText.replace("\xc3\xa5", "")

বা আপনার যদি কোনও নিয়মিত অভিব্যক্তির সাথে কোনও হেক্স বর্ণের মিল প্রয়োজন হয়:

import re

originalText = "\xc3\xa5Test"
filteredText = re.sub(r'[^\x00-\x7f]', r'', originalText)

এই কৌশল আরও ভাল আলোচনা


বিকল্প বিকল্পগুলি দেওয়া ঠিক আছে তবে আমি মনে করি আপনি 1 এর মাধ্যমে নিজের উত্তরটি অনেক উন্নতি করতে পারবেন) সংক্ষিপ্ত নমুনা কোড যুক্ত করে 2) মূল পোস্টের প্রস্তাবিত সমাধান এবং আপনার নিজের সম্ভাব্য প্রো এবং সিওএন বর্ণনা করে।
lpanebr

1
আমি আসল সমাধানটির সমালোচনা করার চেষ্টা করছি না তাই কোনও প্রো / সিওএন তুলনা এখানে সহায়ক হবে কিনা তা আমি জানি না। যদিও আমি উত্তরে আমার পরামর্শের জন্য কোড উদাহরণ যুক্ত করেছি।
ক্রিস্টোফার হান্টার

@ ক্রিস্টোফার হান্টার: ভাগ্য থেকে আসা পাঠ্যটি সরল পাঠ্য এবং যখন লেখাটি রেন্ডার করা হয় তখনই হেক্সাডেসিমাল উপস্থিত হয় (এবং আপনার পরামর্শ অনুসারে আমাকে ধরতে এবং প্রক্রিয়া করতে খুব দেরি হয়েছিল)।
বার্নমিস্টার

0

ইউনিকোড শেপিং ইঞ্জিন

অনুপস্থিত গ্লাইফ সনাক্ত করতে হারফবুজের মতো একটি ইউনিকোড শেপিং ইঞ্জিন ব্যবহার করুন। এখানে একটি কার্যকারী উদাহরণ:

from pyharfbuzz import shape
f = "/usr/local/lib/python3.6/site-packages/werkzeug/debug/shared/ubuntu.ttf"
t = "®"
s = shape(f, t)
print(s[1]['glyph_name'])
t = "რ"
s = shape(f, t)
print(s[1]['glyph_name'])

আউটপুট

registered
.notdef

এখানে IDLE3 এ আউটপুট চেক করার সময়:

>>> t = "®"
>>> s = shape(f, t)
>>> s
[{'cluster': 0, 'glyph_name': 'registered', 'x_advance': 29.453125, 'y_advance': 0.0, 'x_offset': 0.0, 'y_offset': 0.0}]
>>> t = "რ"
>>> s = shape(f, t)
>>> s
[{'cluster': 0, 'glyph_name': '.notdef', 'x_advance': 36.0, 'y_advance': 0.0, 'x_offset': 0.0, 'y_offset': 0.0}]

সঠিক ফন্টের পাথের জন্য চেক করুন, আমি আমার বর্তমান মেশিনে প্রথম দেখেছি just

বিঃদ্রঃ:

  • আমি নিশ্চিত যে Gtk / পাঙ্গোর একই রকম ফাংশন রয়েছে, প্যাঙ্গো ইতিমধ্যে নিম্ন স্তরে হার্ফবুজ ব্যবহার করতে স্যুইচ করেছে। যাইহোক, এই জাতীয় lib ব্যবহার করার অভিজ্ঞতা আমার নেই।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.