-
Notifications
You must be signed in to change notification settings - Fork 2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Anna V. Kozlova
committed
Dec 28, 2017
1 parent
b613bc0
commit 23031e7
Showing
3 changed files
with
1,132 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
import requests | ||
import json | ||
import numpy as np | ||
from collections import OrderedDict | ||
|
||
class Grader(object): | ||
def __init__(self): | ||
self.submission_page = 'https://www.coursera.org/api/onDemandProgrammingScriptSubmissions.v1' | ||
self.assignment_key = '7DdYfMQFEeevjw7-W7Fr0A' | ||
self.parts = OrderedDict([('98mDT', 'Question2Vec'), | ||
('nc7RP', 'HitsCount'), | ||
('bNp90', 'DCGScore'), | ||
('3gRlQ', 'W2VTokenizedRanks'), | ||
('mX6wS', 'StarSpaceRanks')]) | ||
self.answers = {key: None for key in self.parts} | ||
|
||
@staticmethod | ||
def ravel_output(output): | ||
''' | ||
If student accidentally submitted np.array with one | ||
element instead of number, this function will submit | ||
this number instead | ||
''' | ||
if isinstance(output, np.ndarray) and output.size == 1: | ||
output = output.item(0) | ||
return output | ||
|
||
def submit(self, email, token): | ||
submission = { | ||
"assignmentKey": self.assignment_key, | ||
"submitterEmail": email, | ||
"secret": token, | ||
"parts": {} | ||
} | ||
for part, output in self.answers.items(): | ||
if output is not None: | ||
submission["parts"][part] = {"output": output} | ||
else: | ||
submission["parts"][part] = dict() | ||
request = requests.post(self.submission_page, data=json.dumps(submission)) | ||
response = request.json() | ||
if request.status_code == 201: | ||
print('Submitted to Coursera platform. See results on assignment page!') | ||
elif u'details' in response and u'learnerMessage' in response[u'details']: | ||
print(response[u'details'][u'learnerMessage']) | ||
else: | ||
print("Unknown response from Coursera: {}".format(request.status_code)) | ||
print(response) | ||
|
||
def status(self): | ||
print("You want to submit these parts:") | ||
for part_id, part_name in self.parts.items(): | ||
answer = self.answers[part_id] | ||
if answer is None: | ||
answer = '-'*10 | ||
print("Task {}: {}".format(part_name, answer[:100] + '...')) | ||
|
||
def submit_part(self, part, output): | ||
self.answers[part] = output | ||
print("Current answer for task {} is: {}".format(self.parts[part], output[:100] + '...')) | ||
|
||
def submit_tag(self, tag, output): | ||
part_id = [k for k, v in self.parts.items() if v == tag] | ||
if len(part_id) != 1: | ||
raise RuntimeError('cannot match tag with part_id: found {} matches'.format(len(part_id))) | ||
part_id = part_id[0] | ||
self.submit_part(part_id, str(self.ravel_output(output))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
import re | ||
from nltk.corpus import stopwords | ||
|
||
REPLACE_BY_SPACE_RE = re.compile('[/(){}\[\]\|@,;]') | ||
GOOD_SYMBOLS_RE = re.compile('[^0-9a-z #+_]') | ||
STOPWORDS = set(stopwords.words('english')) | ||
def text_prepare(text): | ||
text = text.lower() | ||
text = REPLACE_BY_SPACE_RE.sub(' ', text) | ||
text = GOOD_SYMBOLS_RE.sub('', text) | ||
text = ' '.join([x for x in text.split() if x and x not in STOPWORDS]) | ||
return text.strip() | ||
|
||
def array_to_string(arr): | ||
return '\n'.join(str(num) for num in arr) | ||
|
||
def matrix_to_string(matrix): | ||
return '\n'.join('\t'.join(str(num) for num in line) for line in matrix) |
Oops, something went wrong.