【问题标题】:Ruby filter binary dataRuby 过滤二进制数据
【发布时间】:2013-04-26 07:15:05
【问题描述】:

我正在使用 sphinx xmlpipe 和 rake 任务搜索 ms 单词文件,以便为他获取格式化的 xml。当我遇到问题时。基本上我所做的是用 MIME::Types.type_for 检测文件类型,如果这个文件 doc 或 docx 用 catdoc 读取它或提取它的 word/document.xml,问题是当任务返回 xml 中的特定条目时,sphinx 无法索引,他以 xml 解析错误结束:

XML parse error: not well-formed (invalid token)

当我查看返回的任务时,我发现索引在看起来像二进制数据条目的行上中断。 我可以从文本中过滤二进制数据,或者至少用它们检测文档,以便 sphinx 可以完成索引?

【问题讨论】:

  • 好吧,好像没人知道答案。在谷歌搜索了一段时间后,我最终使用了 antiword 而不是 catdoc,他似乎可以理解并从文本中裁剪图像。我也放弃使用 MIME::Types for unix "file" 实用程序,因为它提供更准确的结果并且不依赖于文件扩展

标签: ruby parsing filter rake sphinx


【解决方案1】:

经过额外的谷歌搜索,我终于找到了解决方案。

string.scan(/.*?((?:[\t\n\r\x20-\x7E])+|(?:\xD0[\x90-\xBF])+|(?:\xD1[\x80-\x8F])+|).*?/);

此正则表达式将仅选择标准 ASCII 符号和西里尔多字节 UTF-8 字符(俄语/保加利亚语)。 而这个正则表达式:

/.*?((?:[\t\n\r\x20-\x7E])+|(?:\xD0[\x90-\xBF])+|(?:\xD1[\x80-\x8F])+|(?:\xC3[\x80-\xBF])+|).*?/

允许您选择其他方言字符,例如带分音符号、波浪号的 UTF-8 拉丁字母?比如:“ä”、“ö”、“ü”

非常感谢这个家伙的博客:http://blog.famzah.net/2010/07/01/filter-a-character-sequence-leaving-only-valid-utf-8-characters/ 我在哪里找到了答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多