漢字の地名をローマ字に変換するスクリプトを作成中です。漢字の地名をローマ字に変換するスクリプトを作成中です。漢字の地名をローマ字に変換するスクリプトを作成中です。地名なので、神戸はkoubeじゃなくてkobe、東京はtoukyouじゃなくてtokyoなどという、公共的に正しいスペルになるようにしなければいけません。そこで、「こうべ」などの単語中に「○う」がつく言葉は優先的に置換処理しました。(「こう」→「ko」「とう」→「to」)しかしその弊害で、羅臼や豊浦、滝上などの地名までそれぞれ「rasu」「toyora」「takinoe」になってしまいます。この場合、浦や臼などの文字のみを例外処理する以外に、スマートな解決策はないものでしょうか。12:49:5227pt神戸のように、前の漢字の語尾にuが含まれている場合は飛ばし、羅臼や滝上のように後ろの漢字に含まれる音がuである場合は飛ばさないという前提にしてみればどうでしょうか?回答ありがとうございます。今回の場合、地名をまず形態素解析して一気にふりがなを取り出し、それからローマ字に変換しています。仕組み上難しいのですが、でもその方法はアプローチとして極めて正しいように感じます。単漢字としてもバラして評価して、それを判定基準として使う方向も考えてみます。10:07:1319pt単語の一部を置き換えると経験なされたように副作用が起きます。単語ごとに置換するしか無いと思います。自分はPerl使いですので頭悪いですけど以下のように並べつくします。s/toukyou/Tokyo/g;s/tokyo/Tokyo/g;s/koube/Kobe/g;s/kobe/Kobe/g;単語は長い単語から置き換えないと、また一部置き換えが発生しますので、そこんとこ注意です。回答ありがとうございます。単語ごとだと恐ろしいほどの手間がかかるので、現状では1.「ふぁ」→「fa」や、「ぁ」「ー」などの特殊文字をまず個別に置換、もしくは消去2.「っきゃ」→「kkya」などの促音から拗音に繋がる部分を置換3.「きゅう」→「kyu」などの拗音から「う」に繋がる部分を置換4.「こう」→「ko」などの「う」に繋がる部分を置換5.「きゃ」→「kya」などの拗音を置換6.残りの普通文字をひとつづつローマ字に置換という流れでやっております。この順番が狂うと置換結果も狂うので、なかなかコツがわかるまでは大変でした。システム的に解決するのが難しそうだったのが、今回の問題です。10:15:0318pt国土交通省-国土地理院http://web1.gsi.go.jp/WNEW/koohou/439-5.htm「う」が省略されるというよりも、長音記号が省略されるという原則のようです。東京は「トーキョウ」で「ー」が省略されているということ。リンク先の最後にあるようにこれらの規程等の適用に当たっては、普通名詞的部分を英訳する場合、長音記号を付ける場合等も考えられますので、地図や地名集の目的や性格を考慮して個別に検討していただく必要があります。なっていて、原則に合わないケースもあるようなので、例外処理するしか方法がないと思います。回答ありがとうございます。個別対応しかないですか。確かに「とようら」と「こうべ」をひらがなとして比較した場合、有意な特徴なんてないですもんね。どちらも母音としては「お」から始まるし。地名ならではのルールとして、「づ」に「du」を使わず「zu」を使うというものもありました。鹿角(かづの)市のような明らかに「づ」のケースでも行政ルールではkazuno-shi。12:49:52ここでベストアンサー27pt神戸のように、前の漢字の語尾にuが含まれている場合は飛ばし、羅臼や滝上のように後ろの漢字に含まれる音がuである場合は飛ばさないという前提にしてみればどうでしょうか?回答ありがとうございます。今回の場合、地名をまず形態素解析して一気にふりがなを取り出し、それからローマ字に変換しています。仕組み上難しいのですが、でもその方法はアプローチとして極めて正しいように感じます。単漢字としてもバラして評価して、それを判定基準として使う方向も考えてみます。18:55:3618pt少ない方のケース(たとえば神戸、東京)を例外処理するしかないと思います。ようなツールを使っているのであれば、ユーザー辞書が用意できます。そのユーザー辞書に例外ケース(少ない方のケース)を登録してはどうでしょう。回答ありがとうございます。実はYahoo!形態素解析APIにRESTでリクエストを投げているだけのヘボスクリプトなので、kakasiとかchasenは使ってないのです・・・。セッティングするのが面倒だったので今回はサボりましたが、ユーザー辞書は魅力ですね。今回の目的としては約1500個の市町村名さえ正しく変換できれば問題ないので、スクリプト側に例外処理を仕込むやり方にしておこうかな、と思っています。20:40:4518ptニューラルネットを組み込んで、学習させてはどうでしょうか?かなり規則性があるので、少ない学習量で最適化されると思いますよ。うーん、現状の自分のスキルでは正直いって手に余りますね・・・。うちのサーバに設置しているスクリプトの関係で、自宅サーバ内に2chのdatログが数GB単位で溜まっているので、今度それを利用して人口無脳っぽいものぐらいは作ってみたいと思います。ご回答ありがとうございました。13:40:35「こうべ」と「とようら」はどちらも「お」の母音から繋がってますからねー。この辺の判定が難しくて。21:34:11なんか回答できないようなのでコメントにて。「こう・べ」「とう・きょう」の「ou」は二重母音となります。kou-be→ko-be、tou-kyou→to-kyoというふうに、単語単位ではなく漢字単位で考えれば変換できると思います。「とよ・うら」「ら・うす」の場合は、二重母音ではなく、母音が二つ並んだ状態(o-u、a-u)なので、これは置換しません。いうルールに添って考えれば、原則的な地名については大丈夫ではないかと思います。場所によってはこのルールはうまくいかないこともあります。仲哀天皇の「穴門豊浦宮」は「あなとのとよらのみや」と読みます。「とようらのみや」ではありません。「おのうえ」ではなく「おのえ」のようです。漢字は同じなのに「にほんばし」と「にっぽんばし」で別の地名ということもあるので、厄介ですね。10:00:52>matsunagaさん回答ありがとうございます。単漢字での評価と組み合わせて、どこで区切りがあるのかを調べるのが一番効果的みたいですね。1500個もあると例外処理の量もばかにならない数になってしまうので、自動化できる部分は出来る限りしたいです。(「こくりつ」と「くにたち」みたいなどうしようもないケースもあるので、あくまで可能な限りで)やっぱりkakasiかchasenを使って再度チャレンジしようかと思います。17:28:27mecabを試してみると、解析結果として羅臼の場合は「ラウス」、「神戸」の場合は「コーベ」という長音記号でちゃんと結果を返してくれることがわかりました。これなら判定ができます。おかげさまで、「にほんばし」と「にっぽんばし」のような例外を除けばほぼバグは消えたようです。皆さん、本当にありがとうございました。(0)@${screen_name}${name}${text}Twitterでのつぶやきはまだありません「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。これ以上回答リクエストを送信することはできません。はてなココの「ともだち」を表示します。回答リクエストを送信したユーザーはいませんすでに登録されている方はこちらからログインツイートするウォッチリスト4人が登録していますこの質問に含まれるキーワードスクリプト2254神戸311ローマ字168例外処理13東京4622関連質問taroemonPHPで下記のスクリプトを作成してください。・社内で各種資料、会議の議事録など何が必要かを定義して保管。...322009/08/0580ptandalusiaより広い地域名と、その中のより狭い地域名が、同じ読みで漢字が異なるものを探しています。...6242007/03/31110pttaroemonPHPで次のスクリプトを作成してください。}}${price}円{{/if}}知りたいことを検索してみようログインして回答する進んだ先のページで「許可する」ボタンを押してはてなによるアクセスを許可すると、認証が終わります。ご利用にあたりましては、はてな利用規約が適用されます。ご確認いただきご同意の上でご利用ください。