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

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在ArrayList中比较数字   java在Kotlin中使异步调用同步   让“Scala编程”junit示例在IntelliJ中工作的java问题   java Servlet侦听器未在ContextListener中设置属性   将Microsoft SQL Server数据库连接到我的Java项目   加载资源时出现java“需要注册工厂”异常   java如何使用POI检查excel中的重复记录?   java如何更改机器生成的代码   java如何确保重写的方法是同步的   用Spring编写Hibernate时的java XML奥秘   java管理mysql数据库中存储的用户权限   java如何运行。来自Javascript的jar方法   java我想在Web应用程序中进行身份验证&对桌面应用程序使用相同的凭据。我该怎么做?