您的位置:首页 > 运维架构 > 网站架构

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

2011-06-05 21:37 323 查看
这篇文件将介绍一下日语单词的检索策略。这些策略一部分已经在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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐