2017-10-11 2 views
0

J'essaie de créer par programme une question sur turk mécanique en utilisant boto3, mais je semble faire quelque chose de mal, car la structure de données ExternalQuestion qui est requis pour create_hit semble être manquant.Comment faire pour soumettre Mechanical Turk ExternalQuestions avec boto3

J'essaie de créer le HIT comme ceci:

import boto3 

#... 

client = boto3.client(
    'mturk', 
    endpoint_url=endpoint_url, 
    region_name=region_name, 
    aws_access_key_id=aws_access_key_id, 
    aws_secret_access_key=aws_secret_access_key, 
) 

question = ExternalQuestion(external_url=question_target, frame_height=800) 

response = client.create_hit(
     MaxAssignments=10, 
     Title='Test', 
     Description='This is a test of ExternalQuestion', 
     Question=question, 
     AssignmentDurationInSeconds=60, 
     LifetimeInSeconds=24 * 60 * 60, 
     Reward=0.01) 

qui échoue:

Traceback (most recent call last): 
    File "createTask.py", line 21, in <module> 
    question = ExternalQuestion(external_url=question_target, frame_height=800) 
NameError: name 'ExternalQuestion' is not defined 

Tous les conseils sur la façon de procéder est très apprécié.

+0

ExternalQuestion est une structure de données, pas une fonction. Il doit être créé dans un fichier XML, puis en Python, utilisez la commande 'open()' et passez le 'file.read()' au paramètre Question – Mangohero1

+0

Voir l'exemple de code [ici] (http://docs.aws .amazon.com/AWSMechTurk/latest/AWSMturkAPI/ApiReference_ExternalQuestionArticle.html) – Mangohero1

Répondre

0

Ceci est un extrait direct de mon code de production. J'ouvre un fichier XML pour lequel vous pouvez obtenir un modèle à partir du site du demandeur et ensuite je l'ammend pour contenir votre propre javascript et html. Je vais joindre un échantillon ci-dessous.

Python

import boto3 
region_name = 'us-east-1' 
aws_access_key_id = '*********************' 
aws_secret_access_key = '*********************' 
endpoint_url = 'https://mturk-requester-sandbox.us-east-1.amazonaws.com' 

# Uncomment this line to use in production 
#endpoint_url = 'https://mturk-requester.us-east-1.amazonaws.com' 
client = boto3.client(
    'mturk', 
    endpoint_url=endpoint_url, 
    region_name=region_name, 
    aws_access_key_id=aws_access_key_id, 
    aws_secret_access_key=aws_secret_access_key, 
) 
questionSampleFile = open("K:/" + str(somefile) + ".xml", "r") 
questionSample = questionSampleFile.read() 

localRequirements = [{ 
    'QualificationTypeId': '00000000000000000071', 
    'Comparator': 'NotIn', 
    'LocaleValues': [{ 
    'Country': 'WF' 
    }], 
    'RequiredToPreview': True 
    }] 
xReward = '0.25' 
# Create the HIT 
response = client.create_hit(
    MaxAssignments = 1, 
    #AutoApprovalDelayInSeconds = 259200, 
    #3 days for lifetime 
    LifetimeInSeconds = 172800, 
    #1 hour to finish the assignment 
    AssignmentDurationInSeconds = 5400, 
    Reward = xReward, 
    Title = 'Enter Missing Data', 
    Keywords = 'data entry, typing, inspection', 
    Description = 'Edit and Add Data from PDF', 
    Question = questionSample, 
    QualificationRequirements = localRequirements 
) 

XML

<HTMLQuestion xmlns="http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2011-11-11/HTMLQuestion.xsd"> 
    <HTMLContent><![CDATA[ 

]]> 
    </HTMLContent> 
    <FrameHeight>900</FrameHeight> 
</HTMLQuestion>