如何映射照片和文本

时间:2014-08-02 16:32:54

标签: regex mapreduce hbase

请观察下面的Google文档:

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

我试图使用MapReduce或Importtsv将数据放入Hbase。但我的主要问题是处理照片。我想将这些照片放在一个单独的列系列中。我如何只选择照片并将它们导入HBase,因为这些照片没有任何可以识别的内容......就像(文本)名称一样。

我考虑过使用正则表达式。但是一些地区的结构不同。例如,“亚利桑那州1”与“阿拉斯加州”。

我需要知道如何明确识别照片,以便可以对其进行适当区分和导入。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我没有使用MapReduce或Importtsv的经验,所以我使用c#以不同的方式进行此操作。正如hex494D49指出的那样,图像确实有与之相关的文本。您只需从文档的来源获取该数据(即右键单击 - &gt;查看页面源)。

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