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

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

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

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1303閲覧

Ambiguous文字の半角英字への変換(文字認識)

nomchanz

総合スコア1

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/24 05:29

編集2021/09/24 07:07

前提・実現したいこと

Google Vision APIで文字認識を行いたいのですが、文字が特殊文字で認識されてしまい、これを本来の半角英字として認識させたい(もしくは読み取り後に一括で半角英字に変換したい)。今後何千枚とOCRを実行するため、今回のAだけでなく、より汎用性高く一括で対応できる方法を教えていただきたいです。

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

アルファベットや数字が、半角英数字でなくギリシャ文字等の酷似した特殊文字として読み取られてしまうことが度々起こる。これを完成形では半角英字に変換されている必要がある。
以下のように、3A0という文字列が特殊文字として読み込まれてしまったため、これを対象に文字判定を行なった。AはAmbiguous(ギリシャ文字等の特殊な全角英数字)を意味する。

Python

1import unicodedata 2 3recognition_cell = "ЗАО" 4for character in recognition_cell: 5 print(unicodedata.east_asian_width(character)) 6 7#結果 8# A 9# A 10# A 11

該当のソースコード

Python

1 2

試したこと

ギリシャ文字が文字列に含まれる場合、それに対応する半角英数字に置き換えるようにしたが、一部変換できなかった。あくまでもAmbiguous判定なだけでギリシャ文字ではないみたい。

Python

1# ギリシャ文字 2greek_character_list = ["Α","Β","Ζ","Η","Ε","Ι","Κ","Ρ","Τ","О","Μ","Ν"] 3alternative_character_list = ["A","B","Z","H","E","I","K","P","T","O","M","N"] 4 5for greek_character,alternative_character in zip(greek_character_list,alternative_character_list): 6 if greek_character in cell: 7 print(greek_character) 8 cell = cell.replace(greek_character,alternative_character) 9 print(cell) 10 11#結果 12# О 13# ЗАO 14## Oはギリシャ文字として判定されたが、Aはギリシャ文字ではない別種の特殊文字として読み取られていたため変換されなかった。 15 16

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

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

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

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

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

guest

回答2

0

ベストアンサー

まずЗ(U+4117)は変換元リストgreek_character_listに含まれていません。
またА(U+4100)と変換元リスト内のΑ(U+0391)は異なります。よって変換されていません。
この結果をもとに変換元リストを適切に修正するとよいかと思います。

投稿2021/09/24 05:54

can110

総合スコア38341

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

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

nomchanz

2021/09/24 07:04

ご回答ありがとうございます!そうですね、3については投稿する上でアルファベットに話を限定するために省きました。Aについては、今回のAをリストに加えたらできました。 そのような(U+****)という表記には法則性や、全種類をまとめたリスト等存在するのでしょうか。もし存在しなかったら、****に入り得る全数字を網羅的に検索する必要があるのでしょうか。 とにかくここから何千枚とOCRを実行していくため、今回のA以外にも対応できるようにできる方法があればご教授頂きたいです。
can110

2021/09/24 07:21

> そのような(U+****)という表記には法則性や、全種類をまとめたリスト等存在するのでしょうか。 > もし存在しなかったら、****に入り得る全数字を網羅的に検索する必要があるのでしょうか。 いずれもそのあたりの知識はありませんので分かりません。 > とにかくここから何千枚とOCRを実行していくため、今回のA以外にも対応できるようにできる方法があればご教授頂きたいです。 まずはAPI側で認識文字種の指定(限定)ができればいちばん楽かとは思います。 そのあたりを含め、まずはご自身で調査してみてはいかがでしょうか? ざっとググった限り、誤認識には銀の弾はなく皆さん苦労している感じです。
nomchanz

2021/09/24 08:03

Unicode表記については、調べてみたら一覧があったのでそれを根気よく一つ一つ探し出してリストにしていけばできそうです!その労力を割く前にAPI側で文字種指定をする方法がないかどうか調べてみます。 ご相談に乗って頂きありがとうございました!
guest

0

  • Aはギリシャ文字ではない別種の特殊文字として読み取られていたため変換されなかった。

その文字をコピペできるのであれば、greek_character_list = ["Α","Β","Ζ","Η","Ε","Ι","Κ","Ρ","Τ","О","Μ","Ν"]の最後に付け加えて変換すればよいでしょう。

投稿2021/09/24 05:48

ppaul

総合スコア24670

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

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

nomchanz

2021/09/24 06:57

ご回答ありがとうございます! 確かにそれで今回のAについては解決するのですが、まだまだ何千枚とOCRに掛ける予定でして、このようにギリシャ文字でもない特殊文字が今後もいくつも現れると考えると、その都度いちいちリストに追加するのは効率が悪いかと思いました(もちろんそれしか方法がなければやるしかありませんが、、) ・Google Vision APIでOCRを実行する段階で、読み取りを半角英数字のみに指定する ・酷似している特殊文字の種類がギリシャ文字以外に限られた数しかないのであれば、それを事前に把握してリストに全て加える 等が、できればいいなと思っている方法なのですが、厳しいでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問