Как удалить диакритические знаки в фреймах pyspark? - PullRequest
0 голосов
/ 15 января 2019

Мне интересно, как удалить диакритические знаки в Pyspark Dataframe с помощью Python2. Мне нужно что-то вроде

from pyspark.sql.session import SparkSession
from pyspark import SparkContext
import pyspark.sql.functions as sf
from pyspark.sql.types import StringType

df = sc.parallelize([(u'pádlo', 1), (u'dřez', 4)]).toDF(['text', 'num'])

def remove_diacritics(s):
    return unidecode.unidecode(s)

rem_udf = sf.udf(remove_diacritics, StringType())

df.select(rem_udf('text'))

К сожалению, модуль unidecode недоступен в нашем кластере.

Есть ли какое-нибудь естественное решение, которое мне не хватает, кроме ручной замены всех возможных символов? Обратите внимание, что ожидаемый результат составляет [padlo, drez]

1 Ответ

0 голосов
/ 03 февраля 2019

Вы можете использовать аналог SQL translate для замены символов на основе двух «словарей»:

from pyspark.sql.session import SparkSession
from pyspark import SparkContext
import pyspark.sql.functions as sf
from pyspark.sql.types import StringType

charsFrom = 'řá' #fill those strings with all diactricts
charsTo   = 'ra' #and coresponding latins

df = sc.parallelize([(u'pádlo', 1), (u'dřez', 4)]).toDF(['text', 'num'])
df = df.select(sf.translate('text', charsFrom, charsTo),'num')

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

...