Amazon Polly PlatoBlockchain ڈیٹا انٹیلی جنس کا استعمال کرتے ہوئے ویب صفحات پڑھیں اور مواد کو نمایاں کریں۔ عمودی تلاش۔ عی

ویب صفحات پڑھیں اور ایمیزون پولی کا استعمال کرتے ہوئے مواد کو نمایاں کریں۔

اس پوسٹ میں، ہم استعمال کرنے کا طریقہ بتاتے ہیں۔ ایمیزون پولی—ایک سرکردہ کلاؤڈ سروس جو متن کو زندگی بھر کی تقریر میں تبدیل کرتی ہے — ویب صفحہ کے مواد کو پڑھنے اور مواد کو اس طرح نمایاں کرنے کے لیے جیسے اسے پڑھا جا رہا ہے۔ ویب صفحہ پر آڈیو پلے بیک شامل کرنے سے صفحہ کی رسائی اور وزیٹر کے تجربے میں بہتری آتی ہے۔ آڈیو سے بڑھا ہوا مواد زیادہ اثر انگیز اور یادگار ہے، صفحہ پر زیادہ ٹریفک لاتا ہے، اور دیکھنے والوں کی خرچ کرنے کی طاقت میں اضافہ کرتا ہے۔ یہ صفحہ شائع کرنے والی کمپنی یا تنظیم کے برانڈ کو بھی بہتر بناتا ہے۔ ٹیکسٹ ٹو اسپیچ ٹیکنالوجی ان کاروباری فوائد کو قابل حصول بناتی ہے۔ ہم Amazon Polly کا استعمال کرتے ہوئے اس مقصد کو حاصل کرنے کا طریقہ دکھا کر اس سفر کو تیز کرتے ہیں۔

یہ اہلیت معذوری والے زائرین کے لیے رسائی کو بہتر بناتی ہے، اور اسے آپ کی تنظیم کی رسائی کی حکمت عملی کے حصے کے طور پر اپنایا جا سکتا ہے۔ بالکل اسی طرح اہم بات یہ ہے کہ یہ معذور افراد کے لیے صفحہ کے تجربے کو بڑھاتا ہے۔ دونوں گروپوں میں قابل قدر اخراجات کی طاقت ہے اور ان صفحات سے زیادہ آزادانہ طور پر خرچ کرتے ہیں جو اپنی توجہ حاصل کرنے کے لیے آڈیو بڑھانے کا استعمال کرتے ہیں۔

حل کا جائزہ

PollyReadsThePage (PRTP)—جیسا کہ ہم حل کا حوالہ دیتے ہیں—ایک ویب صفحہ پبلشر کو اپنے ویب صفحہ پر آڈیو کنٹرول چھوڑنے کی اجازت دیتا ہے۔ جب آنے والا انتخاب کرتا ہے۔ کھیلیں کنٹرول پر، کنٹرول صفحہ کو پڑھتا ہے اور مواد کو نمایاں کرتا ہے۔ PRTP متن سے تقریر کی ترکیب کے لیے Amazon Polly کی عمومی صلاحیت کا استعمال کرتا ہے۔ یہ ایمیزون پولی کو ہر صفحے کے لیے دو نمونے تیار کرنے کی دعوت دیتا ہے:

  • براؤزر کے ذریعے چلنے کے قابل فارمیٹ میں آڈیو مواد: MP3
  • تقریر کے نشانات والی فائل جو متن کے ہر جملے کے لیے اشارہ کرتی ہے:
    • پلے بیک کے دوران وہ وقت جب جملہ پڑھا جاتا ہے۔
    • صفحہ پر جملے کا مقام ظاہر ہوتا ہے۔

جب آنے والا انتخاب کرتا ہے۔ کھیلیں، براؤزر MP3 فائل چلاتا ہے۔ جیسے ہی آڈیو پڑھا جاتا ہے، براؤزر وقت کی جانچ کرتا ہے، مارکس فائل میں تلاش کرتا ہے کہ اس وقت کون سا جملہ پڑھنا ہے، اسے صفحہ پر تلاش کرتا ہے، اور اسے نمایاں کرتا ہے۔

PRTP وزیٹر کو مختلف آوازوں اور زبانوں میں پڑھنے کی اجازت دیتا ہے۔ ہر آواز کو اپنی فائلوں کے جوڑے کی ضرورت ہوتی ہے۔ PRTP اعصابی آوازوں کا استعمال کرتا ہے۔ معاون عصبی آوازوں اور زبانوں کی فہرست کے لیے، دیکھیں اعصابی آوازیں. ایمیزون پولی میں معیاری اور اعصابی آوازوں کی مکمل فہرست کے لیے، دیکھیں ایمیزون پولی میں آوازیں.

ہم دو قسم کے ویب صفحات پر غور کرتے ہیں: جامد اور متحرک صفحات۔ ایک ___ میں مستحکم صفحہ، مواد صفحہ کے اندر موجود ہوتا ہے اور صرف اس وقت تبدیل ہوتا ہے جب صفحہ کا نیا ورژن شائع ہوتا ہے۔ کمپنی ویب بنانے کے عمل کے حصے کے طور پر صفحہ کو روزانہ یا ہفتہ وار اپ ڈیٹ کر سکتی ہے۔ اس قسم کے صفحہ کے لیے، آڈیو فائلوں کو تعمیراتی وقت پر پہلے سے تیار کرنا اور پلے بیک کے لیے ویب سرور پر رکھنا ممکن ہے۔ جیسا کہ درج ذیل اعداد و شمار سے ظاہر ہوتا ہے، اسکرپٹ PRTP Pre-Gen آڈیو بنانے کے لیے ایمیزون پولی کو طلب کرتا ہے۔ یہ ایچ ٹی ایم ایل صفحہ کو ان پٹ کے طور پر لیتا ہے اور اختیاری طور پر، ایک کنفیگریشن فائل جو یہ بتاتی ہے کہ صفحہ سے کون سا متن نکالنا ہے (Text Extract Config)۔ اگر ایکسٹریکٹ کنفیگریشن کو چھوڑ دیا جاتا ہے، تو پری جین اسکرپٹ صفحہ کے باڈی سے نکالنے کے لیے متن کا ایک معقول انتخاب کرتی ہے۔ ایمیزون پولی فائلوں کو ایک میں آؤٹ پٹ کرتا ہے۔ ایمیزون سادہ اسٹوریج سروس (ایمیزون S3) بالٹی؛ اسکرپٹ انہیں آپ کے ویب سرور پر کاپی کرتا ہے۔ جب وزیٹر آڈیو چلاتا ہے، براؤزر MP3 کو براہ راست ویب سرور سے ڈاؤن لوڈ کرتا ہے۔ جھلکیوں کے لیے، ایک ڈراپ ان لائبریری، PRTP.js، پڑھے جانے والے متن کو نمایاں کرنے کے لیے مارکس فائل کا استعمال کرتا ہے۔

کا مواد a متحرک وزیٹر کے تعامل کے جواب میں صفحہ تبدیل ہوتا ہے، اس لیے آڈیو پہلے سے تیار نہیں کیا جا سکتا لیکن اسے متحرک طور پر ترکیب کیا جانا چاہیے۔ جیسا کہ مندرجہ ذیل اعداد و شمار سے ظاہر ہوتا ہے، جب وزیٹر آڈیو چلاتا ہے، تو صفحہ استعمال کرتا ہے۔ PRTP.js ایمیزون پولی میں آڈیو تیار کرنے کے لیے، اور یہ جامد صفحات کی طرح اسی نقطہ نظر کا استعمال کرتے ہوئے ترکیب شدہ آڈیو کو نمایاں کرتا ہے۔ براؤزر سے AWS خدمات تک رسائی کے لیے، وزیٹر کو AWS شناخت کی ضرورت ہوتی ہے۔ ہم ایک کو استعمال کرنے کا طریقہ دکھاتے ہیں۔ ایمیزون کاگنیٹو وزیٹر کو آڈیو رینڈر کرنے کے لیے ایمیزون پولی اور S3 بالٹی تک کافی رسائی کی اجازت دینے کے لیے شناختی پول۔

متحرک مواد

Mp3 آڈیو اور اسپیچ مارکس دونوں بنانے کے لیے پولی سروس کو ایک ہی ان پٹ کو دو بار سنتھیسائز کرنے کی ضرورت ہوتی ہے۔ سے رجوع کریں۔ ایمیزون پولی پرائسنگ پیج لاگت کے اثرات کو سمجھنے کے لیے۔ پری جنریشن لاگت کو بچاتی ہے کیونکہ ہر آنے والے کے تعامل کی مانگ کے بجائے تعمیراتی وقت پر ترکیب کی جاتی ہے۔

اس پوسٹ کے ساتھ موجود کوڈ اوپن سورس ریپوزٹری کے طور پر دستیاب ہے۔ GitHub کے.

حل تلاش کرنے کے لیے، ہم ان مراحل پر عمل کرتے ہیں:

  1. وسائل مرتب کریں، بشمول پری جین بلڈ سرور، S3 بالٹی، ویب سرور، اور Amazon Cognito identity۔
  2. جامد پری جین بلڈ کو چلائیں اور جامد صفحات کی جانچ کریں۔
  3. متحرک صفحات کی جانچ کریں۔

شرائط

اس مثال کو چلانے کے لیے، آپ کو ایک کی ضرورت ہے۔ AWS اکاؤنٹ Amazon Polly، Amazon S3، Amazon Cognito، اور (demo مقاصد کے لیے) استعمال کرنے کی اجازت کے ساتھ AWS کلاؤڈ 9.

وسائل کی فراہمی

ہم ایک کا اشتراک کرتے ہیں۔ AWS کلاؤڈ فارمیشن آپ کے اکاؤنٹ میں ایک خود ساختہ ڈیمو ماحول بنانے کے لیے ٹیمپلیٹ پوسٹ کے ساتھ ساتھ پیروی کرنے میں آپ کی مدد کریں۔ اگر آپ اپنے ماحول میں PRTP ترتیب دینے کو ترجیح دیتے ہیں، تو اس میں دی گئی ہدایات کو دیکھیں README.md.

CloudFormation کا استعمال کرتے ہوئے ڈیمو ماحول فراہم کرنے کے لیے، پہلے اس کی ایک کاپی ڈاؤن لوڈ کریں۔ CloudFormation ٹیمپلیٹ. پھر درج ذیل مراحل کو مکمل کریں:

  1. AWS CloudFormation کنسول پر، منتخب کریں۔ اسٹیک بنائیں۔
  2. میں سے انتخاب کریں نئے وسائل کے ساتھ (معیاری).
  3. منتخب کریں ٹیمپلیٹ فائل اپ لوڈ کریں۔
  4. میں سے انتخاب کریں فائل منتخب کریں اس ٹیمپلیٹ کی مقامی کاپی اپ لوڈ کرنے کے لیے جسے آپ نے ڈاؤن لوڈ کیا ہے۔ فائل کا نام ہے۔ prtp.yml.
  5. میں سے انتخاب کریں اگلے.
  6. اپنی پسند کا اسٹیک نام درج کریں۔ بعد میں آپ اس کے متبادل کے طور پر دوبارہ درج کریں۔ <StackName>.
  7. آپ ڈیفالٹ اقدار کو میں رکھ سکتے ہیں۔ پیرامیٹر سیکشن پر ایک اقتصادی کینڈر سکین کر لیں۔
  8. میں سے انتخاب کریں اگلے.
  9. باقی حصوں کے ذریعے جاری رکھیں.
  10. میں چیک باکسز کو پڑھیں اور منتخب کریں۔ صلاحیتوں سیکشن پر ایک اقتصادی کینڈر سکین کر لیں۔
  11. میں سے انتخاب کریں اسٹیک بنائیں.
  12. جب اسٹیک مکمل ہو جائے تو اس کی قدر تلاش کریں۔ BucketName اسٹیک آؤٹ پٹس میں۔

ہم آپ کو پروڈکشن ماحول استعمال کرنے سے پہلے اپنی سیکیورٹی ٹیم کے ساتھ اسٹیک کا جائزہ لینے کی ترغیب دیتے ہیں۔

ویب سرور اور پری جین سرور کو AWS Cloud9 IDE میں سیٹ کریں۔

اگلا، AWS Cloud9 کنسول پر، ماحول کا پتہ لگائیں۔ PRTPDemoCloud9 CloudFormation اسٹیک کے ذریعہ تخلیق کیا گیا ہے۔ منتخب کریں۔ IDE کھولیں۔ AWS Cloud9 ماحول کو کھولنے کے لیے۔ ایک ٹرمینل ونڈو کھولیں اور درج ذیل کمانڈز چلائیں، جو PRTP کوڈ کو کلون کرتی ہیں، پری جنن انحصار سیٹ کرتی ہیں، اور جانچنے کے لیے ایک ویب سرور شروع کرتی ہیں:

#Obtain PRTP code
cd /home/ec2-user/environment
git clone https://github.com/aws-samples/amazon-polly-reads-the-page.git

# Navigate to that code
cd amazon-polly-reads-the-page/setup

# Install Saxon and html5 Python lib. For pre-gen.
sh ./setup.sh <StackName>

# Run Python simple HTTP server
cd ..
./runwebserver.sh <IngressCIDR> 

کے لئے <StackName>، وہ نام استعمال کریں جو آپ نے CloudFormation اسٹیک دیا ہے۔ کے لیے <IngressCIDR>, ویب سرور تک رسائی کی اجازت والے IP پتوں کی ایک حد کی وضاحت کریں۔ اپنی مقامی مشین پر براؤزر تک رسائی کو محدود کرنے کے لیے، استعمال کرتے ہوئے اپنا IP پتہ تلاش کریں۔ https://whatismyipaddress.com/ اور شامل کریں /32 رینج کی وضاحت کرنے کے لئے. مثال کے طور پر، اگر آپ کا IP ہے۔ 10.2.3.4, use 10.2.3.4/32. سرور پورٹ 8080 پر سنتا ہے۔ عوامی IP ایڈریس جس پر سرور سنتا ہے آؤٹ پٹ میں دیا جاتا ہے۔ مثال کے طور پر:

Public IP is

3.92.33.223

جامد صفحات کی جانچ کریں۔

اپنے براؤزر میں، نیویگیٹ کریں۔ PRTPStaticDefault.html. (اگر آپ ڈیمو استعمال کر رہے ہیں تو، URL ہے http://<cloud9host>:8080/web/PRTPStaticDefault.html، کہاں <cloud9host> عوامی IP ایڈریس ہے جو آپ نے IDE کو ترتیب دینے میں دریافت کیا ہے۔) منتخب کریں۔ کھیلیں سب سے اوپر آڈیو کنٹرول پر۔ آڈیو سنیں اور جھلکیاں دیکھیں۔ رفتار بدل کر، آوازیں بدل کر، روک کر، تیزی سے آگے بڑھا کر، اور ریوائنڈ کر کے کنٹرول کو دریافت کریں۔ مندرجہ ذیل اسکرین شاٹ صفحہ دکھاتا ہے؛ متن "چھپا ہوا پیراگراف چھوڑتا ہے" کو نمایاں کیا گیا ہے کیونکہ یہ فی الحال پڑھا جا رہا ہے۔

Amazon Polly PlatoBlockchain ڈیٹا انٹیلی جنس کا استعمال کرتے ہوئے ویب صفحات پڑھیں اور مواد کو نمایاں کریں۔ عمودی تلاش۔ عی

کے لیے بھی کوشش کریں۔ PRTPStaticConfig.html اور PRTPStaticCustom.html. نتائج ایک جیسے ہیں۔ مثال کے طور پر، تینوں نے بلی کی تصویر کے لیے Alt متن پڑھا ("بلی کی بے ترتیب تصویر")۔ تینوں نے NE، NW، SE، اور SW کو مکمل الفاظ کے طور پر پڑھا ("شمال مشرق،" "شمال مغرب،" "جنوب مشرق،" "جنوب مغرب")، ایمیزون پولی لغت سے فائدہ اٹھاتے ہوئے۔

آڈیو میں بنیادی فرق دیکھیں:

  • PRTPStaticDefault.html صفحہ کے باڈی میں موجود تمام متن کو پڑھتا ہے، جس میں نچلے حصے میں "ایک لفظ میں آپ کے خیالات"، "استفسار جمع کروائیں،" "آخری بار اپریل 1، 2020 کو اپ ڈیٹ کیا گیا،" اور "دیو ٹیم کے لیے سوالات" شامل ہیں۔ PRTPStaticConfig.html اور PRTPStaticCustom.html ان کو مت پڑھیں کیونکہ یہ واضح طور پر تقریر کی ترکیب سے لپیٹ کو خارج کر دیتے ہیں۔
  • PRTPStaticCustom.html پڑھتا ہے کیو بی بیسٹ سیلرز میز دوسروں سے مختلف ہے. یہ صرف پہلی تین قطاروں کو پڑھتا ہے، اور ہر قطار کے لیے قطار کا نمبر پڑھتا ہے۔ یہ ہر قطار کے کالموں کو دہراتا ہے۔ PRTPStaticCustom.html ٹیبل کے ریڈ آؤٹ کو تیار کرنے کے لیے حسب ضرورت تبدیلی کا استعمال کرتا ہے۔ دوسرے صفحات ڈیفالٹ ٹیبل رینڈرنگ کا استعمال کرتے ہیں۔
  • PRTPStaticCustom.html "ٹام بریڈی" کو باقی متن سے زیادہ بلند آواز میں پڑھتا ہے۔ یہ اسپیچ سنتھیسس مارک اپ لینگویج (SSML) استعمال کرتا ہے۔ prosody ٹام بریڈی کے پڑھنے کو تیار کرنے کے لیے ٹیگ کریں۔ دوسرے صفحات اس طرح تیار نہیں ہوتے ہیں۔
  • PRTPStaticCustom.html, ایک حسب ضرورت تبدیلی کی بدولت، NW, SW, NE, SE آرڈر میں مین ٹائلز پڑھتا ہے۔ یعنی، یہ پڑھتا ہے "آج کے مضامین،" "دن کا اقتباس،" "دن کی تصویر،" "دن کے لطیفے۔" دوسرے صفحات اس ترتیب سے پڑھتے ہیں جس ترتیب سے ٹائلیں قدرتی NW, NE, SW, SE میں ظاہر ہوتی ہیں وہ HTML میں ظاہر ہوتی ہیں: "آج کے مضامین،" "دن کی تصویر،" "دن کا اقتباس،" "جوکس آف دی دن۔"

آئیے مزید گہرائی میں دیکھیں کہ آڈیو کیسے تیار ہوتا ہے، اور صفحہ متن کو کیسے نمایاں کرتا ہے۔

جامد پری جنریٹر

ہمارے GitHub ریپو میں پہلے سے تیار کردہ آڈیو فائلیں شامل ہیں۔ PRPTStatic صفحات، لیکن اگر آپ انہیں خود بنانا چاہتے ہیں، AWS Cloud9 IDE میں bash شیل سے، درج ذیل کمانڈز کو چلائیں:

# navigate to examples
cd /home/ec2-user/environment/amazon-polly-reads-the-page-blog/pregen/examples

# Set env var for my S3 bucket. Example, I called mine prtp-output
S3_BUCKET=prtp-output # Use output BucketName from CloudFormation

#Add lexicon for pronuniciation of NE NW SE NW
#Script invokes aws polly put-lexicon
./addlexicon.sh.

#Gen each variant
./gen_default.sh
./gen_config.sh
./gen_custom.sh

اب دیکھتے ہیں کہ وہ اسکرپٹ کیسے کام کرتی ہیں۔

پہلے سے طے شدہ کیس

ہم شروع کرتے ہیں gen_default.sh:

cd ..
python FixHTML.py ../web/PRTPStaticDefault.html  
   example/tmp_wff.html
./gen_ssml.sh example/tmp_wff.html generic.xslt example/tmp.ssml
./run_polly.sh example/tmp.ssml en-US Joanna 
   ../web/polly/PRTPStaticDefault compass
./run_polly.sh example/tmp.ssml en-US Matthew 
   ../web/polly/PRTPStaticDefault compass

اسکرپٹ کا آغاز ازگر پروگرام کو چلانے سے ہوتا ہے۔ FixHTML.py ماخذ HTML فائل بنانے کے لیے PRTPStaticDefault.html اچھی طرح سے قائم. یہ فائل کے اچھی طرح سے تشکیل شدہ ورژن کو لکھتا ہے۔ example/tmp_wff.html. یہ قدم دو وجوہات کی بنا پر اہم ہے:

  • زیادہ تر سورس ایچ ٹی ایم ایل اچھی طرح سے نہیں بنتا۔ یہ مرحلہ سورس HTML کو اچھی طرح سے تشکیل دینے کے لیے مرمت کرتا ہے۔ مثال کے طور پر، بہت سے HTML صفحات بند نہیں ہوتے ہیں۔ P عناصر. یہ قدم انہیں بند کر دیتا ہے۔
  • ہم اس بات پر نظر رکھتے ہیں کہ HTML صفحہ میں ہمیں متن کہاں ملتا ہے۔ ہمیں اسی دستاویز آبجیکٹ ماڈل (DOM) ڈھانچے کا استعمال کرتے ہوئے مقامات کو ٹریک کرنے کی ضرورت ہے جو براؤزر استعمال کرتا ہے۔ مثال کے طور پر، براؤزر خود بخود a کا اضافہ کرتا ہے۔ TBODY ایک TABLE. Python پروگرام براؤزر کی طرح ہی اچھی طرح سے مرمت کرتا ہے۔

gen_ssml.sh اچھی طرح سے بنائے گئے HTML کو ان پٹ کے طور پر لیتا ہے، اس پر ایک XML اسٹائل شیٹ ٹرانسفارمیشن (XSLT) ٹرانسفارمیشن کا اطلاق کرتا ہے، اور SSML فائل کو آؤٹ پٹ کرتا ہے۔ (ایس ایس ایم ایل ایمیزون پولی میں یہ کنٹرول کرنے کے لیے زبان ہے کہ متن سے آڈیو کیسے پیش کیا جاتا ہے۔) موجودہ مثال میں، ان پٹ ہے example/tmp_wff.html. آؤٹ پٹ ہے۔ example/tmp.ssml. ٹرانسفارم کا کام یہ طے کرنا ہے کہ HTML سے کون سا متن نکالا جائے اور Amazon Polly کو فیڈ کیا جائے۔ generic.xslt زیادہ تر ویب صفحات کے لیے ایک سمجھدار ڈیفالٹ XSLT ٹرانسفارم ہے۔ مندرجہ ذیل مثال کے کوڈ کے ٹکڑوں میں، یہ آڈیو کنٹرول، HTML ہیڈر کے ساتھ ساتھ HTML عناصر جیسے script اور form. یہ پوشیدہ وصف والے عناصر کو بھی خارج کرتا ہے۔ اس میں ایسے عناصر شامل ہیں جو عام طور پر متن پر مشتمل ہوتے ہیں، جیسے P, H1، اور SPAN. ان کے لیے، یہ عنصر کا مکمل XPath اظہار، اور عنصر کی قدر سمیت ایک نشان دونوں پیش کرتا ہے۔

<!-- skip the header -->
<xsl:template match="html/head">
</xsl:template>

<!-- skip the audio itself -->
<xsl:template match="html/body/table[@id='prtp-audio']">
</xsl:template>

<!-- For the body, work through it by applying its templates. This is the default. -->
<xsl:template match="html/body">
<speak>
      <xsl:apply-templates />
</speak>
</xsl:template>

<!-- skip these -->
<xsl:template match="audio|option|script|form|input|*[@hidden='']">
</xsl:template>

<!-- include these -->
<xsl:template match="p|h1|h2|h3|h4|li|pre|span|a|th/text()|td/text()">
<xsl:for-each select=".">
<p>
      <mark>
          <xsl:attribute name="name">
          <xsl:value-of select="prtp:getMark(.)"/>
          </xsl:attribute>
      </mark>
      <xsl:value-of select="normalize-space(.)"/>
</p>
</xsl:for-each>
</xsl:template>

درج ذیل SSML کا ایک ٹکڑا ہے جو پیش کیا گیا ہے۔ یہ ایمیزون پولی کو ان پٹ کے طور پر کھلایا جاتا ہے۔ دھیان دیں، مثال کے طور پر، کہ آڈیو میں متن "چھپا ہوا پیراگراف چھوڑتا ہے" پڑھنا ہے، اور ہم اسے ایک نشان کے ساتھ جوڑتے ہیں، جو ہمیں بتاتا ہے کہ یہ متن XPath اظہار کے ذریعے دیے گئے صفحہ پر موجود مقام پر ہوتا ہے۔ /html/body[1]/div[2]/ul[1]/li[1].

<speak>
<p><mark name="/html/body[1]/div[1]/h1[1]"/>PollyReadsThePage Normal Test Page</p>
<p><mark name="/html/body[1]/div[2]/p[1]"/>PollyReadsThePage is a test page for audio readout with highlights.</p>
<p><mark name="/html/body[1]/div[2]/p[2]"/>Here are some features:</p>
<p><mark name="/html/body[1]/div[2]/ul[1]/li[1]"/>Skips hidden paragraph</p>
<p><mark name="/html/body[1]/div[2]/ul[1]/li[2]"/>Speaks but does not highlight collapsed content</p>
…
</speak>

ایمیزون پولی میں آڈیو بنانے کے لیے، ہم اسکرپٹ کو کال کرتے ہیں۔ run_polly.sh. یہ چلاتا ہے۔ AWS کمانڈ لائن انٹرفیس (AWS CLI) کمانڈ aws polly start-speech-synthesis-task دو بار: ایک بار MP3 آڈیو بنانے کے لیے، اور دوبارہ مارکس فائل بنانے کے لیے۔ چونکہ جنریشن غیر مطابقت پذیر ہے، اس لیے اسکرپٹ اس وقت تک پول کرتا ہے جب تک کہ اسے مخصوص S3 بالٹی میں آؤٹ پٹ نہ مل جائے۔ جب اسے آؤٹ پٹ مل جاتا ہے، تو یہ بلڈ سرور پر ڈاؤن لوڈ ہوتا ہے اور فائلوں کو کاپی کرتا ہے۔ web/polly فولڈر مندرجہ ذیل ویب فولڈرز کی فہرست ہے:

  • PRTPStaticDefault.html
  • PRTPStaticConfig.html
  • PRTPSstaticCustom.html
  • PRTP.js
  • polly/PRTPStaticDefault/Joanna.mp3, Joanna.marks, Matthew.mp3, Matthew.marks
  • polly/PRTPStaticConfig/Joanna.mp3, Joanna.marks, Matthew.mp3, Matthew.marks
  • polly/PRTPStaticCustom/Joanna.mp3, Joanna.marks, Matthew.mp3, Matthew.marks

ہر صفحہ میں آواز کے لیے مخصوص MP3 کا اپنا سیٹ ہوتا ہے اور فائلوں کو نشان زد کرتا ہے۔ یہ فائلیں پہلے سے تیار کردہ فائلیں ہیں۔ صفحہ کو رن ٹائم پر ایمیزون پولی کو طلب کرنے کی ضرورت نہیں ہے۔ فائلیں ویب کی تعمیر کا حصہ ہیں۔

ترتیب سے چلنے والا کیس

اگلا، غور کریں gen_config.sh:

cd ..
python FixHTML.py ../web/PRTPStaticConfig.html 
  example/tmp_wff.html
python ModGenericXSLT.py example/transform_config.json 
  example/tmp.xslt
./gen_ssml.sh example/tmp_wff.html example/tmp.xslt 
  example/tmp.ssml
./run_polly.sh example/tmp.ssml en-US Joanna 
  ../web/polly/PRTPStaticConfig compass
./run_polly.sh example/tmp.ssml en-US Matthew 
  ../web/polly/PRTPStaticConfig compass

اسکرپٹ پہلے سے طے شدہ کیس میں اسکرپٹ سے ملتا جلتا ہے، لیکن بولڈ لائنیں بنیادی فرق کی نشاندہی کرتی ہیں۔ ہمارا نقطہ نظر تشکیل پر مبنی ہے۔ ہم صفحہ سے نکالے جانے والے مواد کو یہ بتا کر تیار کرتے ہیں کہ کنفیگریشن کے ذریعے کیا نکالنا ہے، کوڈ کے ذریعے نہیں۔ خاص طور پر، ہم JSON فائل استعمال کرتے ہیں۔ transform_config.json، جو یہ بتاتا ہے کہ شامل کیا جانے والا مواد IDs والے عناصر ہیں۔ title, main, maintable، اور qbtable. ID کے ساتھ عنصر wrapup خارج کر دیا جانا چاہئے. درج ذیل کوڈ دیکھیں:

{
 "inclusions": [ 
 	{"id" : "title"} , 
 	{"id": "main"}, 
 	{"id": "maintable"}, 
 	{"id": "qbtable" }
 ],
 "exclusions": [
 	{"id": "wrapup"}
 ]
}

ہم Python پروگرام چلاتے ہیں۔ ModGenericXSLT.py ترمیم کرنے کے لئے generic.xslt, پہلے سے طے شدہ صورت میں استعمال کیا جاتا ہے، ان شمولیتوں اور اخراجوں کو استعمال کرنے کے لیے جن کی ہم نے وضاحت کی ہے transform_config.json. پروگرام نتائج کو ایک عارضی فائل میں لکھتا ہے (example/tmp.xslt)، جسے یہ گزرتا ہے۔ gen_ssml.sh جیسا کہ اس کا XSLT تبدیل ہوتا ہے۔

یہ کم کوڈ والا آپشن ہے۔ ویب پبلشر کو یہ جاننے کی ضرورت نہیں ہے کہ XSLT کیسے لکھنا ہے۔ لیکن انہیں HTML صفحہ کی ساخت اور اس کے مرکزی تنظیمی عناصر میں استعمال ہونے والی IDs کو سمجھنے کی ضرورت ہے۔

حسب ضرورت کیس

آخر میں، غور کریں gen_custom.sh:

cd ..
python FixHTML.py ../web/PRTPStaticCustom.html 
   example/tmp_wff.html
./gen_ssml.sh example/tmp_wff.html example/custom.xslt  
   example/tmp.ssml
./run_polly.sh example/tmp.ssml en-US Joanna 
   ../web/polly/PRTPStaticCustom compass
./run_polly.sh example/tmp.ssml en-US Matthew 
   ../web/polly/PRTPStaticCustom compass

یہ اسکرپٹ ڈیفالٹ اسکرپٹ سے تقریباً مماثل ہے، سوائے اس کے کہ یہ اپنا XSLT استعمال کرتا ہے۔example/custom.xslt- عام XSLT کے بجائے۔ ذیل میں XSLT کا ایک ٹکڑا ہے:

<!-- Use NW, SW, NE, SE order for main tiles! -->
<xsl:template match="*[@id='maintable']">
    <mark>
        <xsl:attribute name="name">
        <xsl:value-of select="stats:getMark(.)"/>
        </xsl:attribute>
    </mark>
    <xsl:variable name="tiles" select="./tbody"/>
    <xsl:variable name="tiles-nw" select="$tiles/tr[1]/td[1]"/>
    <xsl:variable name="tiles-ne" select="$tiles/tr[1]/td[2]"/>
    <xsl:variable name="tiles-sw" select="$tiles/tr[2]/td[1]"/>
    <xsl:variable name="tiles-se" select="$tiles/tr[2]/td[2]"/>
    <xsl:variable name="tiles-seq" select="($tiles-nw,  $tiles-sw, $tiles-ne, $tiles-se)"/>
    <xsl:for-each select="$tiles-seq">
         <xsl:apply-templates />  
    </xsl:for-each>
</xsl:template>   

<!-- Say Tom Brady load! -->
<xsl:template match="span[@style = 'color:blue']" >
<p>
      <mark>
          <xsl:attribute name="name">
          <xsl:value-of select="prtp:getMark(.)"/>
          </xsl:attribute>
      </mark>
      <prosody volume="x-loud">Tom Brady</prosody>
</p>
</xsl:template>

اگر آپ کوڈ کا تفصیل سے مطالعہ کرنا چاہتے ہیں تو GitHub ریپو میں موجود اسکرپٹس اور پروگراموں کو دیکھیں۔

براؤزر سیٹ اپ اور ہائی لائٹس

جامد صفحات میں ایک HTML5 آڈیو کنٹرول شامل ہے، جو ایمیزون پولی کی طرف سے تیار کردہ اور ویب سرور پر موجود MP3 فائل کو اپنے آڈیو سورس کے طور پر لیتا ہے:

<audio id="audio" controls>
  <source src="polly/PRTPStaticDefault/en/Joanna.mp3" type="audio/mpeg">
</audio>

لوڈ کے وقت، صفحہ ایمیزون پولی سے تیار کردہ مارکس فائل کو بھی لوڈ کرتا ہے۔ یہ میں ہوتا ہے PRTP.js فائل، جس میں HTML صفحہ شامل ہے۔ مندرجہ ذیل کے لیے مارکس فائل کا ایک ٹکڑا ہے۔ PRTPStaticDefault:

{“time”:11747,“type”:“sentence”,“start”:289,“end”:356,“value”:“PollyReadsThePage is a test page for audio readout with highlights.“}
{“time”:15784,“type”:“ssml”,“start”:363,“end”:403,“value”:“/html/body[1]/div[2]/p[2]“}
{“time”:16427,“type”:“sentence”,“start”:403,“end”:426,“value”:“Here are some features:“}
{“time”:17677,“type”:“ssml”,“start”:433,“end”:480,“value”:“/html/body[1]/div[2]/ul[1]/li[1]“}
{“time”:18344,“type”:“sentence”,“start”:480,“end”:502,“value”:“Skips hidden paragraph”}
{“time”:19894,“type”:“ssml”,“start”:509,“end”:556,“value”:“/html/body[1]/div[2]/ul[1]/li[2]“}
{“time”:20537,“type”:“sentence”,“start”:556,“end”:603,“value”:“Speaks but does not highlight collapsed content”}

آڈیو پلے بیک کے دوران، ایک آڈیو ٹائمر ایونٹ ہینڈلر ہوتا ہے۔ PRTP.js جو آڈیو کا موجودہ وقت چیک کرتا ہے، نمایاں کرنے کے لیے متن تلاش کرتا ہے، صفحہ پر اس کا مقام تلاش کرتا ہے، اور اسے نمایاں کرتا ہے۔ جس متن پر روشنی ڈالی جائے وہ قسم کا اندراج ہے۔ sentence مارکس فائل میں۔ مقام SSML قسم کے اندراج کے نام وصف میں XPath اظہار ہے جو جملے سے پہلے ہے۔ مثال کے طور پر، اگر وقت 18400 ہے، مارکس فائل کے مطابق، جس جملے کو ہائی لائٹ کیا جائے وہ ہے "Skips hidden paragraph" جو کہ 18334 سے شروع ہوتا ہے۔ مقام 17667 کے وقت SSML اندراج ہے: /html/body[1]/div[2]/ul[1]/li[1].

متحرک صفحات کی جانچ کریں۔

صفحہ PRTPDynamic.html ڈیفالٹ، ترتیب سے چلنے والے، اور حسب ضرورت آڈیو نکالنے کے طریقوں کا استعمال کرتے ہوئے متحرک آڈیو ریڈ بیک کو ظاہر کرتا ہے۔

پہلے سے طے شدہ کیس

اپنے براؤزر میں، نیویگیٹ کریں۔ PRTPDynamic.html. صفحہ میں ایک سوال کا پیرامیٹر ہے، dynOption، جو اقدار کو قبول کرتا ہے۔ default, config، اور custom. یہ پہلے سے طے شدہ ہے۔ default، لہذا آپ اس معاملے میں اسے چھوڑ سکتے ہیں۔ صفحہ میں متحرک مواد کے ساتھ دو حصے ہیں:

  • تازہ ترین مضامین - دن بھر میں اکثر تبدیلیاں
  • یونانی فلسفی تاریخ کے لحاظ سے تلاش کرتے ہیں۔ - وزیٹر کو تاریخ کے مطابق یونانی فلسفیوں کو تلاش کرنے کی اجازت دیتا ہے اور نتائج کو ٹیبل میں دکھاتا ہے

Amazon Polly PlatoBlockchain ڈیٹا انٹیلی جنس کا استعمال کرتے ہوئے ویب صفحات پڑھیں اور مواد کو نمایاں کریں۔ عمودی تلاش۔ عی

میں کچھ مواد بنائیں یونانی فلاسفر سیکشن -800 سے 0 کی تاریخ کی حد درج کرکے، جیسا کہ مثال میں دکھایا گیا ہے۔ پھر منتخب کریں۔ مل.

اب منتخب کرکے آڈیو چلائیں۔ کھیلیں آڈیو کنٹرول میں۔

پردے کے پیچھے، صفحہ آڈیو کو رینڈر کرنے اور چلانے کے لیے درج ذیل کوڈ کو چلاتا ہے۔

   buildSSMLFromDefault();
   chooseRenderAudio();
   setVoice();

پہلے یہ فنکشن کو کال کرتا ہے۔ buildSSMLFromDefault in PRTP.js HTML صفحہ کے جسم سے زیادہ تر متن نکالنے کے لیے۔ وہ فنکشن DOM کے درخت پر چلتا ہے، عام عناصر جیسے متن کی تلاش میں p, h1, pre, span، اور td. یہ ایسے عناصر میں متن کو نظر انداز کرتا ہے جو عام طور پر بلند آواز سے پڑھنے کے لیے متن پر مشتمل نہیں ہوتے، جیسے audio, option، اور script. یہ ایمیزون پولی کو ان پٹ کرنے کے لیے SSML مارک اپ بناتا ہے۔ مندرجہ ذیل ایک ٹکڑا ہے جس میں سے پہلی قطار کو نکالنا دکھایا گیا ہے۔ philosopher ٹیبل:

<speak>
...
  <p><mark name="/HTML[1]/BODY[1]/DIV[3]/DIV[1]/DIV[1]/TABLE[1]/TBODY[1]/TR[2]/TD[1]"/>Thales</p>
  <p><mark name="/HTML[1]/BODY[1]/DIV[3]/DIV[1]/DIV[1]/TABLE[1]/TBODY[1]/TR[2]/TD[2]"/>-624 to -546</p>
  <p><mark name="/HTML[1]/BODY[1]/DIV[3]/DIV[1]/DIV[1]/TABLE[1]/TBODY[1]/TR[2]/TD[3]"/>Miletus</p>
  <p><mark name="/HTML[1]/BODY[1]/DIV[3]/DIV[1]/DIV[1]/TABLE[1]/TBODY[1]/TR[2]/TD[4]"/>presocratic</p>
...
</speak>

۔ chooseRenderAudio میں کام PRTP.js Amazon Cognito، Amazon S3، اور Amazon Polly کے لیے AWS SDK شروع کرنے سے شروع ہوتا ہے۔ یہ ابتداء صرف ایک بار ہوتی ہے۔ اگر chooseRenderAudio دوبارہ درخواست کی جاتی ہے کیونکہ صفحہ کا مواد بدل گیا ہے، ابتدا کو چھوڑ دیا گیا ہے۔ درج ذیل کوڈ دیکھیں:

AWS.config.region = env.REGION
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
            IdentityPoolId: env.IDP});
audioTracker.sdk.connection = {
   polly: new AWS.Polly({apiVersion: '2016-06-10'}),
   s3: new AWS.S3()
};

یہ ایمیزون پولی سے MP3 آڈیو تیار کرتا ہے۔ جنریشن چھوٹے SSML ان پٹس کے لیے ہم وقت ساز ہے اور بڑے SSML ان پٹس (3 حروف سے زیادہ) کے لیے غیر مطابقت پذیر (S6,000 بالٹی کو بھیجے جانے والے آؤٹ پٹ کے ساتھ)۔ ہم وقت سازی کے معاملے میں، ہم Amazon Polly سے تجویز کردہ URL کا استعمال کرتے ہوئے MP3 فائل فراہم کرنے کو کہتے ہیں۔ جب ترکیب شدہ آؤٹ پٹ تیار ہو جائے تو ہم سیٹ کریں۔ src اس یو آر ایل میں آڈیو کنٹرول کی خصوصیت اور کنٹرول لوڈ کریں۔ اس کے بعد ہم مارکس فائل کی درخواست کرتے ہیں اور اسے اسی طرح لوڈ کرتے ہیں جیسا کہ سٹیٹک کیس میں ہوتا ہے۔ درج ذیل کوڈ دیکھیں:

// create signed URL
const signer = new AWS.Polly.Presigner(pollyAudioInput, audioTracker.sdk.connection.polly);

// call Polly to get MP3 into signed URL
signer.getSynthesizeSpeechUrl(pollyAudioInput, function(error, url) {
  // Audio control uses signed URL
  audioTracker.audioControl.src =
    audioTracker.sdk.audio[audioTracker.voice];
  audioTracker.audioControl.load();

  // call Polly to get marks
  audioTracker.sdk.connection.polly.synthesizeSpeech(
    pollyMarksInput, function(markError, markData) {
    const marksStr = new
      TextDecoder().decode(markData.AudioStream);
    // load marks into page the same as with static
    doLoadMarks(marksStr);
  });
});

ترتیب سے چلنے والا کیس

اپنے براؤزر میں، نیویگیٹ کریں۔ PRTPDynamic.html?dynOption=config. آڈیو چلائیں۔ آڈیو پلے بیک ڈیفالٹ کیس سے ملتا جلتا ہے، لیکن اس میں معمولی فرق ہیں۔ خاص طور پر، کچھ مواد چھوڑ دیا گیا ہے۔

پردے کے پیچھے، استعمال کرتے وقت config آپشن، صفحہ ڈیفالٹ کیس سے مختلف طریقے سے مواد نکالتا ہے۔ پہلے سے طے شدہ صورت میں، صفحہ استعمال کرتا ہے۔ buildSSMLFromDefault. config-driven کیس میں، صفحہ ان حصوں کی وضاحت کرتا ہے جن کو وہ شامل اور خارج کرنا چاہتا ہے:

const ssml = buildSSMLFromConfig({
	 "inclusions": [ 
	 	{"id": "title"}, 
	 	{"id": "main"}, 
	 	{"id": "maintable"}, 
	 	{"id": "phil-result"},
	 	{"id": "qbtable"}, 
	 ],
	 "exclusions": [
	 	{"id": "wrapup"}
	 ]
	});

۔ buildSSMLFromConfig فنکشن، میں بیان کیا گیا ہے۔ PRTP.js، ہر ایک سیکشن میں DOM ٹری چلتا ہے جس کے تحت ID فراہم کی گئی ہے۔ inclusions. یہ ہر ایک سے مواد نکالتا ہے اور SSML دستاویز بنانے کے لیے مخصوص ترتیب میں ان کو ایک ساتھ جوڑتا ہے۔ اس میں ان سیکشنز کو شامل نہیں کیا گیا ہے جن کی وضاحت کی گئی ہے۔ exclusions. یہ ہر سیکشن سے اسی طرح مواد نکالتا ہے۔ buildSSMLFromDefault صفحہ کے جسم سے مواد نکالتا ہے۔

حسب ضرورت کیس

اپنے براؤزر میں، نیویگیٹ کریں۔ PRTPDynamic.html?dynOption=custom. آڈیو چلائیں۔ تین نمایاں فرق ہیں۔ آئیے ان کو نوٹ کریں اور پردے کے پیچھے چلنے والے کسٹم کوڈ پر غور کریں:

  • یہ NW، SW، NE، SE آرڈر میں مین ٹائلوں کو پڑھتا ہے۔ کسٹم کوڈ ان سیل بلاکس میں سے ہر ایک کو حاصل کرتا ہے۔ maintable اور انہیں NW, SW, NE, SE آرڈر میں SSML میں شامل کرتا ہے:
const nw = getElementByXpath("//*[@id='maintable']//tr[1]/td[1]");
const sw = getElementByXpath("//*[@id='maintable']//tr[2]/td[1]");
const ne = getElementByXpath("//*[@id='maintable']//tr[1]/td[2]");
const se = getElementByXpath("//*[@id='maintable']//tr[2]/td[2]");
[nw, sw, ne, se].forEach(dir => buildSSMLSection(dir, []));

  • "ٹام بریڈی" اونچی آواز میں بولا جاتا ہے۔ کسٹم کوڈ "ٹام بریڈی" ٹیکسٹ کو SSML کے اندر رکھتا ہے۔ prosody ٹیگ:
if (cellText == "Tom Brady") {
   addSSMLMark(getXpathOfNode( node.childNodes[tdi]));
   startSSMLParagraph();
   startSSMLTag("prosody", {"volume": "x-loud"});
   addSSMLText(cellText);
   endSSMLTag();
   endSSMLParagraph();
}

  • یہ کوارٹر بیک ٹیبل کی صرف پہلی تین قطاریں پڑھتا ہے۔ یہ ہر قطار کے لیے کالم ہیڈر پڑھتا ہے۔ GitHub ریپو میں کوڈ کو چیک کریں کہ یہ کیسے لاگو ہوتا ہے.

صاف کرو

مستقبل کے چارجز سے بچنے کے لیے، CloudFormation اسٹیک کو حذف کریں۔

نتیجہ

اس پوسٹ میں، ہم نے ایک اعلیٰ قیمت والے کاروباری مسئلے کا ایک تکنیکی حل دکھایا ہے: ویب پیج کے مواد کو پڑھنے کے لیے Amazon Polly کا استعمال کیسے کیا جائے اور اس کے پڑھے جانے والے مواد کو نمایاں کریں۔ ہم نے اسے جامد اور متحرک دونوں صفحات کا استعمال کرتے ہوئے دکھایا۔ صفحہ سے مواد نکالنے کے لیے، ہم نے DOM traversal اور XSLT کا استعمال کیا۔ نمایاں کرنے کی سہولت کے لیے، ہم نے Amazon Polly میں اسپیچ مارکس کی صلاحیت کا استعمال کیا۔

ایمیزون پولی کے بارے میں مزید جانیں۔ سروس صفحہ.

تبصرے میں سوالات پوچھنے کے لئے آزاد محسوس کریں۔


مصنفین کے بارے میں

Amazon Polly PlatoBlockchain ڈیٹا انٹیلی جنس کا استعمال کرتے ہوئے ویب صفحات پڑھیں اور مواد کو نمایاں کریں۔ عمودی تلاش۔ عیمائیک ہیوی AWS کے لیے 25 سال سے زیادہ کے تجربے کے ساتھ انٹرپرائز ایپلی کیشنز بنانے کا ایک حل آرکیٹیکٹ ہے۔ مائیک دو کتابوں اور متعدد مضامین کے مصنف ہیں۔ اس کے ایمیزون پر جائیں۔ مصنف کا صفحہ مزید پڑھنے کے لئے.

Amazon Polly PlatoBlockchain ڈیٹا انٹیلی جنس کا استعمال کرتے ہوئے ویب صفحات پڑھیں اور مواد کو نمایاں کریں۔ عمودی تلاش۔ عیونیت کچاواہا مشین لرننگ میں مہارت کے ساتھ AWS میں ایک حل آرکیٹیکٹ ہے۔ وہ صارفین کو AWS پر قابل توسیع، محفوظ، اور لاگت سے موثر کام کے بوجھ میں مدد کرنے کے لیے ذمہ دار ہے۔

ٹائم اسٹیمپ:

سے زیادہ AWS مشین لرننگ