-
Notifications
You must be signed in to change notification settings - Fork 0
/
Google_Apps_Script.gs
116 lines (100 loc) · 3.83 KB
/
Google_Apps_Script.gs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// The code below is what is used in the Ainu evaluation app.
//
// Edit the logic (selected data, how to update, etc)
// according to your specific use case.
const SPREADSHEET_ID = "YOUR ID HERE";
// Process HTTP GET requests.
function doGet(e) {
const SENTENCE_SHEET = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName('unevaluated');
const SENTENCES = SENTENCE_SHEET.getDataRange().getValues();
const CONTEXT_SHEET = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName('full');
const CONTEXT_SENTENCES = CONTEXT_SHEET.getDataRange().getValues();
let rowData = [];
let indices = new Set();
for(let ii = 0; ii < 100; ii++) {
let row = getRandomRowData(SENTENCES, CONTEXT_SENTENCES);
if(row.success && !indices.has(row.index)) {
rowData.push(row);
indices.add(row.index);
}
}
const output = ContentService.createTextOutput();
output.setMimeType(ContentService.MimeType.JSON);
output.setContent(JSON.stringify({success: true, sentences: rowData}));
return output;
}
// Process HTTP POST requests.
function doPost(e) {
const input = JSON.parse(e.postData.contents);
const result = updateSurveyResults(input);
const output = ContentService.createTextOutput();
output.setMimeType(ContentService.MimeType.JSON);
output.setContent(JSON.stringify({ result: result }));
return output;
}
function getRandomRowData(data, contextData) {
const numRows = data.length;
const randomIndex = Math.floor(Math.random() * (numRows - 1)) + 1;
const selectedRow = data[randomIndex];
const selectedIndex = selectedRow[0] + 1;
const selectedRowNum = selectedRow[12];
let contextKana = [];
let contextLatn = [];
let contextJapn = [];
for (let ii = selectedIndex - 5; ii <= selectedIndex + 5; ii++) {
if (ii >= 0 && ii < contextData.length) {
contextKana.push(contextData[ii][1]); // 2nd column
contextLatn.push(contextData[ii][2]); // 3rd column
contextJapn.push(contextData[ii][3]); // 4th column
}
}
const modelNumber = Math.floor(Math.random() * 3);
let model, modelIndex;
for(let ii = 0; ii <= modelNumber || (!model && ii < 3); ii++) {
if(!selectedRow[13 + ii] && selectedRow[3 + ii] != selectedRow[2]) {
model = selectedRow[3 + ii];
modelIndex = ii;
}
}
if(model) {
var result = {
success: true,
index: selectedRowNum, // Row number
kana: selectedRow[1], // Katakana column
human: selectedRow[2], // Human Latin column
model: model,
modelIndex: modelIndex,
contextKana: contextKana,
contextLatn: contextLatn,
contextJapn: contextJapn
};
} else result = {success: false};
console.log(result);
return result;
}
function updateSurveyResults(input) {
const SHEET = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName('modified');
const ROW_INDEX = input.index;
const HUMAN_OK_COL = 14;
const HUMAN_COL = 3;
const COS_COL = 4;
const COS_OK_COL = 15;
const COMMENT_COL = 19;
SHEET.getRange(ROW_INDEX, HUMAN_OK_COL).setValue(input.humanOK);
SHEET.getRange(ROW_INDEX, COS_OK_COL + input.modelIndex).setValue(input.modelOK);
if(input.comment) {
const oldComment = SHEET.getRange(ROW_INDEX, COMMENT_COL).getValue();
const newComment = oldComment ? oldComment + '; ' + input.comment : input.comment;
SHEET.getRange(ROW_INDEX, COMMENT_COL).setValue(newComment);
}
for(let ii = 0; ii < 3; ii++) {
if(ii !== input.modelIndex) {
if(SHEET.getRange(ROW_INDEX, COS_COL + ii).getValue() == SHEET.getRange(ROW_INDEX, COS_COL + input.modelIndex).getValue()) {
SHEET.getRange(ROW_INDEX, COS_OK_COL + ii).setValue(input.modelOK);
} else if(SHEET.getRange(ROW_INDEX, COS_COL + ii).getValue() == SHEET.getRange(ROW_INDEX, HUMAN_COL).getValue()) {
SHEET.getRange(ROW_INDEX, COS_OK_COL + ii).setValue(input.humanOK);
}
}
}
return "SUCCESS";
}