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

Mas*_*son 17 sorting unicode localization

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

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

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

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

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

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

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

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

  • 难道我完全高红火,其实有一些办法做到这一点不排序创造我自己的汉字词映射拼音读物,我莫名其妙地忽略了?

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

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

宜しくお愿いします.

YOU*_*YOU 7

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

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

编辑:

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

也有红宝石绑定.

这里有人测试,用mecab和标记器-Oyomi测试红宝石


Mas*_*son 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应用程序播种.

客户端有时会更新源数据,因此我们需要在发生这种情况时执行此操作.

据我所知,这个输出很好.我的日语不够好100%肯定,但我的一些日本同事撇去它说它看起来很好.我在这个要点中放了一个稍微模糊的转换地址样本,这样任何一个关心这个目的的人都能亲眼看到.

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

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


mpe*_*kov 5

很高兴听到人们与日语一起工作。

我认为您对问题难度的评估是正确的。我刚刚问了我实验室的一位日本人,方法似乎正如你所描述的:

  1. 获取汉字列表
  2. 推断(猜)读假名
  3. 按 gojuon 对 yomigana 进行排序。

困难的部分显然是第二步。我的实验室里有两个人:???和??。自然地,当按名称对报告等进行排序时,它们彼此相距甚远。

编辑

如果您会说流利的日语,请看这里:http : //mecab.sourceforge.net/

这是一个非常流行的工具,所以你应该也能找到英文文档(man页面mecab有英文信息)。