漢字の地名をローマ字に変換するスクリプトを作成中です。

地名なので、神戸はkoubeじゃなくてkobe、東京はtoukyouじゃなくてtokyoなどという、公共的に正しいスペルになるようにしなければいけません。
そこで、「こうべ」などの単語中に「○う」がつく言葉は優先的に置換処理しました。(「こう」→「ko」「とう」→「to」)

しかしその弊害で、羅臼や豊浦、滝上などの地名までそれぞれ「rasu」「toyora」「takinoe」になってしまいます。
この場合、浦や臼などの文字のみを例外処理する以外に、スマートな解決策はないものでしょうか。

http://contents-factory.net/2roma/

回答の条件
  • 1人2回まで
  • 登録:2009/06/01 09:35:03
  • 終了:2009/06/02 10:03:05

ベストアンサー

id:atmarkbienna No.3

atmarkbienna回答回数61ベストアンサー獲得回数32009/06/01 12:49:52

ポイント27pt

神戸のように、前の漢字の語尾にuが含まれている場合は飛ばし、羅臼や滝上のように後ろの漢字に含まれる音がuである場合は飛ばさないという前提にしてみればどうでしょうか?

id:MIZ

回答ありがとうございます。

今回の場合、地名をまず形態素解析して一気にふりがなを取り出し、それからローマ字に変換しています。

なので仕組み上難しいのですが、でもその方法はアプローチとして極めて正しいように感じます。

単漢字としてもバラして評価して、それを判定基準として使う方向も考えてみます。

2009/06/01 13:39:15

その他の回答(4件)

id:pigment No.1

pigment回答回数95ベストアンサー獲得回数22009/06/01 10:07:13

ポイント19pt

単語の一部を置き換えると経験なされたように副作用が起きます。

単語ごとに置換するしか無いと思います。

自分はPerl使いですので頭悪いですけど以下のように並べつくします。

s/toukyou/Tokyo/g;

s/tokyo/Tokyo/g;

s/koube/Kobe/g;

s/kobe/Kobe/g;

単語は長い単語から置き換えないと、

また一部置き換えが発生しますので、そこんとこ注意です。

id:MIZ

回答ありがとうございます。

単語ごとだと恐ろしいほどの手間がかかるので、現状では

1.「ふぁ」→「fa」や、「ぁ」「ー」などの特殊文字をまず個別に置換、もしくは消去

2.「っきゃ」→「kkya」などの促音から拗音に繋がる部分を置換

3.「きゅう」→「kyu」などの拗音から「う」に繋がる部分を置換

4.「こう」→「ko」などの「う」に繋がる部分を置換

5.「きゃ」→「kya」などの拗音を置換

6.残りの普通文字をひとつづつローマ字に置換

という流れでやっております。

この順番が狂うと置換結果も狂うので、なかなかコツがわかるまでは大変でした。

で、システム的に解決するのが難しそうだったのが、今回の問題です。

2009/06/01 13:28:13
id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692009/06/01 10:15:03

ポイント18pt

国土交通省-国土地理院

http://web1.gsi.go.jp/WNEW/koohou/439-5.htm

「う」が省略されるというよりも、長音記号が省略されるという原則のようです。

東京は「トーキョウ」で「ー」が省略されているということ。


ただ、リンク先の最後にあるように

これらの規程等の適用に当たっては、普通名詞的部分を英訳する場合、長音記号を付ける場合等も考えられますので、地図や地名集の目的や性格を考慮して個別に検討していただく必要があります。

となっていて、原則に合わないケースもあるようなので、例外処理するしか方法がないと思います。

id:MIZ

回答ありがとうございます。

やはり個別対応しかないですか。

確かに「とようら」と「こうべ」をひらがなとして比較した場合、有意な特徴なんてないですもんね。

どちらも母音としては「お」から始まるし。

地名ならではのルールとして、「づ」に「du」を使わず「zu」を使うというものもありました。

鹿角(かづの)市のような明らかに「づ」のケースでも行政ルールではkazuno-shi。

ちょっと無理を感じます。

2009/06/01 13:33:28
id:atmarkbienna No.3

atmarkbienna回答回数61ベストアンサー獲得回数32009/06/01 12:49:52ここでベストアンサー

ポイント27pt

神戸のように、前の漢字の語尾にuが含まれている場合は飛ばし、羅臼や滝上のように後ろの漢字に含まれる音がuである場合は飛ばさないという前提にしてみればどうでしょうか?

id:MIZ

回答ありがとうございます。

今回の場合、地名をまず形態素解析して一気にふりがなを取り出し、それからローマ字に変換しています。

なので仕組み上難しいのですが、でもその方法はアプローチとして極めて正しいように感じます。

単漢字としてもバラして評価して、それを判定基準として使う方向も考えてみます。

2009/06/01 13:39:15
id:pahoo No.4

pahoo回答回数5960ベストアンサー獲得回数6332009/06/01 18:55:36

ポイント18pt

少ない方のケース(たとえば神戸、東京)を例外処理するしかないと思います。


形態素解析に kakasi や chasen のようなツールを使っているのであれば、ユーザー辞書が用意できます。

そのユーザー辞書に例外ケース(少ない方のケース)を登録してはどうでしょう。

id:MIZ

回答ありがとうございます。

実はYahoo!形態素解析APIにRESTでリクエストを投げているだけのヘボスクリプトなので、kakasiとかchasenは使ってないのです・・・。

セッティングするのが面倒だったので今回はサボりましたが、ユーザー辞書は魅力ですね。

ただ、今回の目的としては約1500個の市町村名さえ正しく変換できれば問題ないので、スクリプト側に例外処理を仕込むやり方にしておこうかな、と思っています。

2009/06/01 21:20:09
id:QuestR2 No.5

QuestR2回答回数435ベストアンサー獲得回数132009/06/01 20:40:45

ポイント18pt

ニューラルネットを組み込んで、学習させてはどうでしょうか?

かなり規則性があるので、少ない学習量で最適化されると思いますよ。

id:MIZ

うーん、現状の自分のスキルでは正直いって手に余りますね・・・。

ただ、うちのサーバに設置しているスクリプトの関係で、自宅サーバ内に2chのdatログが数GB単位で溜まっているので、今度それを利用して人口無脳っぽいものぐらいは作ってみたいと思います。

ご回答ありがとうございました。

2009/06/01 21:28:37
  • id:tezcello
    「○う」というように考えるからでは?
    ○=う・お段の音の場合のみだと思うのですが?
  • id:MIZ
    「こうべ」と「とようら」はどちらも「お」の母音から繋がってますからねー。
    この辺の判定が難しくて。
  • id:matsunaga
    なんか回答できないようなのでコメントにて。

    「こう・べ」「とう・きょう」の「ou」は二重母音となります。kou-be→ko-be、tou-kyou→to-kyoというふうに、単語単位ではなく漢字単位で考えれば変換できると思います。

    一方、「とよ・うら」「ら・うす」の場合は、二重母音ではなく、母音が二つ並んだ状態(o-u、a-u)なので、これは置換しません。

    というルールに添って考えれば、原則的な地名については大丈夫ではないかと思います。

    もっとも、場所によってはこのルールはうまくいかないこともあります。仲哀天皇の「穴門豊浦宮」は「あなとのとよらのみや」と読みます。「とようらのみや」ではありません。日本語でもリエゾンすることはあるので、気をつけないといけません。兵庫県加古川市尾上町は「おのうえ」ではなく「おのえ」のようです。

    また、漢字は同じなのに「にほんばし」と「にっぽんばし」で別の地名ということもあるので、厄介ですね。
  • id:MIZ
    >matsunagaさん
    回答ありがとうございます。

    やはり単漢字での評価と組み合わせて、どこで区切りがあるのかを調べるのが一番効果的みたいですね。
    1500個もあると例外処理の量もばかにならない数になってしまうので、自動化できる部分は出来る限りしたいです。
    (「こくりつ」と「くにたち」みたいなどうしようもないケースもあるので、あくまで可能な限りで)

    やっぱりkakasiかchasenを使って再度チャレンジしようかと思います。
  • id:MIZ
    mecabを試してみると、解析結果として羅臼の場合は「ラウス」、「神戸」の場合は「コーベ」という長音記号でちゃんと結果を返してくれることがわかりました。これなら判定ができます。

    おかげさまで、「にほんばし」と「にっぽんばし」のような例外を除けばほぼバグは消えたようです。
    皆さん、本当にありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません