从亚马逊云搜索sdf中删除无效字符

时间:2013-01-10 13:21:20

标签: amazon-web-services amazon-cloudsearch

在尝试将从pdf文件中提取的数据发布到亚马逊云搜索域进行索引时,索引因数据中的无效字符而失败。

如何在发布到搜索结束点之前删除这些无效字符?

我试图逃避并更换字符,但没有用。

2 个答案:

答案 0 :(得分:1)

在将文档上传到CloudSearch时(使用aws sdk / json)时出现这样的错误:

字段content_stemmed的源错误:字段'content_stemmed'的验证错误:无效的代码点B

AWS所记录的针对我的解决方案(请参阅以下内容)是在上传之前从文档中删除无效字符:

例如,这就是我使用javascript所做的:

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

ref

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] /

答案 1 :(得分:0)

我已使用可用的解决方案here

解决了问题
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)