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

pdfファイルから抜き出した全角数字を分解するとアルファベットになる件について

言語はRubyを使っています。
まずpdftotextを使いpdfファイルをtxt形式に変換します。そして、全角数字(4,714,695など)をsplit(//)メソッドを使い一文字ずつに分解しようとしました。

すると、何故か大文字のアルファベットの羅列(V C O U P C Q R Wなど)に分解されています。これは何故でしょうか?
また、どうすれば全角数字を一文字ずつに分解することが出来るでしょうか。

なお、全角数字を一文字ずつに分解した後半角数字に変換して、数式の中で使えるようにしたいと考えています。別の方法をご存知でしたらこちらも教えて頂けると幸いです。よろしくお願いします。


●質問者: tyn
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PDFファイル Ruby txt アルファベット メソッド
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● TRTr
●100ポイント ベストアンサー

pdftotext で変換したtxtのファイルの文字コードは何を指定したでしょうか。

テキストエディタで開いてきちんと読めるでしょうか?


読めるのでしたら、ruby側で使用する文字コードの指定を適切にしているでしょうか。

http://www.ruby-lang.org/ja/man/html/FAQ_C6FCCBDCB8ECA4CEBCE8A4E...


完全に推測で書きますが、アルファベットが普通の文字に置換されているので

pdftotextで変換指定したのはSJISで

それをそのままrubyに流しているのではないかと思われます。

なのでrubyの先頭に

$KCODE = 'SJIS'

を付けたら期待通りに動かないでしょうか。(別の文字コードでしたら上記サイトを参考に文字コードを指定してください。



やり方としては一文字ずつで分解するよりも

1 全角数字の連続を抜き出す

2 抜き出した全角数字を半角に置換

3 数値に型変換して計算

のほうがシンプルにできると思います。


このアルゴリズムで簡単なコードを書いてみました。SJISで保存すれば実行できます。

------

$KCODE = "sjis"


# 置換用配列を定義

zh = [["1","1"], ["2","2"], ["3","3"],["4","4"],["5","5"],["6","6"],["7","7"],["8","8"],["9","9"],["0","0"],[",",""]]


# 変換する文字列

a = "こんにちは4,714,695さようなら"


#全角数値を抜き出す

/[1234567890,.]+/ =~ a


b = $&

# 抜き出した全角数字を半角に置換

zh.each do |sw|

b.gsub!(/#{sw[0]}/mu, sw[1]).to_i

end


# 半角数値を抜き出す

print b+"\n"

print (b.to_i) * 2 #計算してみる

print "\n"

------

実行結果は

-----

$ ruby replace.rb

4714695

9429390

----

と計算した値になるはずです

to_iでは桁区切りのカンマは小数点と認識されてしまうので消しています。

注意としてはカンマ区切りの数値や小数点ある場合はこのままでは動作しません。

◎質問者からの返答

TRTrさん、音速の回答有難うございます。とりあえず$KCODE = 'SJIS'をつけてみたら数字のまま分割できましたので、教えて頂いたアルゴリズムも実装してみようと思います。


ポイントはすべて差し上げたいのですが、はてなの操作に手間取り少し遅れるかもしれません。本当に有難うございました。

関連質問


●質問をもっと探す●



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