如何为Amazon Mechanical Turk准备包含Emoji字符的CSV HIT文件

li9yvcax  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(74)

亚马逊的Mechanical Turk拒绝包含4字节UTF-8字符的CSV HIT文件-例如Emoji。然而,Emoji字符是工人任务不可或缺的一部分,我需要保留它们。
我在https://github.com/charman/mturk-emoji中找到了这个脚本,它将Emoji字符替换为等效的HTML跨度(例如,)。然而,当将预处理的CSV馈送到MTurk时,Emoji字符不会呈现。

krugob8w

krugob8w1#

我按照这些步骤设法解决了这个问题。
1.使用链接的GitHub repo中的脚本encode_emoji.py将CVS转换为UTF-8 Emojis。你得到,比如说,sample_with_emoji.csv
1.在Mechanical Turk中,编辑当前项目并转到Design Layout。为了正确呈现带有emoji字节的HTML span,您需要在MTurk的HTML编辑器的开头添加以下代码:

<script src="https://code.jquery.com/jquery-3.3.1.js"
            integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
            crossorigin="anonymous"></script>

<script>
    function displayEmoji() {

  /**
   * utf8ByteArrayToString() copied from:
   *   https://github.com/google/closure-library/blob/e877b1eac410c0d842bcda118689759512e0e26f/closure/goog/crypt/crypt.js
   *
   * Converts a UTF-8 byte array to JavaScript's 16-bit Unicode.
   * @param {Uint8Array|Array<number>} bytes UTF-8 byte array.
   * @return {string} 16-bit Unicode string.
   */
  var utf8ByteArrayToString = function(bytes) {
    var out = [], pos = 0, c = 0;
    while (pos < bytes.length) {
      var c1 = bytes[pos++];
      if (c1 < 128) {
        out[c++] = String.fromCharCode(c1);
      } else if (c1 > 191 && c1 < 224) {
        var c2 = bytes[pos++];
        out[c++] = String.fromCharCode((c1 & 31) << 6 | c2 & 63);
      } else if (c1 > 239 && c1 < 365) {
        // Surrogate Pair
        var c2 = bytes[pos++];
        var c3 = bytes[pos++];
        var c4 = bytes[pos++];
        var u = ((c1 & 7) << 18 | (c2 & 63) << 12 | (c3 & 63) << 6 | c4 & 63) -
                0x10000;
        out[c++] = String.fromCharCode(0xD800 + (u >> 10));
        out[c++] = String.fromCharCode(0xDC00 + (u & 1023));
      } else {
        var c2 = bytes[pos++];
        var c3 = bytes[pos++];
        out[c++] =
          String.fromCharCode((c1 & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
      }
    }
    return out.join('');
  }

  jQuery(this).text(utf8ByteArrayToString(JSON.parse(jQuery(this).attr('data-emoji-bytes'))));
}
</script>

<script>
    jQuery(document).ready(function() {
      jQuery('span.emoji-bytes').each(displayEmoji);
    });
</script>

上面的内容基本上是repo中README文件底部的内容,脚本decode_emoji.js是内联添加的,而不是源代码。
1.按下保存键就可以了。现在,如果您上传sample_with_emoji.csv文件,表情符号将在预览中正确呈现。

相关问题