0

私は初心者の Python プログラマーで、過去に少し Java を知っていました。いくつかのテキスト ファイル (トルコ語) と、テキスト内の結合詞のオフセット番号を含む対応する xml ファイルがあります。例えば

-<Conn> 
    -<Span> 
        <Text>ama</Text> 
        <BeginOffset>281</BeginOffset> 
        <EndOffset>284</EndOffset> 
    </Span> 
</Conn>

これは、txt ファイルの 281 オフセットに「ama」があることを示しています。しかし、このファイルを python で読むと、'ama' は 301. バイトにあるか、ファイル内の 272. 文字です。私の知る限り、Java アプリケーションは txt ファイルの読み取り中にエンコーディングについて言及していません。そして、Unicode、UTF8などでファイルを読み取ろうとしました...これらのオフセットからファイル内の位置を修正する方法を見つける必要があります。私の推測では、問題はトルコ語の文字 (異なるエンコーディングでは異なるバイト数を使用する可能性があります) によるものですが、私はそれを理解できませんでした。どんな提案も私にとって非常に良いものです。ありがとう 編集: 私はpython3.3で次のコードを使用しました:

f = open(path, encoding='utf-8')
text = f.read()
text[272:275] # returns 'ama' but it should be text[281:284]
ibbyte = text.encode(encoding='utf-8')
inbytes[292:295] # returns 'ama' but this is also incorrect 
4

1 に答える 1

0

@Geneが言うように、それは行末マーカーです。Windows で記述された Java アプリケーションであるため、各 '\n' を 2 バイトとしてカウントします。しかし、python はそれらを 1 バイトとしてカウントします。'\n' をオフセット番号までカウントし、指定されたオフセット番号から減算します。洞察に満ちたコメントをありがとうございました

于 2013-03-11T23:11:21.613 に答える