Инструменты для соответствия [закрытому] имени/адресным сведениям

tl; dr: Нет! Функции стрелок и декларации функций / выражения не являются эквивалентными и не могут быть заменены вслепую. Если функция, которую вы хотите заменить, not использует this, arguments и не вызывается с new, тогда да.


Как это часто бывает: это зависит. Функции Arrow имеют другое поведение, чем декларации / выражения функций, поэтому давайте сначала рассмотрим различия:

1. Функции Lexical this и arguments

не имеют собственных привязок this или arguments. Вместо этого эти идентификаторы разрешаются в лексической области, как и любая другая переменная. Это означает, что внутри функции стрелки this и arguments относятся к значениям this и arguments в окружающей среде, функция стрелки определена в (т.е. «снаружи» стрелка )

В случае выражения функции, this относится к объекту, который был создан внутри createObject. В функциональном случае стрелки this относится к this самого createObject.

Это делает функции стрелок полезными, если вам нужно получить доступ к this текущей среды:

// currently common pattern
var that = this;
getData(function(data) {
  that.data = data;
});

// better alternative with arrow functions
getData(data => {
  this.data = data;
});

Обратите внимание, что это также означает, что не можно установить функцию стрелки this с .bind или .call.

Если вы не очень знакомы с this, рассмотрим чтение

2. Функции стрелок не могут быть вызваны с помощью new

ES2015 различает функции, доступные call , и функции, которые являются конструкцией . Если функция конструируется, ее можно вызвать с помощью new, то есть new User(). Если функция является вызываемой, ее можно вызвать без new (т. Е. Вызов нормальной функции).

Функции, созданные посредством деклараций / выражений функций, являются конструктивными и вызываемыми. Функции стрелок (и методы) являются только вызываемыми. class конструкторы только конструктивны.

Если вы пытаетесь вызвать функцию, не вызываемую вызовом, или построить неконструируемую функцию, вы получите ошибку времени выполнения.


Зная это, мы можем указать следующее.

Сменный:

  • Функции, которые не используют this или arguments.
  • Функции, которые используются с .bind(this)

Не сменный:

  • Функции конструктора
  • Функция / методы, добавленные к прототипу (поскольку они обычно используют функции this)
  • Variadic (если они используют arguments (см. ниже))

Давайте рассмотрим это более подробно с помощью ваших примеров:

Функция конструктора

Это не будет работать, потому что функции стрелок нельзя вызвать с помощью new. Продолжайте использовать объявление / выражение функции или используйте class.

Способы прототипа

Скорее всего нет, потому что методы прототипа обычно используют this для доступа к экземпляру. Если они не используют this, вы можете его заменить. Однако, если вы в первую очередь заботитесь о сжатом синтаксисе, используйте class с его синтаксисом сжатого метода:

class User {
  constructor(name) {
    this.name = name;
  }

  getName() {
    return this.name;
  }
}

Методы объекта

Аналогично для методов в объектном литерале. Если метод хочет ссылаться на сам объект через this, продолжайте использовать функциональные выражения или используйте новый синтаксис метода:

const obj = {
  getName() {
    // ...
  },
};

Обратные вызовы

Это зависит. Вы должны обязательно заменить его, если вы наложили внешний this или используете .bind(this):

// old
setTimeout(function() {
  // ...
}.bind(this), 500);

// new
setTimeout(() => {
  // ...
}, 500);

Но: Если код, вызывающий обратный вызов, явно устанавливает this на определенное значение , как это часто бывает с обработчиками событий, особенно с jQuery, и обратный вызов использует this (или arguments), вы не можете использовать функцию стрелки!

Variadic функции

Поскольку функции стрелок не имеют собственных arguments, вы не можете просто заменить их функцией стрелки. Однако ES2015 вводит альтернативу использованию arguments: параметр rest .

// old
function sum() {
  let args = [].slice.call(arguments);
  // ...
}

// new
const sum = (...args) => {
  // ...
};

Связанный вопрос:

Дополнительные ресурсы:

14
задан fgregg 30 April 2017 в 14:45
поделиться

6 ответов

Каждая из крупнейших компаний-разработчиков программного обеспечения, которые активны в этом пространстве, предлагает решения, которые обрабатывают парсинг имени и адреса, стандартизацию данных, записывают дедупликацию или соответствие, соединение/слияние записи, права наследника, и так далее. Они все немного дороги, все же.

, Например, собственным решением Oracle для этой проблемы является продукт" Качество данных Oracle (ODQ) для Интегратора данных Oracle (ODI) ", который является частью их стека Fusion Middleware. Поскольку имя подразумевает, ODQ требует ODI (т.е. это - дополнительный модуль, который лицензируется отдельно и зависит от ODI).

решение IBM Websphere (полученный посредством их приобретения Ascential) включает QualityStage.

Бизнес-объекты, теперь компания SAP, имеет Качество данных продукт под его комплектом Управления корпоративной информацией (EIM).

Другие главные бренды качества данных включают Dataflux (компания SAS) и программное обеспечение Триллиума (компания Harte-Hanks)

, Gartner Group выпускает ежегодный Волшебный Квадрант для решений качества данных. Поставщики, которые оценивают хорошо в этих Волшебных Квадрантах обычно, делают весь отчет доступным онлайн для зарегистрированных пользователей на их веб-сайте ( пример 1 , пример 2 ).

7
ответ дан 1 December 2019 в 12:40
поделиться

В моем текущем задании у нас есть много проблем целостности данных. Мы пытаемся "вычистить" данные, прежде чем они будут загружены для обеспечения качества. Мы в настоящее время используем Melissa Data для вычищения имен, адресов и электронных писем. Это делает довольно хорошую стандартизацию задания вещи, прежде чем мы загрузим его. Тем путем мы можем избежать дублирующихся данных.

кроме того, SQL Server Integration Services (я знаю Вас, использует Oracle), имеет компонент, который делает "нечеткое" соответствие на строках, позволяя Вам найти близкое соответствие, а не прямое непосредственное соответствие. Это называют Нечетким Поиском. В основном это дает Вам счет, говоря Вам, как близко к соответствию два исходных данных... Можно затем установить threshholds для сообщения этого, как близко это должно быть должно считать это соответствием (т.е. в 80% или безотносительно).

В прошлом я также использовал SOUNDEX, чтобы определить, были ли имена аналогичными в определении дубликатов. Существует много реализаций SOUNDEX.

Удача.

2
ответ дан 1 December 2019 в 12:40
поделиться

Термин для проблемы, которую Вы надеетесь решать, является "Соединением Записи".

я не могу рекомендовать определенный инструмент. Сделайте поиск "рекордного программного обеспечения соединения" или "программного обеспечения очистки слиянием", и с небольшим исследованием необходимо смочь найти что-то, что удовлетворяет потребности.

я смог найти одно решение с открытым исходным кодом, названное Febrl. Этот инструмент был первоначально разработан для области биомедицинского исследования, которое объясняет имя "Свободно расширяемая биомедицинская рекордная связь". Можно читать больше об этом здесь: "Параллельные Крупномасштабные Методы для Высокоэффективной Рекордной Связи"

Для хорошего обзора проблем/решений, вовлеченных в рекордное соединение, читают приблизительно "Слияние/Чистка и Дублирующееся Обнаружение" .

2
ответ дан 1 December 2019 в 12:40
поделиться

Уроки, Извлеченные из использования FirstLogic. (Другие продукты должны быть аналогичными.) Для контекста, мы получали файлы от десятков источников, и каждый будет в другом формате. Мы должны были знать, кто должен был быть добавлен к нашей базе данных, кто должен был быть обновлен, и кто просто должен был быть отмечен как "в списке".

  1. я ожидал, что программное обеспечение посмотрит на весь файл и решит, что - говорят - если столбец A имел фамилии в 98 из 100 строки затем столбец Необходимость быть столбцом фамилии. Это не верно; каждая запись обрабатывается индивидуально.

  2. , Если Вы знаете точно, какие данные находятся в том, какое поле затем можно сказать программному обеспечению, что и это обработает его. Но если Вы не всегда уверены, что Вы более обеспечены просто предоставление его целая строка и разрешение программному обеспечению понять его. Примером этого является поле фамилии, которое содержит что-то как "Smith Младший MD". Если Вы объявите, что это столбец фамилии, то это предположит, что фамилией является "Smith Младший MD". Но если Вы передадите "John Smith Jr MD" и позволите программному обеспечению изобразить его, то это правильно определит все биты.

  3. Некоторые вещи, которые казались очевидными, не были. Например, из поля FirstLogic не предполагает, что запятая означает "фамилию, имя". Это на самом деле имеет большой большой список фамилий и большой большой список имен, таким образом, это полагает, что может просто проигнорировать запятую. У нас последовательно были проблемы с людьми как "John, Thomas". И иногда это запутывалось бы, потому что то, что было похоже на очевидную фамилию нам, было на самом деле именем на испанском или чем-то.

  4. трудно использовать систему для добавления фиктивных данных. Если у Вас будут люди, названные вещами как "Тестовая Учетная запись" или "TBD", то они не будут обработаны вообще - FirstLogic выбросит запись, потому что он не нашел битов данных, которые он распознал.

  5. Настройка системы возможна, но не так легка, как торговый персонал заставляет ее звучать. Существует миллион опций и пользовательских файлов и словарей. Необходимо будет инвестировать время, чтобы понять, как оно работает, если Вы ожидаете мочь настроить его. Это похоже на RDBMS или инструмент ETL. Это не волшебный черный квадрат.

  6. Это также имеет тонну функций качества данных, которые помогают выровнять по ширине покупку программного обеспечения, но которые требуют специализированного усилия учиться и применяться.

  7. инструменты действительно не разработаны для обработки списка против основного файла; они были созданы для операций очистки слиянием. Это возможно (мы делаем его), но это требует, чтобы Вы рассматривали свою базу данных список (который требует, чтобы Вы извлекли все живые записи в плоский файл). Кроме того, больше управления, которое Вы хотите, по которому идут записи, где (т.е. если имя является 80%-м соответствием и первыми двумя цифрами почтового индекса, идентичны, то это - вероятно, тот же человек, и т.д.), сложное Ваша пакетная обработка будет.

  8. Наконец, мы поняли, что обрабатывающий "John Smith" и обрабатывающая "Annabelle DiGiovanni" являются совсем другими зверями, когда Вы пытаетесь определить, являются ли два человека в различных адресах на самом деле тем же. Можно ли подстроить программное обеспечение так, чтобы редким именам дали больше веса на соответствии, чем общие названия, но у кого есть время? Наше соответствие процессу приблизительно на 80% точно, и мы были удовлетворены ручной обработкой остающихся 20%.

не думают о нем как об инструменте, чтобы автоматически сделать соответствие. Думайте о нем как об инструменте, чтобы позволить Вашим человеческим процессорам данных быть более продуктивными. Тем путем Вы настроили его так, чтобы при ударе 80%-й точности, это был звучный успех, а не за исключением метки.

4
ответ дан 1 December 2019 в 12:40
поделиться

Я сделал что-то вроде этого в списках приема членства для страховой компании. К счастью у нас был SSN's для определения основного участника, но я должен был решить, были ли зависимые новыми или существующими (по имени один). Я попробовал soundex алгоритм как часть решения, но это, казалось, не отвечало всем требованиям, потому что это, казалось, отобразило слишком много различных имен к тому же самому (и много семейств имеют тенденцию называть своих детей с подобными звучащими именами). Я закончил тем просто, что использовал (я думаю), первые четыре буквы зависимого имени как уникальный идентификатор и вызов его "достаточно хороший". Я не знаю, как я обработал бы семейство George Foreman :-)

0
ответ дан 1 December 2019 в 12:40
поделиться

Я видел Dataflux в действии, и, по словам нашего "звездного" аналитика данных, это самый точный инструмент для "кластеризации" (как называет это Dataflux), который он нашел для связывания имен людей и компаний. Однако он довольно дорогой.

0
ответ дан 1 December 2019 в 12:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: