2

PDF ファイルから抽出されたデータをインデックス作成のために Amazon クラウド検索ドメインに投稿しようとしたときに、データ内の無効な文字が原因でインデックス作成が失敗しました。

検索エンドポイントに投稿する前に、これらの無効な文字を削除するにはどうすればよいですか?

文字をエスケープして置き換えようとしましたが、うまくいきませんでした。

4

2 に答える 2

1

ドキュメントを CloudSearch にアップロードするときに (aws sdk / json を使用)、次のようなエラーが発生しました。

フィールド content_stemmed のソースに関するエラー: フィールド 'content_stemmed' の検証エラー: 無効なコードポイント B

AWS によって文書化されているように (以下の参照)、私にとっての解決策は、アップロードする前にドキュメントから無効な文字を削除することでした。

たとえば、これは私がjavascriptを使用して行ったことです:

const cleaned = someFieldValue.replace(
  /[^\u0009\u000a\u000d\u0020-\uD7FF\uE000-\uFFFD]/g, 
  ''
)

参照:

JSON バッチと XML バッチの両方に、XML で有効な UTF-8 文字のみを含めることができます。有効な文字は、制御文字のタブ (0009)、キャリッジ リターン (000D)、ライン フィード (000A)、および Unicode と ISO/IEC 10646 の有効な文字です。FFFE、FFFF、およびサロゲート ブロック D800–DBFF と DC00– DFFF は無効であり、エラーが発生します。

次の正規表現を使用して無効な文字を照合し、それらを削除できます: /[^\u0009\u000a\u000d\u0020-\uD7FF\uE000-\uFFFD]/

于 2020-02-13T23:28:08.973 に答える
0

ここで利用可能なソリューションを使用して問題を修正しました

RE_XML_ILLEGAL = u'([\u0000-\u0008\u000b-\u000c\u000e-\u001f\ufffe-\uffff])' + \
                 u'|' + \
                 u'([%s-%s][^%s-%s])|([^%s-%s][%s-%s])|([%s-%s]$)|(^[%s-%s])' % \
                  (unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff),
                   unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff),
                   unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff))
x = u"<foo>text\u001a</foo>"
x = re.sub(RE_XML_ILLEGAL, "?", x)
于 2013-01-11T05:57:11.810 に答える