2013-03-20 54 views
2

我试图提取提交使用博托库亚马逊的Mechanical Turk工人自由文本答案提取FreeText的答案。如何从分配使用博托

assignments = conn.get_assignments(hit_id) 
for assignment in assignments: 
    worker = assignment.WorkerId 
    answer = assignment.Answer 

在这里,我希望答案是提交的工人自由文本串(该HIT要求职工提交的唯一的事情),但是,上面的代码不给我。我在这里错过了什么?

回答

2

我认为上例中的赋值对象将会有一个属性叫做answers这是一个QuestionFormAnswer对象的列表。这些对象中的每一个都应该有一个名为FreeText的属性。

+0

看着这样的:http://docs.pythonboto.org/en/latest/ref/mturk.html#boto.mturk.connection.Assignment,这表明在这里遵循的定义:HTTP:// docs.aws.amazon.com/AWSMechTurk/latest/AWSMturkAPI/ApiReference_AssignmentDataStructureArticle.html,我期待一个命名属性'Answer'的分配对象的... – 2013-03-20 14:35:19

+0

该文档确实表明。我查看了代码,它似乎将答案积累在一个名为answers的属性中。这是否存在于对象上? – garnaat 2013-03-20 14:39:56

+0

感谢您指点我正确的方向。其实,你上面说的并不完全正确,我的情况是,为了得到Turkers的输入,我必须为每个任务使用:'assignment.answers [0] [0] .fields [0]'。实际上,'assignment.answers [0]'给出了一个ResultSet对象,'assignment.answers [0] [0]'给出了一个'QuestionFormAnswer'对象,并且我没有发现任何'FreeText'属性...我想知道,只有当您使用API​​为HIT显式创建一个属性时,“FreeText”属性才存在。不管怎么说,还是要谢谢你。 – 2013-04-05 22:37:41

3

在博托为了得到你正在寻找FreeText的信息,你需要遍历分配财产回答。除非您提交了多个表格,否则您的表格应该是第一个索引。

此列表类型的QuestionFormAnswer

这里是QuestionFormAnswer
博托文档 http://sourcecodebrowser.com/python-boto/2.3.0/classboto_1_1mturk_1_1connection_1_1_question_form_answer.html

你可以看到你真正想要的属性是QID领域

这里有一些更新的代码应该更好理解。

assignments = conn.get_assignments(hit_id) 
for assignment in assignments: 
    worker_id = assignment.WorkerId 
    # Iterate through question forms answers which are our fields 
    for question_form_answer in assignment.answers[0]: 
     field_id = question_form_answer.qid 
     field_value = question_form_answer.fields