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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

853閲覧

文字列の中のいらない部分の削除

telin

総合スコア18

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2018/12/04 00:48

編集2018/12/05 01:48

android studioでOCRを使ったアプリを作っています。
OCRでレシートを文字認識したいのですが、レシートの中のいらない文字列の部分まで当然全部とってきちゃうのでその中のいらない部分だけ削除した上で再取得したいです。
なにか便利なメソッドとかAPIとかあれば教えていただきたいです。

追記

OCRで文字認識した結果

この中の
③日付
①商品名
②値段
の値をとってきたいです。

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

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

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

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

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

kafumi

2018/12/04 18:13

質問が漠然としているため、回答が難しいです。OCRで得られた文字列と、その中からどういう部分を取り出したいかのサンプルを示していただけないでしょうか。そうすれば、具体的な回答できると思います。
telin

2018/12/05 01:43

わかりました。追記します。
guest

回答1

0

ベストアンサー

日付や値段は文字列として特徴的なので、正規表現を使えば該当の文字列部分が取り出せそうです。Kotlinで正規表現を使ったことがない場合は、Out of Dimension: Kotlin の正規表現を使うを読んでみてください。また、「Kotlin 正規表現」などでWeb検索すれば、他にも説明ページが見つかります。基本的には、Regex オブジェクトを作成して、find() などで文字列を検索することになります。

日付は、ファミリーマートの場合は yyyy年MM月dd日 という形式で印字されるようなので、 (\d+)月(\d+)月(\d+)日 という正規表現で検索すればいいと思います。文字列が見つかった場合、年・月・日はそれぞれ、MatchedResult.groupValue の添字1, 2, 3に入ってきます。

値段は、¥マークが必ず先頭につくようなので、¥([,0-9]+) などで検索できるでしょうか。上記の例ではでてきませんが、3桁ごとにカンマ , が入ると思うので、それも考慮した正規表現にする必要があります。文字列が見つかった場合、数値部分は MatchedResult.groupValue の添字1に入ってきます。

商品名は結構難しいですが、ファミリーマートのレシートであれば、時刻 (13:43) の行の後から、 と書かれた行までの間が、商品名か値段になっているようなので、以下のようにすれば商品名だけ抽出できそうです。

  1. 時刻を検索する
  2. とだけ書かれた行を検索する
  3. 1と2の間の行のうち、値段を除いたものが商品名

なお、文字列を行ごとに分割したい場合、文字列を改行文字 "\n" で分割すれば行ごとに分かれるので、Stringsplit() 関数が使えます。

基本は、上記したように、文字列を正規表現で検索したり、分割したりして、地道に知りたい部分を探り当てて抽出していくことになると思います。

投稿2018/12/05 17:51

kafumi

総合スコア87

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

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

telin

2018/12/06 00:40

ありがとうございます。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問