可以通过编程方式对日语汉字进行排序吗?

时间:2011-02-04 07:22:40

标签: sorting unicode localization

我最近发现,令我惊讶的是(之前从未真正考虑过),机器分类日语专有名词显然是不可能的。

我处理的应用程序必须允许用户从3菜单界面中选择医院。第一个菜单是“县”,第二个菜单是“城市名”,第三个菜单是“医院”。每个菜单都应该按照您的预期进行排序,以便用户可以在菜单中找到他们想要的内容。

让我概述一下我发现的内容,作为我的问题的序言:

  1. 日语单词的预期排序顺序取决于他们的发音。汉字没有固有的顺序(有成千上万的汉字使用),但日语拼音音节确实有一个顺序:あ,い,う,え,お,か,き,く,け,こ..以及50种传统的不同声音(其中一些在现代日语中已经过时)。这种排序称为五十音顺(gojuu on jun,或'50 -sound order')。

  2. 因此,汉字单词的排序方式应与平假名单词相同。 (您可以用日语表示拼音平假名中的任何汉字。)

  3. 踢球者:没有规范的方法来确定用汉字书写的给定单词的发音。你永远都不会知道。根据单词,一些汉字有十个或更多不同的发音。字典中有许多常见的单词,我可能会在一起从一个免费字典数据库中查找它们,但是专有名词(例如医院名称)不在字典中。

  4. 因此,在我的申请中,我列出了日本的每个县,市和医院。为了对这些列表进行排序,这是一个要求,我需要以语音形式(假名)的每个名称的匹配列表。

    除了付一些流利的日语(我只是马马虎虎)手动转录它们之外,我无法想出任何其他的东西。在我这样做之前:

    • 我是否有可能完全处于高火状态,并且实际上有一些方法可以进行这种排序而不会创建我自己的汉字词汇到语音读数的映射,我有点忽略了吗?

      < / LI>
    • 是否公开提供州/市名称的映射,来自政府或其他什么?这将减少我只需要对医院名称进行的手动映射。

    • 有没有人就如何处理这个问题有任何其他建议?任何编程语言都很好 - 我正在使用Ruby on Rails,但如果我能编写一个能够接受汉字输入的程序(比如40,000个专有名词)然后输出语音表示作为我可以的数据,我会很高兴导入我的Rails应用程序。

    宜しくお愿いします。

4 个答案:

答案 0 :(得分:7)

对于数据,请在此处挖掘Google的日语IME(Mozc)数据文件。

那里有很多有趣的数据,包括IPA词典。

修改

你也可以尝试Mecab,它可以使用IPA字典,并可以将kanjis转换为片假名的大部分单词

也有红宝石绑定。

这里有人测试过,带有mecab的红宝石标签-Oyomi

答案 1 :(得分:7)

快速跟进,解释我们使用的最终实际解决方案。感谢所有推荐mecab的人 - 这似乎已经成功了。

我们有一个主要是Rails的后端,但在我们的情况下,我们不需要在后端解决这个问题。对于用户输入的数据,例如使用日文名称创建新实体时,我们修改了UI以要求用户除了汉字名称之外还要输入拼音标记。用户似乎已经习惯了这一点。问题是应用程序内置的大量数据 - 医院,公司和地名,主要是。

所以,我们做的是:

  1. 我们将所有源数据(包含姓名,地址等的4000家医院的名单)转换为.csv格式(当然,编码为UTF-8)。
  2. 然后,为了开发人员的使用,我们编写了一个ruby脚本:
    1. 使用mecab将该文件的内容翻译成日语拼音 (使用的精确命令是mecab -Oyomi -o seed_hospitals.converted.csv seed_hospitals.csv,它输出一个新的文件,汉字替换为汉字等效的汉字,用全角片假名表示。
    2. 将所有yomikata标准化为平假名(因为用户在手动输入yomikata时会进入平假名,而平假名和片假名的排序则不同)。 Ruby一旦找到它就会变得简单:NKF.nkf("-h1 -w", katakana_str) # -h1 means to hiragana, -w means output utf8
    3. 使用非常方便的新Ruby 1.9.2版本的CSV,将输入文件与mecab翻译文件合并,以便生成的文件现在插入了额外的列,包括名称,NAME_YOMIGANA,ADDRESS,ADDRESS_YOMIGANA等等上。
  3. 使用生成的.csv文件中的数据为我们的rails应用程序添加内置值。
  4. 客户端有时会更新源数据,因此我们需要在发生这种情况时执行此操作。

    据我所知,这个输出很好。我的日语不够好100%肯定,但我的一些日本同事撇去它说它看起来很好。我在this gist中对转换后的地址进行了一些略微混淆的样本,这样任何想要阅读此内容的人都可以亲眼看到。

    更新:结果是......它漂亮好,但不完美。不过,看起来它在我的列表中正确地拼音了95%以上的准随机地址。

    非常感谢所有帮助过我的人!

答案 2 :(得分:4)

很高兴听到人们与日本人合作。

我认为你对问题难度的评估很明显。我刚问我实验室里的一个日本人,这样做的方式似乎与你描述的一样:

  1. 列出汉字列表
  2. 推断(猜测)yomigana
  3. gojuon排序yomigana。
  4. 困难的部分显然是第二步。我的实验室里有两个人:高桥和高谷。当然,当按名称对报告等进行排序时,它们似乎无处可靠。

    修改

    如果您精通日语,请查看此处:http://mecab.sourceforge.net/

    这是一个非常受欢迎的工具,因此您也应该能够找到英文文档(man的{​​{1}}页面有英文信息)。

答案 3 :(得分:3)

我不熟悉MeCab,但我认为使用MeCab是个好主意。

然后,我将介绍另一种方法。 如果您的应用程序是用Microsoft VBA编写的,则可以调用“GetPhonetic”功能。它很容易使用。

请参阅:http://msdn.microsoft.com/en-us/library/aa195745(v=office.11).aspx


按照发音对县进行排序并不常见。大多数日本人习惯于按照“都道府県コード”排序的县。 例如01:北海道,02:青森県,...,13:东京都,...,27:大阪府,...,47:冲縄県 这些代码在“JIS X 0401”或“ISO-3166-2 JP”中定义。 见(日文维基百科): http://ja.wikipedia.org/wiki/%E5%85%A8%E5%9B%BD%E5%9C%B0%E6%96%B9%E5%85%AC%E5%85%B1%E5%9B%A3%E4%BD%93%E3%82%B3%E3%83%BC%E3%83%89