4

検索可能なPDFからテキストを抽出するSDKをテストしています。SDKの依存関係の1つが最近更新されたため、ヘブライ語テキストの既存のテストが失敗します。ヘブライ語も、関連するテクノロジーが右から左への言語をどのように表現するかについても十分に知りません。

NUnitテストは、抽出されたテキストがC#文字列"מנבוצץז"と一致することを表明します。

 string hebrewText = reader.ReadToEnd();
 Assert.AreEqual("מנבוצץז ", hebrewText);

ラスタライズされたPDFには、同じ文字であると私が信じているものがありますが、順序が逆です。

ここに画像の説明を入力してください

単体テストは次のメッセージで失敗します。

予想:「מנבוצץז」

しかし、だった:「זץצובנמ」

実際の結果は、ラスタライズされたPDFに表示されるものとより厳密に一致しますが、元のテストが間違っているかどうかは完全にはわかりません。

  1. C#文字列のヘブライ語文字は、印刷されたヘブライ語テキストのように右から左に読むことになっていますか?
  2. .NETスタックの一部がヘブライ語の文字列の方向を改ざんしていますか?
  3. NUnitはどうですか?
  4. 検索可能なPDFに埋め込まれたヘブライ文字は、通常、ラスタライズされたテキストと同じ方向に進むことになっていますか?
  5. この単体テストを「修正」するかどうかを決定する前に、他に知っておくべきことはありますか?
4

2 に答える 2

4

RTL言語をエンコードするにはさまざまな方法があります。最も一般的な方法(およびWindowのデフォルト)は、論理的な順序を使用することです。これは、最初の文字が文字列(またはファイル)の最初の文字としてエンコードされることを意味します。したがって、最初の文字が画面の左側に表示されるか右側に表示されるかは、保存される順序には影響しません。

Visual Studioに表示されるテキストは、バージョンによって異なります。私が覚えている限り、Visual Studio 2010より前のコードエディタはヘブライ語を逆方向に表示していましたが、ヘブライ語のテキストを選択しようとすると、奇妙な方法で逆になりました(視覚的に混乱していました)。この問題はVisualStudio2010では存在しないようです(少なくとも、テストしたばかりのSP1では)。

テキストで指定された文字列よりも、ヘブライ語を話さない人にとって方向が明確なヘブライ語の単語を考えてみましょう。

יון

この単語はたまたまイオンを表すヘブライ語であり、画面上では、最も高い文字が左側にあり、最も短い文字が右側にある3文字として表示されます。.NET文字列では、式"יון".Substring(0, 1)は文字列の最初の文字であるため、短い文字を生成します。"\u05D9\u05D5\u05DF"文字列は、左端のUnicode文字\u05D9が右側に表示される短い文字を表す場所として記述することもできます。これは、文字が格納される順序を明確に示しています。

テストケースの文字列は無意味なので、それがずっと間違ったテストだったのか、それとも合格すべき正しいテストだったのかはわかりません。アップロードした画像が正しくレンダリングされている場合は、テストの実際の結果が正しく、期待値が正しくないように見えるため、テストを修正する必要があります。

于 2012-04-24T15:38:21.383 に答える
1
  1. C#のすべての文字列はLTRとして内部的に保存されると思います。RTL文字列には、実際にRTLであることを示す印刷不可能な文字(または何か)が含まれます。
  2. おそらくより。たとえば、RTL GUIおよびレンダリングされたテキストを正しく表示するには、特定のプロパティ(具体的にはRightToLeftおよびRightToLeftLayout)を設定する必要があります。
  3. NUnitはすべきではありません。また、気にする必要はありません。IMHO逆文字列!=元の文字列。
  4. コメントできませんでした。最初は合格だったと仮定すると、テストが期待するものであれば何でもよいと思います。
  5. RTLで半分の対策を行わないでください、それは本当にそれが好きではありません。完全なRTLサポートがあるか、何もないかのどちらかです。それはかなり厄介かもしれません、私はあなたに幸運を祈ります!
于 2012-04-24T14:50:35.243 に答える