【问题标题】:How to Map photos and texts如何映射照片和文字
【发布时间】:2014-08-02 16:32:54
【问题描述】:

请注意下面的谷歌文档:

https://docs.google.com/document/d/1dw6mJW0VxHzD3_h86RgtZwmelBQE8tYGgi41jb1oz-o/edit

我正在尝试使用 MapReduce 或 Importtsv 将数据放入 Hbase。但我的主要问题是处理照片。我想把照片放在一个单独的列族中。我如何只选择照片并将它们导入 HBase,因为这些照片没有任何可以识别的东西……比如(文本)名称。

我考虑过使用正则表达式。但有些地区的结构不同。例如,“Arizona 1”与“Alaska at large”。

我需要知道如何具体识别照片,以便能够正确区分和导入。

【问题讨论】:

  • 在下面查看我的答案,如果您觉得有用,请告诉我。

标签: regex mapreduce hbase


【解决方案1】:

考虑到上述文档的结构,这就是您需要的表达式。它将匹配所有图像 URL 和每个图像描述。

<image\sxlink:href="(https:\/\/[^"\s]+)".*?<title><\/title><desc>(.+?)<\/desc><\/image>

Demo

在 PHP 中的用法:

$html = '<p>Members of our tim</p><image xlink:href="https://lh4.googleusercontent.com/z3GK1MdYyLTo0Q0xLmawvcptIrK4qkQx7XJWUgTK_i6Psm22GBqZXBh-w0TeQ5xgKxckQOB2wHWySSIpNj3tXx65MPXmaxKjK4ye_Xu-wAUFKLVhvWFgIedtzxo" width="100%" height="100%" preserveAspectRatio="none"><title></title><desc>Bradley Byrne.jpg</desc></image><h1>Some big title</h1><p>Something <span>more</span> here</p><image xlink:href="https://lh5.googleusercontent.com/fWYh7qTWqu4_4oxAiNhmnMCmD6DScZ6bIvkF5nSFunU8NxKlBT1T-1J85MJCqghhbChFzoLi-p4ZFVDCA2DWWBP9Paagp9ZgshqnGK5CQQF6D7IoBGihcFZoOms" width="100%" height="100%" preserveAspectRatio="none"><title></title><desc>Spencer Bachus 113th Congress.jpg</desc></image><h1>TITLE</h1><p>Testing, testing, testing</p><image xlink:href="https://lh5.googleusercontent.com/VAHzM6OkdtxT61j9XSgTDKlpVi99WsFfzNAlvqmnpCi90XFs9aUNMfuCeeeQ3e26fykjveoxldHvv5jO1Bk9IeEmeU7DdGVAM1N9xXoB8tJTYBeTeFBxigXtT5s" width="100%" height="100%" preserveAspectRatio="none"><title></title><desc>Kyrsten Sinema 113th Congress.jpg</desc></image><p>Last updated on 25th of July, 2014</p>';
$pattern = '/<image\sxlink:href="(https:\/\/[^"\s]+)".*?<title><\/title><desc>(.+?)<\/desc><\/image>/';
if(preg_match_all($pattern, $html, $matches)){
  $size_of_matches = count($matches[0]);
  for($i = 0; $i < $size_of_matches; $i++){
    echo $matches[1][$i] . " -> " . $matches[2][$i] . "<br />";
  }
}

输出:

https://lh4.googleusercontent.com/z3GK1MdYyLTo0Q0xLmawvcptIrK4qkQx7XJWUgTK_i6Psm22GBqZXBh-w0TeQ5xgKxckQOB2wHWySSIpNj3tXx65MPXmaxKjK4ye_Xu-wAUFKLVhvWFgIedtzxo -> Bradley Byrne.jpg
https://lh5.googleusercontent.com/fWYh7qTWqu4_4oxAiNhmnMCmD6DScZ6bIvkF5nSFunU8NxKlBT1T-1J85MJCqghhbChFzoLi-p4ZFVDCA2DWWBP9Paagp9ZgshqnGK5CQQF6D7IoBGihcFZoOms -> Spencer Bachus 113th Congress.jpg
https://lh5.googleusercontent.com/VAHzM6OkdtxT61j9XSgTDKlpVi99WsFfzNAlvqmnpCi90XFs9aUNMfuCeeeQ3e26fykjveoxldHvv5jO1Bk9IeEmeU7DdGVAM1N9xXoB8tJTYBeTeFBxigXtT5s -> Kyrsten Sinema 113th Congress.jpg

【讨论】:

    【解决方案2】:

    我没有使用 MapReduce 或 Importtsv 的经验,所以我使用 c# 以不同的方式解决了这个问题。正如 hex494D49 指出的那样,图像确实有与之相关的文本。您只需从文档的源中获取该数据(即右键单击-->查看页面源)。

    这个code 读取文档的源,尝试将政治家与图像文件(基于发布的可用信息)进行匹配,并将结果写入文本文件。该代码有许多 c# 正则表达式风格的示例。输出样本为here

    【讨论】:

    • 您可能需要考虑在此处发布代码或至少部分代码,因为链接可能会失效。 :)
    • 感谢您的建议。代码比较冗长,这是我第一次发帖。 :)
    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    相关资源
    最近更新 更多