英语简单过去式和过去分词 PHP 自动生成以及英语单词音节计数
英语简单过去式和过去分词 PHP 自动生成以及英语单词音节计数
英语动词形式
英语动词有以下形式:原形、简单过去式和过去分词。对于规则动词,只需在词尾添加“ed”即可生成简单过去式和过去分词。但事情并非如此简单。
形式情况
- 如果动词以“e”结尾,则只添加“d”。例如,“arrive + d = arrived”。
- 如果动词以辅音 + “y”结尾,将“y”改为“i”并添加“-ed”。例如,“study + ed = studied”。
- 如果动词以元音 + “y”结尾,则添加“-ed”。例如,“play + ed = played”。
- 如果动词只有一个音节且以元音 + 辅音结尾,则将辅音加倍。例如,“stop + p + ed = stopped”。
- 如果动词的重音在最后一个音节,且以元音 + 辅音结尾,则将辅音加倍。例如,“prefer + r + ed = preferred”。
- 如果动词的重音不在最后一个音节,且以元音 + 辅音结尾,则只添加“-ed”。例如,“óffer + ed = offered”。
建议的 PHP 代码
如果您有任何意见,请在下面的评论中分享
function english_verb_forms( string $infinitive ) {
$infinitive = trim( strtolower( $infinitive ) );
if ( !$infinitive ) return '';
#1 english irregular verbs
$sql = "SELECT simple_past, past_participle,
regular, form_case FROM english_verbs WHERE
infinitive = '$infinitive'";
global $wpdb;
$verb = $wpdb->get_row( $sql, ARRAY_A );
if ( $verb ) return $verb;
$verb = array();
$verb['regular'] = 'regular' ;
$last = substr( $infinitive, -1 );
#2 infinitive ends with e
if ( $last == 'e' ) {
$verb['simple_past'] = $infinitive . 'd';
$verb['past_participle'] = $verb['simple_past'];
$verb['form_case'] = 'e' ;
return $verb;
}
#3 and #4 infinitive ends with y
if ( $last == 'y' ) {
$last2 = substr( $infinitive, -2, 1 );
#3 infinitive ends with vowel + y
if ( strpos( ' aeuio', $last2 ) === false ) {
$i = strlen( $infinitive ) - 2;
$verb['simple_past'] = substr( $infinitive, 0, $i ) . 'ied';
$verb['past_participle'] = $verb['simple_past'];
$verb['form_case'] = 'vowel + y' ;
return $verb;
} else {
#4 infinitive ends with consonant + y
$verb['simple_past'] = $infinitive . 'ed';
$verb['past_participle'] = $verb['simple_past'];
$verb['form_case'] = 'consonant + y' ;
return $verb;
}
}
#5 infinitive ends with vowel
if ( strpos( ' aeuiow', $last ) !== false ) {
$verb['simple_past'] = $infinitive . 'ed';
$verb['past_participle'] = $verb['simple_past'];
$verb['form_case'] = '' ;
return $verb;
}
#infinitive ends with vowel
$syllables = syllable_count( $infinitive );
if ( !$syllables ) {
$verb['simple_past'] = $infinitive . 'ed';
$verb['past_participle'] = $verb['simple_past'];
$verb['form_case'] = '' ;
return $verb;
}
if ( $syllables == 1 ) {
#5 infinitive has single syllable and ends with consonant
$verb['simple_past'] = $infinitive . $last . 'ed';
$verb['past_participle'] = $verb['simple_past'];
$verb['form_case'] = 'double last' ;
return $verb;
}
#other cases
return false;
}
//##################
function syllable_count( string $str_word ) {
/* Count syllables in a single word, simple version */
$str_word = trim( strtolower( $str_word ) );
if ( !$str_word ) return 0;
if ( strpos( $str_word, ' ' ) ) return 0;
$len = strlen( $str_word );
#1
if ( $len <= 3 ) return 1;
$word = str_split( $str_word );
$syllables = 0;
$vowels = array( 'a', 'e', 'i', 'o', 'u', 'y' );
$first = $word[ 0 ];
if ( in_array( $first, $vowels ) )$syllables++;
for ( $i = 1; $i < count( $word ); $i++ ) {
if ( in_array( $word[ $i ], $vowels ) &&
in_array( $word[ $i - 1 ], $vowels ) )$syllables++;
}
if ( substr( $str_word, -1 ) == 'e' )$syllables--;
if ( $syllables == 0 )$syllables++;
return $syllables;
}
//######################
历史
- 2021年1月26日:初始版本