質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%

Q&A

解決済

1回答

546閲覧

PowerQueryで半角カタカナからひらがなに変換する際に、濁点が別の文字として認識されてしまう。

atk233

総合スコア13

0グッド

0クリップ

投稿2023/11/10 04:38

実現したいこと

PowerQueryで氏名を半角カタカナからひらがなに変換したい。

発生している問題・エラーメッセージ

たとえば、
「ヤマダ タロウ」を「やまだ たろう」に変換したい場合に、以下の2点を試しているのですが
「やまた゛ たろう」になってしまい、「た」と「゛」が別のものでデータが出てきてしまいます。

試したこと

以下に共通しているのは、半角カタカナ→ひらがなへ変換できるようにリストを作成しています。

↓半角カナ→ひらがなリスト

let BinaryText = "RdTHkQJBFAPQXOZMRhS5wOC9924t3nvbBEMApLCLWqo5PunX9Enj9zuv+9DxOc9QyAn43lpDLjWCwtQGilBjKEptoRg1geLUDkpQUyhJ7aEUdYDS0sv0EGQYHKGspDrH4ATlJdUFBmeoKKkuMbhAZUl1hcEVqkqqawxuUF1S3WBwh5qS6hYDA7Ul1R0GD6grqe7ZwAShvqT6g0EI+pRUf/FzS+ibtQv9SDr+ZRCGBpLqIYMINJJUjxlEoQkVg6ZUHJpRCWhOJaEFlYKWkh5ZeUEfwZpBGtpIut96gb3fMchAe0n3By+w90cGWegk6f7sBfb+wiAHXSXd37zA3t8Z5CFDFaAHVXzLDVIliFM2ZUhTnkGcsqlAmvIc4pRNFdKUFxCnbGoQp2zqEKdsGhCnbJoQp2xaEHds2pDd8TNsX+CITQfKs1tBBQo/J1cLHkCcr+lC//MN/AE=", 置換リスト= Json.Document( Binary.Decompress( Binary.FromText(BinaryText), Compression.Deflate ) ) in 置換リスト

Table.Combine関数を使って、以下の列追加を行いました。

= Table.AddColumn(追加されたカスタム, "カナ氏名変換", each Text.Combine(List.ReplaceMatchingItems(Text.ToList([カナ氏名]), #"半角カナ→ひらがなリスト")))

= Table.AddColumn(追加されたカスタム1, "カスタム.1", each List.Accumulate(Table.ToRows(テーブル),[カナ氏名],(x,y)=>Text.Replace(x,y{0},y{1})))

いずれの結果も、問題点で記載した「やまた゛ たろう」になってしまいます。

ここからさらに、if文などで「た゛」→「だ」にする処理もできるのかな?とも思うのですが
あまりスマートではないと思い、どなたかご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

たとえば、
「ヤマダ タロウ」を「やまだ たろう」に変換したい場合に、以下の2点を試しているのですが
「やまた゛ たろう」になってしまい、「た」と「゛」が別のものでデータが出てきてしまいます。

「半角カナ2文字で表される音(濁音、半濁音)」より先に「半角カナ1文字で表される音」の方が置換されているため。
したがって、前者の文字列の置換を行なってから、更にその結果に対して後者の文字列の置換を行なうようになさればよろしいでしょう。

カスタム関数 NarrowKatakana2Hiragana の作成

PowerQuery

1let GetValue = (KanaString as text) => 2 let 3 KanaList = Json.Document(Binary.Decompress(Binary.FromText("XZVLkoJAEESvMuHaBQpdn7M4LhDhBnP/wZDszGJjhPXCJutR1T4el9+/bfPx85nr5bp/HYfJPp/5ujyvB7fKFxKvZCWJQtpAkpXcSeZKJpJXJUayVBIk70pmkrUS6WerhP3EUIixn7hVwn7iXkkjqcbNSaZKkqTacUlQ7fhIUu04vUW14/KcaseXc4IN5HZO0Ml0TtCJnxN0Mp8TdPLuxOyoJS3v8o7pYx4L1OhiV3nU+B5sRo257IUandhy1ELOe6Mm58FayHnow/jb/eV9a5vM3g3PlY24oya7MPY9ZW1CTea/oSaTD3+TbHf3R8/e/W2yt9gKenb4a9Ib/DV6cfhr9OLw1+jZ++ZJPvhrzBfw15gv4M9kLuHPZCLhz2Qb4M/oL+DPZDLhz5gv4M9kU+DPJDP8mdwq8GfSB/y53CTw53KHwJ9L5r61kq/vEZ+b8Od8bsJf8GZJ+As6TfgL5kv4C3pO+At6TvgLZk74C85Bwl/QfcJfsLeEv6D7hL+g++z7K/3CX2J2x2Ht+7v22gZXObAGVyl3DvrdJB/Ok3/Tfq/lN/PP8XXYj3/+Aw=="),Compression.Deflate)), 4 ReplacedVoicedSounds = List.Accumulate(List.Select(KanaList,each Text.Length(_{0})=2),KanaString,(x,y)=>Text.Replace(x,y{0},y{1})), 5 ReplacedUnvoicedSounds = List.Accumulate(List.Select(KanaList,each Text.Length(_{0})=1),ReplacedVoicedSounds,(x,y)=>Text.Replace(x,y{0},y{1})) 6 in 7 ReplacedUnvoicedSounds 8in 9 GetValue

カスタム関数の呼び出し例

PowerQuery

1let 2 Source = Excel.CurrentWorkbook(){[Name="テーブル名"]}[Content], 3 ChangedType = Table.TransformColumnTypes(Source,{{"カナ氏名", type text}}), 4 ReplacedKana = Table.AddColumn(ChangedType, "変換後のカナ氏名", each NarrowKatakana2Hiragana([カナ氏名])) 5in 6 ReplacedKana

投稿2023/11/13 02:20

sk.exe

総合スコア1070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atk233

2023/11/13 03:26

早速のご教示ありがとうございます。 なるほどと思いました。例に関してもありがとうございます。 私の方で作りたいQueryで当て嵌めてみたところ、無事変換ができるようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問