जर्मन शब्द का उच्चारण कैसे करें


37

परिचय

अंग्रेजी के विपरीत, जर्मन को काफी स्वनिम लेखन प्रणाली माना जाता है । इसका मतलब है कि वर्तनी और उच्चारण के बीच का पत्राचार करीब है। किसी भी शब्द से आप परिचित नहीं हैं, आप अभी भी जानते होंगे कि वर्तनी प्रणाली के कारण इसका उच्चारण कैसे करें। इसका मतलब यह है कि एक कंप्यूटर भी इसे सही करने में सक्षम होना चाहिए?

चुनौती

एक प्रोग्राम या फ़ंक्शन लिखें जो एक जर्मन शब्द का प्रतिनिधित्व करने वाले स्ट्रिंग के रूप में लेता है, और अंतर्राष्ट्रीय ध्वन्यात्मक वर्णमाला (आईपीए) में अपना उच्चारण प्रिंट या वापस करता है ।

मैं निश्चित रूप से आपको जर्मन या पूर्ण आईपीए सीखने नहीं जा रहा हूं । यह एक विकिपीडिया अनुभाग आपको आवश्यकता वाले लगभग सभी जर्मन IPA नियमों को प्रदान करता है, और मैंने एक असम्बद्ध C # संदर्भ कार्यान्वयन को कोडित किया है

इसके अलावा उस लिंक में 400 सामान्य जर्मन शब्दों और उनके IPA उच्चारण (सत्यापन के लिए आवश्यक) की एक सूची है। उस सूची से एक उदाहरण लेते हुए, यदि इनपुट है solltest, तो सही आउटपुट है ˈzɔltəst

संदर्भ कार्यान्वयन में विकिपीडिया अनुभाग में उल्लेखित दो सहायक नियम नहीं हैं: यह मानता है कि शब्द तनाव पहले शब्दांश पर है (जर्मन में बहुत संभावना है), और यह निर्धारित करने के लिए बेहतर हेरास्टिक का उपयोग करता है जब पत्र "ई" स्चवा ध्वनि / ə / का प्रतिनिधित्व करता है। यह उपसर्गों के लिए विशेष प्रसंस्करण को भी लागू करता है, लेकिन इससे परिणामों में सुधार नहीं हुआ जितना मैंने सोचा था कि यह होगा।

विवरण

मान्य प्रविष्टि माने जाने के लिए, आपके कार्यक्रम को निम्नलिखित आवश्यकताओं को पूरा करना चाहिए:

  • संदर्भ शब्द सूची में 400 शब्दों में से कम से कम 300 शब्दों के लिए आपका IPA आउटपुट एक सटीक मिलान होना चाहिए (संदर्भ कार्यान्वयन 333 सही हो जाता है)
  • आपका कार्यक्रम किसी भी जर्मन शब्द के लिए निश्चित रूप से अनुमान लगाना चाहिए। तो हमारे पास एक तकनीकी आवश्यकता है, इसका मतलब यह होगा कि किसी भी इनपुट के लिए जो रेगेक्स से मेल खाता है [a-zA-ZäÄöÖüÜ][a-zäöüß]*और जिसमें कम से कम एक स्वर (aeiouyäöü) है, आपको गैर-व्हाट्सएप-केवल आउटपुट का उत्पादन करना होगा, न कि त्रुटि।
  • कार्यक्रम निर्धारक होना चाहिए (हमेशा एक ही इनपुट दिए गए आउटपुट का उत्पादन करें)
  • अन्यथा, मानक कमियां निषिद्ध हैं (विशेषकर ऑफ-साइट संसाधनों को लाने के बारे में)

विविध चीजें जो आपको करने की अनुमति है:

  • अपने उत्पादन में व्हाट्सएप को अग्रणी और अनुगामी बनायें यदि आपको चाहिए
  • आउटपुट में किसी भी पहले से मौजूद कैरेक्टर एन्कोडिंग का उपयोग करें (मैं यूनिकोड के अलावा कुछ भी अच्छी तरह से कल्पना नहीं कर सकता, लेकिन अगर आप कर सकते हैं, तो बधाई)
  • मान लें कि इनपुट कुछ सामान्यीकृत रूप में है जैसे कि यूनिकोड सामान्यीकरण प्रपत्र NFD, NFC, आदि। उदाहरण के लिए, क्या ä को एकल वर्ण या आधार वर्ण + एक संयोजन वर्ण के रूप में लिखा जाता है?
  • मानक इनपुट और आउटपुट विधियों का उपयोग करें

स्कोरिंग और आईपीए वर्ण

स्कोरिंग बाइट्स में है। चेतावनी दी है कि UTF-8 में जर्मन वर्ण और IPA वर्ण 2 बाइट्स हैं। इसके अलावा, IPA वर्ण U + 0327 COMBINING INVERTED BREVE BELOW (̯) एक यूनिकोड संयोजन वर्ण है और यह अपने आप में एक 2 बाइट UTF-8 वर्ण है। इसका मतलब है कि 8 UTF-8 में 4 बाइट्स के रूप में गिना जाएगा। जिज्ञासु के लिए, इस प्रतीक का मतलब है कि स्वर में शब्दांश नाभिक नहीं बनता है (पिछले एक बजाय करता है)।

इसके अलावा, इन IPA वर्णों से सावधान रहें कि कुछ फोंट में अन्य ASCII वर्णों की तरह दिखते हैं: ware, these, ː, long (एक लंबे स्वर का चिह्न), marks (वे शब्द जो शब्दांश बहुउपयोगी शब्द में तनाव रखते हैं)।

संदर्भ शब्द सूची कैसे बनाई गई

यह खंड चुनौती के लिए आवश्यक अतिरिक्त जानकारी नहीं है।

शब्द सूची को इस विक्षनरी शब्द आवृत्ति सूची से पकड़ा गया था , जो आवरण अंतर के कारण दोहराता है और दो शब्द जो अंग्रेजी विकिपीडिया (ओह और हे) में जर्मन प्रविष्टियां नहीं थे। आईपीए अंग्रेजी और जर्मन दोनों विक्षनरी को देखने से था। जहां कई उच्चारण दिए गए, मैंने अधिक औपचारिक और मानक चुना। यदि यह स्पष्ट नहीं था, तो मैंने उस एक को चुना जो सबसे सामान्य नियमों को फिट करता है।

मुझे यह भी मानकीकृत करना था कि "r" अक्षर का उच्चारण कैसे किया जाता है। यह इस क्षेत्र पर बहुत अधिक निर्भर है कि यह पत्र किस प्रकार उच्चारित होता है, और विक्षनरी उस अनुरूप नहीं था, जिसमें उसने इसे चुना था। मैंने महसूस किया कि यह निम्नलिखित की ओर रुझान करता है: "r" का उच्चारण / by / होता है जब एक लंबे स्वर के बाद और एक स्वर का पालन नहीं होता है, अन्यथा, यह ʁ है। इसलिए, मैंने उन सभी नियमों को उस नियम का पालन करने के लिए बदल दिया, सिवाय इसके कि- और er- उपसर्ग जो कि लगातार काफी थे / (f) of /। इसी तरह, मैंने "यूरो" को / I / के रूप में मानकीकृत किया।


16
गणितज्ञ के पास इसके लिए एक अंतर्निहित ( #~WordData~"PhoneticForm"&) है, लेकिन यह केवल अंग्रेजी शब्दों के लिए काम करता है।
जंगहवान मिन

29
@JungHwanMin मैंने आपकी टिप्पणी इस प्रकार पढ़ी: तत्काल दिल का दौरा, राहत की सांस।
DPenner1

1
मुझे कैसे पता होना चाहिए कि "जेस्ट" को "गे-टर्न" के बजाय "ग्रेस-टर्न" कहा जाता है? "bester" को "BEST-er" नहीं "be-SHTER" के रूप में?
लीक नून

@LeakyNun इसके लिए कोई 100% एल्गोरिदम नहीं है, लेकिन आपके कार्यान्वयन को केवल 75% प्राप्त करने की आवश्यकता है। मेरे संदर्भ कार्यान्वयन में उन शब्दों को गलत भी कहा गया है।
DPenner1

@LeakyNun खैर, आपका कार्यक्रम जर्मन बोलियों से निपटने में भी सक्षम होगा, इसलिए यह अधिक शक्तिशाली है।
पी। सेहर

जवाबों:


9

PHP, 3311 2988 2916 2845 2759 2671 2667 2509 2484 बाइट, 301/400 पास

<?$f=fopen(__FILE__,r);fseek($f,__COMPILER_HALT_OFFSET__);eval(strtr(stream_get_contents($f),[F=>'=>',M=>'==','&'=>'&&',H=>'function ',A_=>'array',G=>'if',4=>'for','|'=>'||','~'=>'))','%'=>str,7=>'=$',8=>'[]',9=>'!$','@'=>'count(','#'=>';$',5=>'return ',3=>':(']));__halt_compiler();define(J,[ieh,ah,aa,Ah,eh,ee,ie,ih,oh,oo,Oh,uh,Uh,au,eu,Au,ei,ai,ey,ay,a,e,i,o,u,A,O,U,y])#b7e=8;Hv($a){5in_A_($a,J);}Hn($a){5!v($a);}Hpronounce($w){global$b,$e#w=%tr(%tolower(%tr($w,[ßF1,ÄF2,äF2,ÖF0,öF0,ÜF6,üF6]~,[1FS,2FA,0FO,6FU])#W=8#L7w;while($L)4each(A__merge([tzsch,dsch,tsch,zsch,sch,chs,ch,ck,dt,ng,nk,pf,ph,qu,ss,th,tz,b,c,d,f,g,h,j,k,l,m,n,p,r,s,S,t,v,w,x,z],J)as$c){$l=%len($c);G(sub%($L,0,$l)M$c){$W87c#L=sub%($L,$l);break;}}$s=8#l=@$W);4($o7t7i=0#i<$l#i++){$c7W[$i]#p7i?$W[$i-1]:0#n7iM$l-1?0:$W[$i+1];G(9n|!(n($c)&$cM$n&n($W[$i+2]~)$s[$o]87c;G($p&((9n&v($c)&n($p~|(n($n)&v($W[$i+2]~~$s[++$o]=8;}$s[@$s)-1]|A__pop($s);4each($s as$z){$b87t#t+=@$z)#e87t;}$o=[sieFziQ,duFduQ,'die'FdiQ,derFdeQT,zuFtsuQ,wirFviQT,mirFmiQT,denFdeQn,dassFdas,erFeQT,soFzoQ,warFvaQT,fürFfyQT,jaFjaQ,wieFviQ,dirFdiQT,nurFnuQT,demFdeQm,ihnFiQn,auchFaUBx,ihrFiQT,daFdaQ,schonFʃoQn,wennFvEn,malFmaQl,gutFguQt,nachFnaQx,willFvIl,mussFmUs,habFhaQp,vorFfoQT,ihmFmiQm,tunFtuQn][$w]?:'';G($o)goto x#P7B7S7V7Z=0;@$s)>1&$o=[verFfET,daFda,geFgC][join($s[0])]#o&$P=1&A__shGt($s);(($P|@$s)M2)&$o.=W)|(@$s)>2&$d=1&$h=(int)@$s)/2)#w=A__merge(...$s);4each($w as$l){G(0<$S--)continue#n7w[$B+1]#p7w[$B-1]#f=''#Z+=in_A_($B,$b)#f7lMd&9n?t3$lMb&(9n|$nMt)?p3$lMg&(9n|$nMt)?((9n&$pMi)?K:k)3$lMc?(($nMA|$nMe|$nMi)?ts:k)3$lMch?(($pMa|$pMo|$pMu)?x:K)3$lMchs|$lMx?ks3$lMck?k3$lMdsch?dZ3$lMdt|$lMth?t3$lMph|$lMv?f39f&$lMg?g3$lMh?(v($n)?h:'')3$lMng?N3$lMnk?Nk3$lMqu?kv3$lMr?((!v($n)&9nMt)?T:R)3$lMsch?S3$lMss|$lMS?s3$lMtsch|$lMtzsch|$lMzsch?tS3$lMtz|$lMz?ts3$lMw?v3$lMs?(9p&($nMp|$nMt~?S3v($n)?z:s):$f~~~~~~~~~~)#U=0;G(v($l~{G(%len($l)>1)($f=[auFaUB,euFcYB,eiFaIB][$l])|$U=1;else{G(n($n)&((9w[$B+2]&$n!=n)|v($w[$B+2]~)$U=1;G($lMe){$U=9n?:$U;G(9w[$B+2]){G($nMr)($f=A)&$U=9S=1;G($nMm|$nMl)$f=C;}}elseG($nMch)$U=0;G(in_A_($B,$e~$U=0;}$f=($U|9Z)&9f?($l[0]MO?D3$l[0]MU?y3$l[0]MA?E:$l[0]~).Q39f?($lMe?((9n|(9w[$B+2]&($nMn|$nMs~)?C:E)3$lMA?E3$lMi?I3$lMo?c3$lMu?U3($lMU|$lMy)?Y:$l~~~:$f)#V++;}$f7f?:$l;G($d&$ZM$h)$f.=W#o.7f#B++;}G(%pos($o,W)M=false&$V>1)$o=W.$o;4(#j++<%len($o);)G($o[$j]M$o[$j+1])$o=sub%($o,0,$j).sub%($o,$j+1);x:5%tr($o,[SFʃ,ZFʒ,KFç,gFɡ,NFŋ,QF'ː',WFˈ,TFɐ̯,BF'̯',RFʁ,AFɐ,EFɛ,OFœ,IFɪ,YFʏ,UFʊ,cFɔ,CFə,DFø]);}

परिभाषित करता है pronounce(string $word)

उपयोग:

assert(
    pronounce('darüber') == "daˈʁyːbɐ"
);

एक नोट: 3 उपसर्ग और 33 शब्द हार्ड-कोडेड हैं, और कुछ कोड हल्के से परीक्षण सूची के लिए अनुकूलित हैं।

परीक्षण कोड यहां है , हालांकि यह इस फाइल पर निर्भर करता है ।

परीक्षा करना:

php test.php all

आंसू बयानों के आँसू द्वारा संचालित।

संपादित करें 7 : कार्यक्रम में एक प्रीप्रोसेसर लिखकर ~ 170 बाइट से निचोड़ा गया। परिणामस्वरूप, वास्तविक कार्यक्रम (सब कुछ के बाद __halt_compiler();) पढ़ने में कठिन है। यदि आप अनप्रोसेस्ड प्रोग्राम चाहते हैं, तो तीसरे स्टेटमेंट में स्विच evalकरें print


यह वास्तव में 2667 बाइट्स है, 2671 नहीं (UTF-8 मानकर)
caird coinheringaahing
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.