आपको अनिश्चित लेखों के लिए व्याकरण के नियमों को देखने की आवश्यकता है (अंग्रेजी व्याकरण में केवल दो अनिश्चित लेख हैं - "a" और "a)। आप इन ध्वनियों को सही नहीं मान सकते हैं, लेकिन अंग्रेजी व्याकरण के नियम बहुत स्पष्ट हैं :
"शब्द और एक अनिश्चित लेख हैं। हम अनिश्चित लेख का उपयोग ऐसे शब्दों से पहले करते हैं जो एक स्वर से शुरू होते हैं (ए, ई, आई, ओ, यू) और अनिश्चित शब्द से पहले का शब्द जो एक व्यंजन ध्वनि के साथ शुरू होता है (सभी अन्य पत्र)। "
ध्यान दें कि इसका मतलब स्वर ध्वनि है , और स्वर अक्षर नहीं । उदाहरण के लिए, एक मौन "h" से शुरू होने वाले शब्द, जैसे "सम्मान" या "वारिस" को स्वर के रूप में माना जाता है, इसलिए "a" के साथ आगे बढ़ा जाता है - उदाहरण के लिए, "यह आपसे मिलने वाला सम्मान है"। व्यंजन ध्वनि के साथ शुरू होने वाले शब्द एक उपसर्ग हैं - यही कारण है कि आप "एक इस्तेमाल की गई कार" के बजाय "एक इस्तेमाल की गई कार" कहते हैं - क्योंकि "इस्तेमाल" में "उह" ध्वनि के बजाय "योज़" ध्वनि है।
तो, एक प्रोग्रामर के रूप में, ये पालन करने के नियम हैं। आपको केवल यह निर्धारित करने की आवश्यकता है कि किस अक्षर के बजाय किसी ध्वनि की शुरुआत होती है। मैंने इसके उदाहरण देखे हैं, जैसे कि Jaimie Sirovich के PHP में यह एक है :
function aOrAn($next_word)
{
$_an = array('hour', 'honest', 'heir', 'heirloom');
$_a = array('use', 'useless', 'user');
$_vowels = array('a','e','i','o','u');
$_endings = array('ly', 'ness', 'less', 'lessly', 'ing', 'ally', 'ially');
$_endings_regex = implode('|', $_endings);
$tmp = preg_match('#(.*?)(-| |$)#', $next_word, $captures);
$the_word = trim($captures[1]);
//$the_word = Format::trimString(Utils::pregGet('#(.*?)(-| |$)#', $next_word, 1));
$_an_regex = implode('|', $_an);
if (preg_match("#($_an_regex)($_endings_regex)#i", $the_word)) {
return 'an';
}
$_a_regex = implode('|', $_a);
if (preg_match("#($_a_regex)($_endings_regex)#i", $the_word)) {
return 'a';
}
if (in_array(strtolower($the_word{0}), $_vowels)) {
return 'an';
}
return 'a';
}
शायद नियम बनाना सबसे आसान है और फिर अपवादों की एक सूची बनाएं और उसका उपयोग करें। मैं कल्पना नहीं करता कि वहाँ कई होंगे।