現在、tmパッケージのreadPDF()関数を使用して、いくつかのPDFからいくつかのテキストデータをスクレイピングしています。これはすべて非常にうまく機能し、ほとんどの場合、エンコーディングは「latin1」のように見えますが、そうでない場合もあります。Rで文字エンコードをチェックする良い方法はありますか?tauパッケージに関数is.utf8()とis.local()が含まれていることがわかりましたが、これまでのところ、明らかにそれしか得られません。
ありがとう。
現在、tmパッケージのreadPDF()関数を使用して、いくつかのPDFからいくつかのテキストデータをスクレイピングしています。これはすべて非常にうまく機能し、ほとんどの場合、エンコーディングは「latin1」のように見えますが、そうでない場合もあります。Rで文字エンコードをチェックする良い方法はありますか?tauパッケージに関数is.utf8()とis.local()が含まれていることがわかりましたが、これまでのところ、明らかにそれしか得られません。
ありがとう。
私は R についてあまり知りません。しかし、言及されたtmおよびtauパッケージが何であるかを確認するために、CRAN を少し調べてみました。
したがって、tmpdftotext
はテキスト マイニング用であり、PDF の読み取り用には Popplerのユーティリティが必要であり、それに依存しています。私は最初、[明らかに間違った]印象を持っていました.あなたが言及したreadPDF()関数は、PDFファイル内のPDFオブジェクトへの低レベルのライブラリベースのアクセスを直接行っていた....私はどれほど間違っていたのでしょう! pdftotext
コマンドラインツールのテキスト出力を「のみ」見ることが判明しました。
これは、「単純な」Latin1 よりも複雑なフォント エンコーディングを使用する PDF の読み取りにおそらく成功しない理由を説明しています。
残念ながら、あなたの問題の理由は、現在 Poppler でありpdftotext
、単にこれらを処理できないためです。
たぶん、tmのメンテナーに機能のリクエストを依頼したほうがよいでしょう: :-)
PDF 仕様では、準拠するリーダーで事前定義する必要があるラテン テキストの単純なフォント(それぞれに最大 256 文字の形状を含めることができる)のこれらのエンコーディングを定義しています。
/StandardEncoding
/MacRomanEncoding
/PDFDocEncoding
/WinAnsiEncoding
/MacExpertEncoding
次に、記号フォントには 2 つの特定のエンコーディングがあります。
また、フォントには組み込みのエンコーディングを含めることができますが、これは作成者が標準のエンコーディングから逸脱する可能性があります (fe は、埋め込まれた標準フォントがサブセット化されている場合の差分エンコーディングにも使用されます)。
そのため、PDF ファイルを正しく解釈するには、使用されているフォントの各フォント エンコーディングを検索する必要があり、配列/Encoding
を使用している場合も考慮に入れる必要があります。/Differences
ただし、単純なフォントの場合、全体的なタスクは依然として非常に単純です。PDFビューアプログラムは、「テキスト文字列を表すことを意図しているバイトシーケンスの各バイト」を「エンコーディングテーブルで検索できる、描画する正確に1つのグリフ」に1:1でマッピングする必要があります。
コンポジットのCID キー付きフォント (何千もの文字形状が含まれている可能性があります) の場合、ビューアー プログラムのルックアップ/マッピングは、「これは、テキストとして描画することになっていることがわかっているバイトのシーケンスです」から「これは描画するグリフ形状の順序」は 1:1 ではなくなりました。ここでは、CIDFont から各グリフを1 つ選択するために、 1 つ以上のバイトのシーケンスをデコードする必要があります。
そして、この CIDFont デコードを支援するには、CMap 構造が必要です。CMap は、Unicode エンコーディングから文字コレクションへのマッピングを定義します。PDF 仕様では、中国語、日本語、および韓国語のフォントについて、少なくとも 5 ダースの CMap とその標準名が定義されています。これらの事前定義された CMap は、PDF に埋め込む必要はありません (ただし、適合する PDF リーダーは、それらを正しく処理する方法を知っている必要があります)。しかし、(もちろん) PDF 作成アプリケーションが PDF を書き出したときに「オンザフライ」で生成されたカスタム CMap もあります。その場合、CMap を PDF ファイルに埋め込む必要があります。
これらの複雑さに関するすべての詳細は、公式の PDF-1.7 仕様に記載されています。