Dedup'ing в Spark (Scala), использующий проблему LSH с собственной приближенностьюJoin () - PullRequest
0 голосов
/ 20 мая 2019

Так что я пытаюсь найти и удалить все дубликаты из набора статей, прежде чем делать некоторые НЛП на корпусе.Я использую Spark 2.4 для обработки данных и LSH, поставляемый с SparkML

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

+--------------------+--------------------+--------------------+                
|            datasetA|            datasetB|     JaccardDistance|
+--------------------+--------------------+--------------------+
|[7, Donald Trump ...|[3, Donald Trump ...|                 0.0|
|[3, Donald Trump ...|[7, Donald Trump ...|                 0.0|
|[3, Donald Trump ...|[4,  Trump appear...|0.006849315068493178|
|[4,  Trump appear...|[7, Donald Trump ...|0.006849315068493178|
|[4,  Trump appear...|[3, Donald Trump ...|0.006849315068493178|
|[7, Donald Trump ...|[4,  Trump appear...|0.006849315068493178|
|[5, The Priminist...|[6, Theresa May h...|0.011627906976744207|
|[6, Theresa May h...|[5, The Priminist...|0.011627906976744207|
|[1, Theresa May h...|[6, Theresa May h...|0.023255813953488413|
|[6, Theresa May h...|[1, Theresa May h...|0.023255813953488413|
|[5, The Priminist...|[1, Theresa May h...| 0.03448275862068961|
|[1, Theresa May h...|[5, The Priminist...| 0.03448275862068961|
+--------------------+--------------------+--------------------+

(примечание: первое число - это идентификатор, а остальное - текст)

Это здорово, если мне не нужнокак-то хранить только одну копию дубликатов.

Есть идеи?

Игрушечный корпус, который я использовал

Кстати, кто-нибудь знает охороший токенизатор, который работает на большинстве европейских языков?SparkML очень прост, то есть «Некоторая цитата» становится ['' Некоторая ',' цитата "']: (

...