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


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

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

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

回答の条件
  • 1人3回まで
  • 登録:2009/10/16 21:13:54
  • 終了:2009/10/16 23:14:13

ベストアンサー

id:TRTr No.1

TRTr回答回数52ベストアンサー獲得回数132009/10/16 22:39:14

ポイント100pt

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では桁区切りのカンマは小数点と認識されてしまうので消しています。

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

id:tyn

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


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

2009/10/16 22:46:58

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません