<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Подход к реализации методов разрешения сущностей в среде распределенных вычислений Hadoop/MapReduce</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>© Mikhail D. Islentyev</string-name>
          <email>mikhail.islentyev@gmail.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Lomonosov Moscow State University</institution>
          ,
          <addr-line>Moscow</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <fpage>21</fpage>
      <lpage>26</lpage>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>В различных областях науки наблюдается
экспоненциальный рост объема получаемых
экспериментальных данных. Сложность
использования таких данных увеличивается еще и
вследствие их естественной разнородности. Это
неизбежно приводит к необходимости
использования неоднородной, распределенной
информации, накопленной в течение значительного
периода наблюдений различными инструментами.</p>
      <p>
        Для анализа больших объемов данных
используются современные среды распределенных
вычислений, такие, как Hadoop/MapReduce [
        <xref ref-type="bibr" rid="ref14 ref19">14, 19</xref>
        ].
Такие среды имеют почти линейную
Труды XIX Международной конференции
«Аналитика и управление данными в областях с
интенсивным использованием данных»
(DAMDID/ RCDL’2017), Москва, Россия, 10–13
октября 2017 года
горизонтальную масштабируемость и высокую
отказоустойчивость. Основным достоинством
подобных сред является возможность анализировать
и обрабатывать разно-структурированные данные
(реляционные, JSON, XML, тексты и др.). При этом
возникает проблема интеграции данных,
извлекаемых из разно-структурированных
источников. Традиционно процесс интеграции
данных включает в себя следующие шаги:
унификация моделей данных, сопоставление схем,
разрешение сущностей [
        <xref ref-type="bibr" rid="ref16 ref6">6, 16</xref>
        ] и слияние данных [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
Остановимся подробней на этапе разрешения
сущностей.
      </p>
      <p>Данный этап нацелен на поиск записей в одном
или нескольких наборах данных, представляющих
собой один и тот же объект в реальном мире, или
сущность. Он ориентирован на решение таких задач,
как связывание записей, выявление и удаление
дубликатов, сопоставление связей и др.</p>
      <p>
        Весь процесс разрешения сущностей, в
соответствии с [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], можно разделить на следующие
этапы: подготовка данных; выбор мер сходства
значений; выбор метода сравнения пар записей;
определение ограничений.
      </p>
      <p>Данная работа сосредоточена на втором и третьем
этапах. Выбор мер сходства является одним из самых
важных этапов в процессе разрешения сущностей.
Важно выбрать меры, наиболее подходящие для
представленного набора данных, поскольку именно
на основе значений этих мер будет делаться вывод,
являются ли записи в паре совпадающими, то есть
относящимися к одной сущности, или же нет. И
поскольку большинство данных представлено в виде
строковых значений (имена, названия, адреса и т. д.),
особое внимание уделяется нами мерам сходства
строк. Среди методов сравнения пар записей
известны детерминированные методы, к которым
относятся метод взвешенной суммы и метод,
основанный на формулировании правил. Кроме того,
отдельно стоят методы разделения на блоки. Они не
входят в традиционный процесс разрешения
сущностей, однако могут значительно увеличить
скорость выполнения и производительность всего
процесса при помощи эффективного создания
небольших блоков, содержащих только
потенциально совпадающие записи.</p>
      <p>
        Нашей целью является разработка подхода к
реализации методов разрешения сущностей в среде
распределенных вычислений Hadoop/MapReduce.
Для непосредственной реализации мер и методов в
среде Hadoop/MapReduce был выбран язык высокого
уровня Jaql [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Jaql – это функциональный
декларативный язык запросов, который
предназначен для обработки больших наборов
данных. Он позволяет работать с
разноструктурированными данными, распределенной
файловой системой HDFS и, при необходимости, сам
переписывает высокоуровневые запросы в запросы
«низкого уровня», состоящие из MapReduce-задач.
      </p>
      <p>
        На языке Jaql реализован ряд мер сходства
строковых значений, алгоритмов сравнения пар
записей и разбиения записей на блоки, рассмотрены
некоторые идеи и особенности реализации.
Выбранный набор мер сходства строк обширен, и в
большинстве случаев его достаточно для задач
разрешения сущностей [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], однако реализация
позволяет определять собственные меры сходства, в
том числе и для значений, не являющимися
строковыми, в виде непосредственно функций на
Jaql или же в виде Java UDF (пользовательских
функций Java). Код реализации доступен в
gitрепозитории [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>В разделе 2 описаны меры сходства строковых
значений, приводятся примеры использования и
реализации некоторых мер и примеры задания и
использования компаратора для получения вектора
сравнения пары записей. В разделе 3 описаны
детерминированные методы сравнения пар записей и
показаны примеры их использования. В разделе 4
обсуждается тема разбиения на блоки для
уменьшения числа попарных сравнений и приведены
примеры их применения. Наконец, в разделе 5
показан пример полного процесса разрешения
сущностей в рамках реализованных мер и методов.
2 Меры сходства значений</p>
      <p>Ключевым моментом в процессе разрешения
сущностей является получение оценок сходства
значений соответствующих атрибутов двух
сравниваемых записей путем вычисления мер их
сходства. Полученные оценки формируют вектор
сравнения, на основе которого в дальнейшем
делаются выводы о совпадении или различии
рассматриваемой пары записей. Таким образом,
важно выбрать наиболее подходящие под
имеющиеся данные меры сходства.</p>
      <p>Подавляющее большинство значений атрибутов
представляет собой строки, и, кроме того, верное
определение сходства строк не всегда является
тривиальным действием, поэтому особое внимание
уделим мерам сходства именно строковых значений.
По своей природе их обычно делятся на следующие
группы:
• меры сходства на основе редактирования;
• меры сходства на основе разбиения на токены;
• гибридные меры сходства.</p>
      <p>Рассмотрим подробнее каждую группу.
2.1 Меры сходства на основе редактирования
Меры данного типа оперируют числом вставок,
удалений, замен и/или перестановок символов в
строке. Чем больше требуется таких операций для
преобразования одной строки к другой, тем менее
они похожи.</p>
      <p>
        Для реализации мер этой группы в основном
применяется метод динамического
программирования [
        <xref ref-type="bibr" rid="ref11 ref18">11, 18</xref>
        ]. Декларативные языки
программирования, к которым относится Jaql, не
предназначены для реализации подобных методов,
поэтому было решено воспользоваться
расширяемостью языка при помощи Java UDF.
      </p>
      <p>
        Каждая такая функция принимает два строковых
параметра (см. Программу 1). В данном примере
показан вызов функции расстояния Джаро–
Винклера [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] для строк “Dwayne” и “Duane”.
Программа 1 Вызов функции меры сходства на
основе редактирования на примере расстояния
Джаро–Винклера
import similarity;
similarity::jaroWinklerSim("Dwayne",
"Duane");
      </p>
      <p>
        Реализованные меры на основе редактирования:
расстояние Левенштейна [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], расстояние Дамерау–
Левенштейна [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], наибольшая общая
подпоследовательность [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], расстояние Джаро [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], расстояние
Джаро–Винклера.
2.2 Меры сходства на основе разбиения на токены
Принадлежащие к этой группе меры используют
разбиение строк на токены. Чаще всего применяют
два вида разбиения: разбиение на слова и разбиение
на n-граммы.
      </p>
      <p>Для расчета меры сходства набор токенов
представляют либо в качестве множества, и тогда
применяют меры сходства множеств, либо в качестве
вектора в многомерном пространстве, после чего
используют меры сходства векторов.</p>
      <p>
        Реализация данных мер подразумевает
нахождение пересечения двух наборов токенов, что
просто и эффективно реализуется на Jaql с помощью
встроенной функции join (см. Программу 2). В
качестве примера приведем реализацию
коэффициента Дайса [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]:
  
( ,  )=
  +  
где  ,  – сравниваемые строки,   ,   – число
токенов в строке  и  соответственно,   – число
совпадающих токенов в строках  и  .
2 
,
Программа 2 Реализации функции меры сходства
на основе разбиения на токены на примере
коэффициента Дайса
bagsIntersection = fn(lhs, rhs)
join lhs, rhs
where lhs.token == rhs.token
into {
lhs.token,
count: min([ lhs.count, rhs.count ])
};
diceSim = fn(lhs, rhs)
count(bagsIntersection(lhs, rhs)) *
2.0 / (count(lhs) + count(rhs));
Функции мер данной группы принимают строки,
предварительно разбитые на токены.
      </p>
      <p>
        Список реализованных мер сходства на основе
разбиения на токены: коэффициент Дайса,
коэффициент Жаккара [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], коэффициент перекрытия [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ],
косинусный коэффициент [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], статистическая мера
TFIDF [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
2.3 Гибридные меры сходства
      </p>
      <p>
        К таким мерам сходства относятся меры,
оперирующие наборами токенов и применяющие к
сравнению токенов меры на основе редактирования.
Такие меры отличают повышенная точность
оценивания сходства, но в то же время увеличенное
время выполнения [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Поскольку названные меры
также используют наборы токенов, реализация этих
методов тоже была выполнена на языке Jaql. Были
реализованы следующие гибридные меры сходства:
сходство Монг-Элкана [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] и статистическая мера
SoftTFIDF [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
2.4 Вектор сравнения
      </p>
      <p>Вектор сравнения, как было сказано ранее,
формируется из оценок сходства для значений
атрибутов пар записей. В реализации используется
компаратор в виде записи, атрибутами которой
являются имена оценок (используются далее в
методах сравнения пар записей), а значениями –
функции мер сходства (см. Программу 3).
Программа 3 Пример задания компаратора
import similarity;
addressComparator = fn(lhs, rhs)
similarity::jaccardSim(
lhs.address -&gt; similarity::nGramBag(),
rhs.address -&gt; similarity::nGramBag()
является использование среднего значения всех
оценок сходства из вектора сравнений или же их
взвешенной суммы, после чего необходимо задать
пороговое значение, определяющее совпадение или
различие записей, например (веса и порог здесь и
далее выбраны случайно):
0.2 * addressScore + 0.8 * nameScore &gt; 0.85
В реализации данного метода вектор весов также
представляет собой запись с теми же именами
атрибутов, что и у компаратора, значения которого и
являются весами (см. Программу 6).
Программа 6 Пример метода взвешенной суммы
import</p>
      <p>resolution::classifier::weightedSum as ws;
vector -&gt; ws::classifier({
addressScore: 0.2,
nameScore: 0.8
);</p>
      <p>"rhs": 0.9
}};
vector -&gt; rb::classifier(rules);
Даже такое небольшое количество правил
требует построения достаточно громоздкого
двоичного дерева выражений. Для облегчения
формулирования и применения правил был
реализован синтаксический анализатор в виде Java
UDF, позволяющий получить дерево выражений из
строкового выражения (см. Программу 8).
Программа 8 Пример разбора строкового
выражения правил
import resolution::classifier::ruleBased as
rb::parseRules(
"typeScore = 1.0 &amp; " +
"(nameScore &gt; 0.7 | addressScore &gt; 0.9) |
"nameScore &gt; 0.9"
);
Результатом данного вызова функции будет
дерево, эквивалентное вышеописанному.
4 Методы разделения на блоки</p>
      <p>С увеличением числа данных полное попарное
сравнение становится крайне неэффективным.
Действительно, полное попарное сравнение набора
данных, состоящих из n записей, потребует  ( ⁡– ⁡1)/2,
или  ( 2), сравнений. Для уменьшения числа пар
записей, которые необходимо сравнить,
используются методы разделения на блоки. Такие
методы отвергают заведомо несовпадающие пары
записей и создают блоки, состоящие из пар, которые
потенциально могут совпадать.</p>
      <p>
        Для рассмотрения были выделены следующие
методы: метод исключительного разделения на
блоки [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], метод индексации биграмм [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] и метод на
основе кластеризации с помощью canopy [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ].
Реализация этих методов разделена на две части:
одна – для задачи выявления и удаления дубликатов
(в одном наборе данных), вторая – для задачи
связывания записей (для двух наборов данных).
4.1 Метод исключительного разделения
      </p>
      <p>Самым простым является метод
исключительного разделения на блоки. Идея метода
состоит в том, что набор данных делится на
непересекающиеся блоки по блочному ключу. Такой
ключ может являться значением какого-либо
атрибута записи или же комбинацией нескольких
значений или даже их частью.</p>
      <p>Реализация данного метода подразумевает
группировку записей по блочному ключу, что в
языке Jaql возможно совершить с помощью
встроенной функции group by. Применение такого
метода требует задания функции, генерирующей
блочный ключ (см. Программу 9).
Программа 9 Пример метода исключительного
разделения для двух наборов данных</p>
      <p>import
resolution::linkage::blocking::simple;
data1 = read(...);
data2 = read(...);
data1Key = fn(value)</p>
      <p>value.lastname -&gt; substring(0, 4);
data2Key = fn(value)</p>
      <p>value.surname -&gt; substring(0, 4);
simple::blocking(data1, data2,</p>
      <p>data1Key, data2Key
);
Преимуществом этого метода является высокая
скорость его исполнения. К недостаткам же можно
отнести сложность выбора критерия, а также то, что
при не совсем оптимальном его выборе реально
совпадающие записи могут попасть в различные
блоки, тем самым они никогда не будут
сравниваться.
4.2 Индексация биграмм</p>
      <p>
        Следующий метод, называемый методом
индексации биграмм, позволяет осуществлять
приближенное разделение на блоки. Его алгоритм
описан в [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Реализация метода сопряжена с
получением инвертированного индекса и
группировкой, с чем Jaql прекрасно справляется,
используя встроенные функции group by и expand
unroll. Для проведения такого разбиения необходимо
помимо функции блочного ключа подать пороговое
значение (см. Программу 11).
Программа 11 Пример метода индексации биграмм
для одного набора данных
      </p>
      <p>import
resolution::deduplication::blocking::bigram;
data = read(...);
dataKey = fn(value)
value.address</p>
      <p>-&gt; strSplit("\\s+") -&gt; index(0);
data -&gt; bigram::blocking(dataKey, 0.3);
4.3 Кластеризация canopy</p>
      <p>Иной подход к разделению на блоки реализует
метод, основанный на кластеризации с помощью
canopy. Данный метод кластеризации опирается на
возможность для случайной записи из набора данных
эффективно найти все близлежащие записи при
помощи какой-либо приближенной функции
расстояния, требующей небольших вычислительных
затрат. После проведения кластеризации каждый
canopy-кластер формирует свой блок.</p>
      <p>Данный алгоритм кластеризации имеет вариант
реализации непосредственно на MapReduce, поэтому
реализован он был с помощью явного задания
MapReduce-задачи на языке Jaql. Для применения
метода разделения, основанного на такой
кластеризации, необходимо задать функцию
расстояния и два пороговых значения (см.
Программу 12).
Программа 12 Пример метода кластеризации
canopy для одного набора данных
import similarity;
import
resolution::deduplication::blocking::canopy;
data = read(...);
distanceFunction = fn(lhs, rhs)
1.0 - similarity::minLengthMongeElkanSim(
lhs.name -&gt; similarity::wordBag(),
rhs.name -&gt; similarity::wordBag()
);
data -&gt; canopy::blocking(</p>
      <p>
        distanceFunction, 0.08, 0.16
);
Метод индексации биграмм и метод на основе
кластеризации с помощью canopy генерируют
пересекающиеся блоки, что снижает вероятность
разделения на разные блоки совпадающих записей.
Также эти методы имеют хороший и близкий друг к
другу результат по качеству разделения при
правильном выборе функций и порогов, что
отражено в [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
4 Пример использования
      </p>
      <p>Для примера рассмотрим применение процесса
разрешения сущностей для одного набора данных
(см. Программу 13).
Программа 13 Пример процесса разрешения
сущностей для одного набора данных
import similarity;
import
resolution::classifiers::weightedSum
as
ws;
import resolution::deduplication;
import
resolution::deduplication::blocking::canopy;
data = read(...);
distanceFunction = fn(lhs, rhs)
1.0 - similarity::minLengthMongeElkanSim(
lhs.name -&gt; similarity::wordBag(),
rhs.name -&gt; similarity::wordBag()
);
blockingInfo = canopy::createInfo(</p>
      <p>distanceFunction, 0.08, 0.16
);
addressComparator = fn(lhs, rhs)
similarity::jaccardSim(
lhs.address -&gt; similarity::nGramBag(),
rhs.address -&gt; similarity::nGramBag()
Данные после чтения будут разделены на блоки с
помощью метода кластеризации canopy, затем блоки
преобразуются в пары записей, для каждой такой
пары будет вычислен их вектор сравнения на основе
трех переданных функций мер, по этому вектору
метод взвешенной суммы определит, являются ли
записи в паре совпадающими или нет, после чего
будут возвращены только те пары, записи в которых
были определены как совпадающие.
5 Заключение и дальнейшая работа
Мы описали меры сходства строковых значений,
детерминированные методы сравнения пар записей и
разработали подход к их реализации в среде
распределенных вычислений Hadoop/MapReduce с
использованием высокоуровневого языка
программирования Jaql. Также описаны и
реализованы методы по разделению пар записей на
блоки для значительного снижения числа попарных
сравнений и увеличения производительности.</p>
      <p>Набор реализованных функций мер сходства
строковых значений достаточно обширен, однако
реализация позволяет определять собственные меры
сходства, в том числе и для значений, не
являющимися строковыми, в виде непосредственно
функций на Jaql или же в виде Java UDF.</p>
      <p>
        В дальнейшем планируется реализовать
поддержку ограничений [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] и метод корреляционной
кластеризации [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] для задачи выявления и удаления
дубликатов, а также рассмотреть возможность
реализации иных методов сравнения пар записей в
среде Hadoop, таких, как вероятностные методы [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] и
методы, основанные на машинном обучении [
        <xref ref-type="bibr" rid="ref1 ref3">1, 3</xref>
        ].
Поддержка
      </p>
      <p>Работа выполнена при поддержке РФФИ (гранты
15-29-06045, 16-07-01028).
Литература</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Arasu</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Götz</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kaushik</surname>
          </string-name>
          , R.:
          <article-title>On Active Learning of Record Matching Packages</article-title>
          .
          <source>Proc. of the 2010 ACM SIGMOD Int. Conf. on Management of Data</source>
          , pp.
          <fpage>783</fpage>
          -
          <lpage>794</lpage>
          . ACM, New York (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Baxter</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Christen</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Churches</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>A Comparison of Fast Blocking Methods for Record Linkage</article-title>
          .
          <source>Proc. of the KDD-03 Workshop on Data Cleaning, Record Linkage and Object Consolidation</source>
          , pp.
          <fpage>25</fpage>
          -
          <lpage>27</lpage>
          . ACM, New York (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Bellare</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Iyengar</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Parameswaran</surname>
            ,
            <given-names>A.G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rastogi</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          :
          <article-title>Active Sampling for Entity Matching</article-title>
          .
          <source>Proc. of the 18th ACM SIGKDD Int. Conf. on Knowledge Discovery and Data Mining</source>
          , pp.
          <fpage>1131</fpage>
          -
          <lpage>1139</lpage>
          . ACM, New York (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Beyer</surname>
            ,
            <given-names>K.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ercegovac</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gemulla</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Balmin</surname>
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Eltabakh</surname>
            ,
            <given-names>M.Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kanne</surname>
            ,
            <given-names>C.C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Özcan</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shekita</surname>
            ,
            <given-names>E.J.:</given-names>
          </string-name>
          <article-title>Jaql: A Scripting Language for Large Scale Semistructured Data Analysis</article-title>
          .
          <source>Proc. of the VLDB Endowment</source>
          ,
          <volume>4</volume>
          (
          <issue>12</issue>
          ), pp.
          <fpage>1272</fpage>
          -
          <lpage>1283</lpage>
          (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Bleiholder</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Naumann</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <source>Data Fusion. ACM Computing Surveys</source>
          ,
          <volume>41</volume>
          (
          <issue>1</issue>
          ), pp.
          <volume>1</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>1</lpage>
          :
          <fpage>41</fpage>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Christen</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Data Matching - Concepts and Techniques for Record Linkage</article-title>
          , Entity Resolution, and Duplicate Detection. Springer, Heidelberg (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Cohen</surname>
            ,
            <given-names>W.W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ravikumar</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fienberg</surname>
            ,
            <given-names>S.E.</given-names>
          </string-name>
          :
          <article-title>A Comparison of String Distance Metrics for NameMatching Tasks</article-title>
          .
          <source>Proc. of the 2003 Int. Conf. on Information Integration on the Web</source>
          , pp.
          <fpage>73</fpage>
          -
          <lpage>78</lpage>
          . AAAI Press (
          <year>2003</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Elsner</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schudy</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          :
          <article-title>Bounding and Comparing Methods for Correlation Clustering Beyond ILP</article-title>
          .
          <source>Proc. of the Workshop on Integer Linear Programming for Natural Language Processing</source>
          , pp.
          <fpage>19</fpage>
          -
          <lpage>27</lpage>
          . Association for Computational Linguistics,
          <string-name>
            <surname>Stroudsburg</surname>
          </string-name>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Fellegi</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Sunter</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>A Theory for Record Linkage</article-title>
          .
          <source>J. of the American Statistical Association</source>
          ,
          <volume>64</volume>
          (
          <issue>328</issue>
          ), pp.
          <fpage>1183</fpage>
          -
          <lpage>1210</lpage>
          (
          <year>1969</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Getoor</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Machanavajjhala</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Entity Resolution for Big Data</article-title>
          .
          <source>Proc. of the 19th ACM SIGKDD Conf. on Knowledge Discovery and Data Mining</source>
          , p.
          <fpage>1527</fpage>
          .
          <string-name>
            <surname>ACM</surname>
          </string-name>
          , New York (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Hirschberg</surname>
            ,
            <given-names>D.S.:</given-names>
          </string-name>
          <article-title>A Linear Space Algorithm for Computing Maximal Common Subsequences</article-title>
          .
          <source>Communications of the ACM</source>
          ,
          <volume>18</volume>
          (
          <issue>6</issue>
          ), pp.
          <fpage>341</fpage>
          -
          <lpage>343</lpage>
          (
          <year>1975</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Islentyev</surname>
            ,
            <given-names>M.D.</given-names>
          </string-name>
          <article-title>: mislen/jaql-entity-resolution: Entity Resolution Methods on Jaql (</article-title>
          <year>2017</year>
          ). https://github.com/mislen/jaql-entity-resolution
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Jaro</surname>
            ,
            <given-names>M.A.</given-names>
          </string-name>
          :
          <article-title>Advances in Record Linkage Methodology as Applied to Matching the 1985 Census of Tampa, Florida</article-title>
          .
          <source>J. of the American Statistical Association</source>
          ,
          <volume>84</volume>
          (
          <issue>406</issue>
          ), pp.
          <fpage>414</fpage>
          -
          <lpage>420</lpage>
          (
          <year>1989</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Maitrey</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jha</surname>
            ,
            <given-names>C.K.</given-names>
          </string-name>
          :
          <article-title>MapReduce: Simplified Data Analysis of Big Data</article-title>
          .
          <source>Procedia Computer Science</source>
          ,
          <volume>57</volume>
          , pp.
          <fpage>563</fpage>
          -
          <lpage>571</lpage>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>McCallum</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nigam</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ungar</surname>
            ,
            <given-names>L.H.</given-names>
          </string-name>
          :
          <article-title>Efficient Clustering of High-Dimensional Data Sets with Application to Reference Matching</article-title>
          .
          <source>Proc. of the 6th ACM SIGKDD Int. Conf. on Knowledge Discovery and Data Mining</source>
          , pp.
          <fpage>169</fpage>
          -
          <lpage>178</lpage>
          . ACM, New York (
          <year>2000</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Naumann</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Herschel</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>An Introduction to Duplicate Detection</article-title>
          . Morgan and Claypool Publishers (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Vovchenko</surname>
            ,
            <given-names>A.E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kalinichenko</surname>
            ,
            <given-names>L.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kovalev</surname>
          </string-name>
          , D.Y.:
          <article-title>Methods of Entity Resolution and Data Fusion in the ETL-Process and their Implementation in the Hadoop Environment</article-title>
          .
          <source>Informatics and Applications</source>
          ,
          <volume>8</volume>
          (
          <issue>4</issue>
          ), pp.
          <fpage>94</fpage>
          -
          <lpage>109</lpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Wagner</surname>
            ,
            <given-names>R.A.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Fischer</surname>
            ,
            <given-names>M.J.</given-names>
          </string-name>
          <article-title>The String-to-String Correction Problem</article-title>
          .
          <source>J. of the ACM</source>
          ,
          <volume>21</volume>
          (
          <issue>1</issue>
          ), pp.
          <fpage>168</fpage>
          -
          <lpage>173</lpage>
          (
          <year>1974</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>White</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>Hadoop: The Definitive Guide</article-title>
          , 4th
          <string-name>
            <surname>Edition. O'Reilly Media</surname>
          </string-name>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>