-2

基本的に、PDF をテキストに変換してから、Python のライブラリを使用してそのテキストの一部を分析およびクリッピングしています。Python の「クリッピング」は、実際にはテキストを別々のファイルに分割するのではなく、文字列抽出のための開始文字と終了文字の位置を持っているだけです。例えば:

the quick brown fox jumped over the lazy dog

私のpythonコードは、 4 、 9 を指定して「クイック」を切り取る可能性があります。次に、GUIプログラムにC#を使用しており、Pythonによって割り当てられたこれらの値を取得しようとしていますが、ほとんどの場合うまくいきます。PDFをテキストファイルに変換した光学式文字認識プログラムには、C#側のカウントを変更するいくつかの奇妙なUTF文字が含まれていたようです。

PDF-txt 変換の奇数文字には、"f" と "i" の文字の代わりに "fi" の文字が含まれます (他の文字も大きなファイルである可能性があります)。これは 1 文字であり、Python (および Notepad++) はこの 3 文字の位置を考慮します。

C#: "fi" の長さ = 1 文字。

Python/Notepad++: "fi" の長さ = 3 文字。

これが最終的に行うことは、文字数の違いによるオフセット クリップを提供することです。Python(Linux)で実行してクリッピングを完璧に出力しようとしたときに言ったように、テキストファイルをWindowsに転送すると、Notepad ++はそれらが正しい位置であることを確認します。C# は実際には "fi" を 1 文字としてカウントし、Notepad++ や Python は何らかの理由で 3 文字としてカウントします。

この不一致を Python 側または C# 側から橋渡しする方法が必要です。

4

1 に答える 1

1

文字とバイトを区別する必要があります。utf8 は文字エンコーディングで、1 文字は最大 4 バイトです。そのため、notepad++ は、Python がバイト文字列と文字列の両方を処理できる、おそらくバイト位置を表示します。C# では、ファイルをテキスト ファイルとして読み込んだ可能性があり、文字列も生成されます。

Python で文字列を読み取るには、次のようにします。

import codecs
with codecs.open(filename, encoding="utf-8") as inp:
    text = inp.read()
于 2015-07-18T12:59:55.350 に答える