【发布时间】:2018-07-10 19:11:15
【问题描述】:
有时,我的电子邮件列表中包含同一个人的重复地址。例如,Jane 的地址既是“jane.doe@email.com”又是“doe.jane@email”。她的变体包括替换“。”用“-”或“_”。目前,我的重复脚本(由@Jordan Running 和 Ed Nelson 非常友好地升级)负责“严格”重复,但无法检测到“doe.jane@email.com”是“jane”的“复杂”重复.doe@email.com”。有没有办法删除甚至 这些 重复项,这样我就不会通过电子邮件发送多个 Jane 的地址?他们都指向同一个收件箱,所以我只需要包括她的一个地址。
这是我当前的代码:
function removeDuplicates() {
const startTime = new Date();
const newData = [];
const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();
const numRows = data.length;
const seen = {};
for (var i = 0, row, key; i < numRows && (row = data[i]); i++) {
key = JSON.stringify(row);
if (key in seen) {
continue;
}
seen[key] = true;
newData.push(row);
};
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
// Show summary
const secs = (new Date() - startTime) / 1000;
SpreadsheetApp.getActiveSpreadsheet().toast(
Utilities.formatString('Processed %d rows in %.2f seconds (%.1f rows/sec); %d deleted',
numRows, secs, numRows / secs, numRows - newData.length),
'Remove duplicates', -1);
}
【问题讨论】:
-
建立这些关系对于每个用户来说都是非常具体的,而且几乎不可能,请考虑
jane.doe@gmail.com和jdoe@gmail.com。我建议在收集电子邮件时使用主要/辅助电子邮件。 -
是的,同意 Phillip Thomas 的观点——我对此有一些经验,很难确定地消除潜在的重复(在 Phillip Thomas 中,例如 jdoe.gmail.com jane doe 或者它是 joe是吗?)最后我想出的最好办法是运行一个功能,提醒潜在的重复并让人类做出最终决定。
-
感谢@PhillipThomas,但有没有办法只捕获 jane.doe@email.com 和 doe.jane@email.com 变体?
-
不是真的:关键是你无法知道
jane.doe@email.com和doe.jane@email.com是否真的是同一个人。 -
@msanford,感谢您的来信。我假设在我的工作表中 99% 的情况下,这些地址直接发送到同一个收件箱。
标签: javascript google-sheets google-spreadsheet-api