• 一个网站的诞生 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/

  • 相关阅读:
    内存碎片
    《大规模分布式存储系统》笔记——单机存储系统、分布式系统
    数据库的范式
    一把剪刀看懂git reset 和它的三个参数
    如何判断一个链表是否有环?以及对一些文章的错误的看法
    自由树的计数 Labeled unrooted tree counting
    C语言里的指针探析——type *name[] 在函数参数里面,是一个二维指针
    CSAPP(深入理解计算机系统)读后感
    VIM一些常用命令,方法,配置
    Latex 常用知识点存档
  • 原文地址:https://www.cnblogs.com/TextEditor/p/2073238.html
Copyright © 2020-2023  润新知