单词单复数转换函数

/// <summary>
        
/// 单词单复数转换函数,本函数对2个或2个字母以上单词有效
        
/// </summary>
        
/// <param name="world">待转换的单词</param>
        
/// <returns>返回一个长度为2的字符串数组,第一个值为单数单词,第二个为复数单词</returns>
        public static string[] worldTransform(string world)
        {
            world 
= world.ToLower();//将单词转成小写形式
            string vowel = "aoeiu";//声明元音字符串
            int length = world.Length;//获取单词字符长度待用
            string[] worlds = new string[2];//声明一个二维字符串数组
            if (length == 1)
            {
                worlds[
0= world;//存储单词单数形式
                worlds[1= world;//存储单词复数形式
                return worlds;
            }
            
else
            {
                
char last = world[length - 1];//取出单词最后一个字符待用
                char last2 = world[length - 2];//取出单词倒数第二个字符待用
                char last3 = ' ';
                
if (length >= 3)
                    last3 
= world[length - 3];//取出单词倒数第三个字符待用
                char last4 = ' ';
                
if (length >= 4)
                    last4 
= world[length - 4];//取出单词倒数第四个字符待用
                worlds[0= world;//存储单词单数形式
                worlds[1= world;//存储单词复数形式


                
if (length == 1)
                {
                    
return worlds;
                }
                
if (last != 's' || length <= 2)
                {
                    
//单词最后一个字母不为"s",则可判断为单数形式
                    switch (last)
                    {
                        
case 'y':
                            
if (vowel.IndexOf(last2) < 0)
                            {
                                worlds[
1= worlds[1].Substring(0, length - 1+ "i";
                                worlds[
1+= "es";
                            }
                            
else
                                worlds[
1+= "s";
                            
break;
                        
case 'f':
                            worlds[
1= worlds[1].Substring(0, length - 1+ "v";
                            worlds[
1+= "es";
                            
break;
                        
case 'e':
                            
if (last2 == 'f')
                            {
                                worlds[
1= worlds[1].Substring(0, length - 2+ "ves";
                            }
                            
else
                                worlds[
1+= "s";
                            
break;
                        
case 'o':
                            worlds[
1+= "es";
                            
break;
                        
case 'z':
                            worlds[
1+= "es";
                            
break;
                        
case 's':
                            worlds[
1+= "es";
                            
break;
                        
case 'x':
                            worlds[
1+= "es";
                            
break;
                        
case 'h':
                            
if (last2 == 'c' || last2 == 's')
                                worlds[
1+= "es";
                            
else
                                worlds[
1+= "s";
                            
break;
                        
default:
                            worlds[
1+= "s";
                            
break;
                    }
                    
return worlds;
                }
                
else
                {
                    
if (last2 == 'e')
                    {
                        
//单词最后两个字母为“es”,则可判断其为复数形式
                        if (last3 == 'z' || last3 == 'x' || last3 == 's' || last3 == 'h' || last3 == 'o')
                            worlds[
0= worlds[0].Remove(length - 2);
                        
else if (last3 == 'i')
                        {
                            
if (length >= 4)
                            {
                                
if (vowel.IndexOf(last4) < 0)
                                {
                                    worlds[
0= worlds[0].Remove(length - 2);
                                    worlds[
0= worlds[0].Substring(0, length - 3+ "y";
                                }
                                
else
                                    worlds[
0= worlds[0].Remove(length - 2);
                            }
                        }
                        
else if (last3 == 'v')
                        {
                            worlds[
0= worlds[0].Remove(length - 3);
                            worlds[
0+= "f";//此步骤会产生误差。因为大多数的“f”、“fe”结尾单词中多以“f”结尾(还没有调查过),顾忽略“fe”。要避免误差只能用词库了。
                        }
                        
else
                        {
                            worlds[
0= worlds[0].Remove(length - 1);
                        }
                    }
                    
else
                    {
                        worlds[
0= worlds[0].Remove(length - 1);//此步骤误差最大,当单词最后一个字母为s时,很难判断它是复数还是单数,目前还没有找到判断的规律,估计要用到词库此才行。
                    }
                    
return worlds;
                }
            }
        }
http://www.cnblogs.com/smalltree/archive/2009/02/14/1390631.html
posted @ 2009-02-15 23:19  TONYBINLJ  阅读(1060)  评论(0编辑  收藏  举报