2013-03-20 53 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