1

私は Python の初心者で、(特定の形式で書かれた) テキスト ファイルを XML ファイルに解析する Python スクリプトを書き込もうとしています。テキストファイルは非ヨーロッパ言語で書かれており、UTF-8 でエンコードされています (右から左に書かれています)。これだけでも問題が発生します。

テキストファイルのフォーマット:

{number}"|"{number}"|" {text in UTF-8}

その例は次のとおりです。

   1|2|حمد ހުރީ، عالم ތަކުގެ ވެރި اللَّه އަށެވެ

最初の問題は、テキストから読み取るときに、単語の順序が Python で入れ替わることでした。テキストを読む場合: 1|2| ABC DEF、Python では 1|2| と表示されます。DEF ABC これは明らかに間違っています。

私はテキストを取得するためにそれを使用file = open("text.txt")して実行readlines()しています。

このバグを修正するためにsplit()、単語を分離してリストに入れ、必要に応じて並べ替えようとしましたが、この場合、おそらく変換エラーが発生し、文字化けが発生します。このような UTF-8 文字を Python リストに格納して取得するには問題があります。文字は保持されません。

このリスト処理のバグが修正されれば、XML ファイルの作成は簡単になります。

編集: 参考になれば、言語はディベヒ語、アルファベットはターナ語です。

4

1 に答える 1

2

Python は、内部的に BIDI レンダリングをほとんどサポートしていません。つまり、Unicode Bidirectional Algorithmを完全には実装していません。

ただし、Python でテキスト レイアウトを直接行う場合を除き、これは問題になりません。あなたが説明したプロジェクト(BIDIテキストを含むファイルを読み取り、同じテキストを含む別のファイルを出力する)の場合、Pythonはうまく機能します。これは、ファイル内のテキストの順序 (入力と出力の両方) が、エンド ユーザーの画面にテキストが表示される方向ではなく、セマンティックな順序を反映するためです。XML ファイルを作成し、BIDI 対応のリーダー (ほとんどの Web ブラウザーと同様) で開くと、テキストが正しい順序で表示されるはずです。

参考までに、双方向テキスト レンダリングのサポートを Python に追加するモジュールもいくつかあります。1 つはpython-bidiです。これは、右から左へのテキストを使用するほとんどの言語でかなりうまく機能するようですが、アラビア文字の整形はまだ適切に処理されていません。もう 1 つの例は、 GNU fribidiライブラリのバインドであるpyfribidiです。これは明らかに、Linux (およびおそらく他の Unix ライクな OS) でのみ簡単にコンパイルできます。どちらも使ったことがないので、個人的なおすすめはできません。

于 2012-12-14T06:57:51.323 に答える