可以通过编程方式对日语汉字进行排序吗?
我最近发现,对于我的惊讶(从来没有真正考虑过它),机器排序日语专有名词显然是不可能的。可以通过编程方式对日语汉字进行排序吗?
我工作的应用程序必须允许用户从3菜单界面选择医院。第一个菜单是县,第二个菜单是城市名称,第三个菜单是医院。每个菜单都应按照您的预期排序,以便用户可以在菜单中找到他们想要的内容。
让我概括了什么我已经发现,作为序言我的问题:
预期的排序顺序日语单词是基于他们的发音。汉字没有固有的秩序(使用中有数以万计的汉字),但日语语音音节有顺序:あ,い,う,え,お,か,き,く,け,こ..以及五十种传统的不同声音(其中一些在现代日语中已经过时)。这种排序顺序叫做五十音顺(junju,或'50-sound order')。
因此,汉字的单词应该按照和平假名写成的顺序排序。 (您可以用日语表示任何汉语拼音文字)
踢球者:没有规范的方式来确定用汉字写的给定单词的发音。你永远不会知道。取决于单词,一些汉字有十个或更多不同的发音。词典中有很多常用词汇,我可能会拼凑出一种从免费词典数据库中查找它们的方法,但专有名词(例如医院名称)不在词典中。
因此,在我的申请中,我列出了日本各县,市,医院的名单。为了对这些列表进行排序,这是一项要求,我需要在拼音形式(假名)中对这些名称进行匹配。
我不能想出任何东西,除了付钱给日本人(我只是一般般)手动转录他们。之前,我这样做,但:
难道我就火完全高,实际上有一些方法来做到这一点的排序,而无需创建我自己的汉字词注音读物映射,我总得有忽略了?
是否有公开的政府或其他地区的州/城市名称映射?这将减少我只需要医院名称的手动映射。
有没有人有任何其他意见如何解决这个问题?任何编程语言都很好 - 我正在使用Ruby on Rails,但是如果我能够编写一个能够接受汉字输入(例如40,000个专有名词)的程序,然后输出语音表示作为我可能的数据,我会很高兴导入到我的Rails应用程序。
宜しくお愿いします。
对于数据,请在这里挖掘Google的日本IME(Mozc)数据文件。
有很多有趣的数据有,包括IPA字典。
编辑:
而且你也可以尝试仲裁处,它可以使用IPA字典和可转换kanjis片假名大多数的话
有这也是Ruby的绑定。
和这里有人测试,红宝石仲裁处与恶搞-Oyomi
高兴听到人与日本人合作。
我认为你对于问题难度的评估很有用。我刚才问我的实验室,日本球员之一,而要做到这似乎是因为你描述的方式:
- 以汉字的列表
- 推出(猜测)的yomigana
- 排序yomigana通过gojuon。
困难的部分显然是第二步。我的实验室里有两个人:高桥和高谷。当然,按名称排序报告等时,它们看起来并不相互靠近。
编辑
如果你精通日语,看看这里:http://mecab.sourceforge.net/
这是一个非常受欢迎的工具,所以你应该能够找到英文文档太(该man
页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
只是一个快速跟进,以解释我们使用的最终实际解决方案。感谢所有推荐mecab的人 - 这看起来已经成功了。
我们有一个主要是Rails的后端,但在我们的情况下,我们并不需要在后端解决这个问题。对于用户输入的数据,例如使用日文名称创建新实体,我们修改了用户界面,要求用户除了输入汉字名称之外,还要输入拼音yomigana。用户似乎习惯了这一点。问题主要在于应用程序中内置的大量数据集 - 医院,公司和地名。
所以,我们所做的事情是:
- 我们转换所有源数据(4000家医院的名称,地址等的列表)为.csv格式(编码为UTF-8,当然) 。
- 然后,供开发人员使用,我们写了一个Ruby脚本:
- 使用仲裁处到该文件的内容翻译成日语注音读物 (使用的精确命令是
mecab -Oyomi -o seed_hospitals.converted.csv seed_hospitals.csv
,它输出一个新的文件与汉字用语音等值替换,用全角片假名表示)。 - 将所有yomikata标准化为平假名(因为用户在手动输入yomikata时倾向于输入平假名,而平假名和片假名的排序方式不同)。 Ruby一旦找到它就很容易:
NKF.nkf("-h1 -w", katakana_str) # -h1 means to hiragana, -w means output utf8
- 使用极其流行的新的Ruby 1.9.2版本的CSV,将输入文件与mecab翻译的文件合并,以便生成的文件现在具有插入的额外列, NAME,NAME_YOMIGANA,ADDRESS,ADDRESS_YOMIGANA等等。
- 使用仲裁处到该文件的内容翻译成日语注音读物 (使用的精确命令是
- 使用生成的.csv文件中的数据为我们的Rails应用程序播放其内置值。
客户端不时更新源数据,因此我们需要在发生这种情况时执行此操作。
据我所知,这个输出是好的。我的日语不够好,不能100%肯定,但是我的一些日本同事剔除了它,并说它看起来没问题。我在this gist中对转换后的地址稍加模糊处理,以便任何关心此事的人都能亲眼看到。
更新:结果在...这是漂亮好,但不完美。不过,它看起来好像在我的列表中正确拼音了95%以上的准随机地址。
非常感谢所有帮助过我的人!
糟糕,这确实正确的弹窗省县的情况。谢谢。我没有使用VB,但当然不介意使用它,如果它有助于自动化汉字→语音转换。 – Mason 2011-02-07 05:33:10