机械土耳其语作业的简化接口。

turkleton的Python项目详细描述


https://img.shields.io/travis/etscrivner/turkleton.svghttps://coveralls.io/repos/etscrivner/turkleton/badge.svg?branch=masterhttps://img.shields.io/pypi/v/turkleton.svgDocumentation Status

Amazon Mechanical Turk的完全简单的Python接口。

安装

只需使用pip从pypi下载包即可

$ pip install turkleton

功能

机械Purk的现有Python API是最好的薄包装——我们可以 做得更好。

Turkleton的目标是利用Python的表现力来改善整体 情况。虽然仍在积极开发中,但主要功能是:

  • 从预先构建的布局定义任务的简单界面。
  • 用于定义分配结果架构的简单接口。
  • 轻松批量上传任务。
  • 轻松下载和验证作业。

示例

在Turkleton有几个目标需要注意:任务、命中和 作业。任务是创建点击的模板。一击 对应于amazon mechanical turk api中的hit,表示上传的 任务。作业包含在点击中。单独的任务 表示单个工作进程提交的答案集。一次打击可以有很多 作业。

设置连接

Turkleton使用每个进程的全局连接。它应该在 你试图上传或下载任何东西。您可以这样初始化:

fromturkletonimportconnectionconnection.setup(AWS_ACCESS_KEY,AWS_SECRET_ACCESS_KEY)

就这样!

创建并上传任务

若要定义命中,请创建一个代表分配模板的任务 你想要一个工人完成。例如:

importdatetimefromturkleton.assignmentimporttaskclassMyTask(task.BaseTask):__layout_id__='MY LAYOUT ID'__reward__=0.25__title__='Guess How Old From Picture'__description__='Look at a picture and guess how old the person is.'__keywords__=['image','categorization']__time_per_assignment__=datetime.timedelta(minutes=5)
<>这里,我们已经从一个现有的布局创建了一个任务。既然我们已经定义了 任务我们可以通过填写布局参数轻松上载点击数:

task=MyTask(image_url='http://test.com/img.png',first_guess='29')hit=task.upload(batch_id='1234')

这将从任务模板创建新的工作分配并将其上载到 机械土耳其人。可选的batch_id参数允许您设置 将任务注释为可用于检索的任意字符串 稍后分批执行任务。

您可以轻松地在一个循环中上载许多任务,如下所示:

forimage_urlinall_image_urls:MyTask.create_and_upload(image_url=image_url,first_guess='29',batch_id='1234')

如果您不想使用批处理标识,也可以使用上下文管理器:

withtask.batched_upload(batch_id='1234')forimage_urlinall_image_urls:MyTask.create_and_upload(image_url=image_url,first_guess='29')

下载结果

要下载命中的结果,首先需要定义一个赋值。这个 赋值定义期望的值及其类型。这些习惯了 自动分析各种问题的答案:

fromturkleton.assignmentimportassignmentfromturkleton.assignmentimportanswersclassMyAssignment(assignment.BaseAssignment):categories=answers.MultiChoiceAnswer(question_name='Categories')notes=answers.TextAnswer(question_name='AdditionalNotes',default='')does_not_match_any=answers.BooleanAnswer(question_name='DoesNotMatchAnyCategories',default=False)

然后,您可以按如下方式下载给定批次中的所有点击:

fromturkleton.assignmentimporthitreviewable_hits=hit.get_reviewable_by_batch_id('1234')

然后,每次命中都可能有多个与之关联的赋值。你可以 下载作业,查看它们,然后按如下方式处理命中结果:

foreachinMyAssignment.get_by_hit_id(hit.hit_id):print('{} - {} - {}'.format(each.categories,each.notes,each.does_not_match_any))ifis_valid_assignment(each):each.accept('Good job!')else:each.reject('Assignment does not follow instructions.')hit.dispose()

历史记录

1.2.1(2015-06-15)

  • 错误修复,按批处理ID检索命中时出错

1.2.0(2015-06-11)

  • 更多答案类型
  • 修正了答案保留单个值的错误

1.1.0(2015-06-06)

  • 连接管理的改进
  • 用于上载批的更方便语法

1.0.0(2015-06-05)

  • 主要版本修订和更新

0.1.0(2015-01-11)

  • pypi上的第一个版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何避免springbootstarterparent和dependency中的flyway包冲突   java文本文件写入不起作用   java获取名为DAO类的Bean创建异常   java类路径和清单文件   如何使用Java中的模式来获取像C中的“sscanf”这样的组?   java Spring自动连接具有构造函数的类   clientSecurity运行的java geode示例失败   java JavaFX:在FXML中从ResourceBundle访问非string对象   java登录到google firebase   java对象在通过构造函数后不会更改。为什么?   java(Android)对特定页面的操作webView   javascript如何在webview的js中从java调用变量   持久化—一种在Java中存储和检索对象而不使用关系数据库的简单方法?   java Ldap获取通讯组列表中的用户   java检查温度条件   java后退按钮警报框(Android Studio)   数组java列表问题:为什么我运行它时,它会在第三次打印时打印出4?   java相对路径与绝对路径