一个网站的诞生- MagicDict开发总结9 [日语单词检索策略]

这篇文件将介绍一下日语单词的检索策略。这些策略一部分已经在MagicDict上使用了,有些策略还在斟酌中。

此外,这篇文章所需要一些日语知识,如果对日语不是很清楚的话,请看一个网站的诞生- MagicDict开发总结3 [日语字典数据结构] 的简单介绍。可能接下来的文章都是对日语的检索方案的讨论,看起来有点累。

日语的复杂性造就了日语检索的困难度。英文的检索的话,关键字就是单词[字母的字符串]。中文的检索的话,就是汉字的字符串,另外,还可能用拼音进行检索[字母的字符串]。日语的话,可能用来作为关键字进行检索的东西非常多。

1.日语汉字,例如:

        新聞 開き 遊び

2.平假名,平假名,例如:

   しんぶん、ひらき、あそび

   这三个平假名分别对应 1.日语汉字的 三个词语 

         コーヒー、パソコン

        片假名表示外来语,前者是咖啡,后者是个人电脑

3.罗马字,例如:

         SHINBUNN,HIRAKI,ASOBI

        这三个平假名分别对应 1.日语汉字的 三个词语的放音的罗马字

4.各种复合词语

        コーヒー豆  

   咖啡豆,コーヒー就是咖啡,咖啡是外来语,写为片假名,不过也有写成汉字的情况。

对于1,2,3的情况,可能输入的形式不一样,但是最后检索出来的东西是同一个单词。这样的话,规则化就很重要。

       首先,对于输入内容,平假名和片假名,罗马字,一律变为平假名,统一作为检索关键字。

       片假名转换为平假名,使用的是VB的Strconv函数。

       在C#里面使用VB函数,需要加入库的引用

      

using Microsoft.VisualBasic;

       然后,使用下面的方法进行字符转换

 

    /// <summary>
    
/// 日本語のローカルID
    
/// </summary>
    const int JapaneseLocaleID = 1041;
    
/// <summary>
    
/// 平仮名からカタカナに変換
    
/// </summary>
    
/// <param name="Kana"></param>
    
/// <returns></returns>
    public static string ConHira2Kata(String Kana)
    {
        
return Strings.StrConv(Kana, VbStrConv.Katakana, JapaneseLocaleID);
    }
    
/// <summary>
    
/// カタカナから平仮名に変換
    
/// </summary>
    
/// <param name="Kana"></param>
    
/// <returns></returns>
    public static string ConKata2Hira(String Kana)
    {
        
return Strings.StrConv(Kana, VbStrConv.Hiragana, JapaneseLocaleID);
    }

 

      罗马字转平假名则是自己根据规则写的函数。

 

    /// <summary>
    
/// ロマジから仮名に変換
    
/// </summary>
    
/// <param name="strRoma"></param>
    
/// <returns></returns>
    public static String ConvertRomaToKana(String strRoma)
    {
        strRoma 
= Strings.StrConv(strRoma, VbStrConv.Lowercase, JapaneseLocaleID);
        strRoma 
= strRoma.Replace("q""");
        
for (int i = Strings.Asc("a"); i <= Strings.Asc("z"); i++)
        {
            strRoma 
= strRoma.Replace(Strings.Chr(i).ToString() + Strings.Chr(i), "" + Strings.Chr(i).ToString());
        }
        
for (byte i = 0; i <= 108; i++)
        {
            strRoma 
= strRoma.Replace(KanaRoma[i, 1], KanaRoma[i, 0]);
        }
        
return strRoma;
    }

        通过上面的代码,可以把片假名,罗马字,转换为平假名。检索关键字的统一规范化大大降低了检索的复杂度。

        当然,检索关键字要规范化,但是,检索结果表示的时候,还要正确的表示出来。所以,每个词条有一个表示字段,这个字段是最常用的表示形式。例如,  コーヒー 这个词语,检索用的字段是规范化后的片假名 こーひー 和 日语汉字 珈琲,但是其常用的标准书写形式还是片假名的 コーヒー。所以数据表里面有3个字段,常用标准形式,检索用平假名,检索用汉字。

 

对于复合词语,例如

        コーヒー豆

        它可以分解为 コーヒー[咖啡] 和 豆[豆] 两个基本的词语。由于考虑到检索结果里面也希望可以出现咖啡和豆的词条,所以,复合词语的信息[表格]里面,也需要记录构成它的基本词汇的引用信息。这样的话,查到复合词语的时候,也可以快速的获取基本词汇的主键,进而取得基本词汇的详细检索结果。当然,コーヒー豆 也可以表示为各种形式放在检索入口里面:

コーヒー豆     标准

咖啡豆          全部汉字

こーひーまめ 全部平假名

コーヒーマメ 全部片假名

KOOHIIMAME 罗马字

所以,复合词也需要规则化,以及数据表里面有 常用标准形式,检索用平假名,检索用汉字。当然,以后会将英语的coffee bean 也加入检索词条里面,做到英日的检索。

 

汉字,分为简体和繁体汉字,日本使用的是繁体汉字。

1 有一部份汉字的简体和繁体形式一样

     这样的话,需要在日文词典和中日词典里面做2次检索。必须做2次,中日同词不同意义的东西有很多。

2 有人会使用简体汉字查询日语汉字词汇

     在处理汉字的时候,需要先做简体转繁体的操作,然后再在日文词典里面进行检索。

 

Strings.StrConv(mSearchWord, VbStrConv.TraditionalChinese, 0)

 

这样的话 ,大概将用户的输入关键字的预处理说明了一下。懂日语的可能看得懂,不懂得话,基本上是天书。。。 

 

下一篇文章是介绍检索流程。

 

有兴趣的写信给我 root#magicdict.com   [convert # to @ ]

或者加MSN mynightelfplayer@hotmail.com

网站地址 http://www.magicdict.com/

 

posted @ 2011-06-05 21:37  灰毛毛  阅读(1273)  评论(1编辑  收藏  举报