机械土耳其语作业的简化接口。
turkleton的Python项目详细描述
Amazon Mechanical Turk的完全简单的Python接口。
- 免费软件:BSD许可证
- 文档:https://turkleton.readthedocs.org。
安装
只需使用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上的第一个版本。