Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>See <a href="https://stackoverflow.com/a/4558514/196838">this answer</a> for a somewhat usable solution. The answer contains an excerpt from the <a href="http://search.cpan.org/dist/Lingua-EN-Inflect/lib/Lingua/EN/Inflect.pm#PROVIDING_INDEFINITE_ARTICLES" rel="nofollow noreferrer"><code>Lingua::EN::Inflect</code></a> Perl module that seems to do a pretty good job on determining which indefinite article to use:</p> <pre><code>A("cat") # -&gt; "a cat" AN("cat") # -&gt; "a cat" A("euphemism") # -&gt; "a euphemism" A("Euler number") # -&gt; "an Euler number" A("hour") # -&gt; "an hour" A("houri") # -&gt; "a houri" </code></pre> <p>The rules are defined as regular expressions so it shouldn't be too hard to port to PHP.</p> <p><strong>EDIT:</strong> I ended up converting this to PHP (also available on <a href="https://github.com/Kaivosukeltaja/php-indefinite-article" rel="nofollow noreferrer">github</a>).</p> <p>Usage: <code>print IndefiniteArticle::A("umbrella"); // an umbrella</code></p> <pre><code>&lt;?php class IndefiniteArticle { public static function AN($input, $count=1) { return self::A($input, $count); } public static function A($input, $count=1) { $matches = array(); $matchCount = preg_match("/\A(\s*)(?:an?\s+)?(.+?)(\s*)\Z/i", $input, $matches); list($all, $pre, $word, $post) = $matches; if(!$word) return $input; $result = self::_indef_article($word, $count); return $pre.$result.$post; } # THIS PATTERN MATCHES STRINGS OF CAPITALS STARTING WITH A "VOWEL-SOUND" # CONSONANT FOLLOWED BY ANOTHER CONSONANT, AND WHICH ARE NOT LIKELY # TO BE REAL WORDS (OH, ALL RIGHT THEN, IT'S JUST MAGIC!) private static $A_abbrev = "(?! FJO | [HLMNS]Y. | RY[EO] | SQU | ( F[LR]? | [HL] | MN? | N | RH? | S[CHKLMNPTVW]? | X(YL)?) [AEIOU]) [FHLMNRSX][A-Z] "; # THIS PATTERN CODES THE BEGINNINGS OF ALL ENGLISH WORDS BEGINING WITH A # 'y' FOLLOWED BY A CONSONANT. ANY OTHER Y-CONSONANT PREFIX THEREFORE # IMPLIES AN ABBREVIATION. private static $A_y_cons = 'y(b[lor]|cl[ea]|fere|gg|p[ios]|rou|tt)'; # EXCEPTIONS TO EXCEPTIONS private static $A_explicit_an = "euler|hour(?!i)|heir|honest|hono"; private static $A_ordinal_an = "[aefhilmnorsx]-?th"; private static $A_ordinal_a = "[bcdgjkpqtuvwyz]-?th"; private static function _indef_article($word, $count) { if($count != 1) // TODO: Check against $PL_count_one instead return "$count $word"; # HANDLE USER-DEFINED VARIANTS // TODO # HANDLE ORDINAL FORMS if(preg_match("/^(".self::$A_ordinal_a.")/i", $word)) return "a $word"; if(preg_match("/^(".self::$A_ordinal_an.")/i", $word)) return "an $word"; # HANDLE SPECIAL CASES if(preg_match("/^(".self::$A_explicit_an.")/i", $word)) return "an $word"; if(preg_match("/^[aefhilmnorsx]$/i", $word)) return "an $word"; if(preg_match("/^[bcdgjkpqtuvwyz]$/i", $word)) return "a $word"; # HANDLE ABBREVIATIONS if(preg_match("/^(".self::$A_abbrev.")/x", $word)) return "an $word"; if(preg_match("/^[aefhilmnorsx][.-]/i", $word)) return "an $word"; if(preg_match("/^[a-z][.-]/i", $word)) return "a $word"; # HANDLE CONSONANTS if(preg_match("/^[^aeiouy]/i", $word)) return "a $word"; # HANDLE SPECIAL VOWEL-FORMS if(preg_match("/^e[uw]/i", $word)) return "a $word"; if(preg_match("/^onc?e\b/i", $word)) return "a $word"; if(preg_match("/^uni([^nmd]|mo)/i", $word)) return "a $word"; if(preg_match("/^ut[th]/i", $word)) return "an $word"; if(preg_match("/^u[bcfhjkqrst][aeiou]/i", $word)) return "a $word"; # HANDLE SPECIAL CAPITALS if(preg_match("/^U[NK][AIEO]?/", $word)) return "a $word"; # HANDLE VOWELS if(preg_match("/^[aeiou]/i", $word)) return "an $word"; # HANDLE y... (BEFORE CERTAIN CONSONANTS IMPLIES (UNNATURALIZED) "i.." SOUND) if(preg_match("/^(".self::$A_y_cons.")/i", $word)) return "an $word"; # OTHERWISE, GUESS "a" return "a $word"; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload