人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: MIZ
●カテゴリ:インターネット ウェブ制作
✍キーワード:Kobe Tokyo いもの スクリプト スペル
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● pigment
●19ポイント

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

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

自分は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.残りの普通文字をひとつづつローマ字に置換

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

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

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


2 ● SALINGER
●18ポイント

国土交通省-国土地理院

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

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

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


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

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

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

◎質問者からの返答

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

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

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

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

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

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

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


3 ● atmarkbienna
●27ポイント ベストアンサー

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

◎質問者からの返答

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

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

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

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


4 ● pahoo
●18ポイント

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


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

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

◎質問者からの返答

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

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

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

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


5 ● QuestR2
●18ポイント

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

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

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ