最近、PDFBoxを使用してPDFファイルからテキストを抽出しようとしました。ほとんどのPDFで問題なく動作しますが、1つのPDF(残念ながら共有は許可されていません)では、文のすべてのピリオドが抽出されません。代わりに、次のようなフレーズが表示されます。
...what it would be It’ll be important later on...
ピリオドスペースではなく単なるスペースのように見えますが、そうではありません(少なくともMac OS Xでは)。テキストをテキストエディタにコピーして、フレーズ内でテキストカーソルを移動し始めると、「フィート」の「t」の直後に「空の文字」が表示されます。再現するには:
- 「フィート」の文字「t」の直前にカーソルを置き、右矢印キーを押します。カーソルが1ステップ右に移動します。
- もう一度右矢印キーを押すと、現在の場所にとどまります。
- もう一度右矢印キーを押すと、スペースの反対側に進みます。
- 右矢印キーを押し続けると、期待どおりに動作します
PDFBoxは、ピリオドの代わりにある種の「空の文字」を抽出したようです。私はそれをいくつかの異なる方法で置き換えようとしましたが、運がありませんでした:
String oldText = text;
text = text.replace('\u0000', '.'); //Unicode null
text = text.replace('\0', '.'); //C null
System.out.println(oldText.equals(text)); //Returns true
//Also tried text.replace(null, '.'), but it doesn't compile
この「空の文字」とは何ですか。また、そこにあるはずのテキストに置き換えるにはどうすればよいですか。
編集:この回答は、文字がなどの文字である可能性があることを示唆していますが、提案されているよう\uFEFF
に正規表現に置き換えようとしても機能しませんでした。