Python 模糊匹配pyspark数据帧字符串中的单词

Python 模糊匹配pyspark数据帧字符串中的单词,python,nlp,pyspark,pyspark-sql,fuzzy-search,Python,Nlp,Pyspark,Pyspark Sql,Fuzzy Search,我有一些数据,其中列“X”包含字符串。我正在使用pyspark编写一个函数,其中传递了一个搜索词,并且过滤掉了列“X”字符串中不包含子字符串搜索词的所有行。该函数还必须允许单词拼写错误,即模糊匹配。 我已经将数据加载到pyspark数据框中,并使用NLTK和FuzzyWzzy python库编写了一个函数,如果字符串包含搜索词,则返回True或False 我的问题是无法将函数正确映射到数据帧。 我处理这个问题的方法有误吗?我应该尝试通过某种SQL查询进行模糊匹配,还是使用RDD 我是pyspar

我有一些数据,其中列“X”包含字符串。我正在使用pyspark编写一个函数,其中传递了一个搜索词,并且过滤掉了列“X”字符串中不包含子字符串搜索词的所有行。该函数还必须允许单词拼写错误,即模糊匹配。 我已经将数据加载到pyspark数据框中,并使用NLTK和FuzzyWzzy python库编写了一个函数,如果字符串包含搜索词,则返回True或False

我的问题是无法将函数正确映射到数据帧。 我处理这个问题的方法有误吗?我应该尝试通过某种SQL查询进行模糊匹配,还是使用RDD

我是pyspark的新手,所以我觉得这个问题以前肯定有人回答过,但我在任何地方都找不到答案。我从未使用SQL进行过任何NLP,也从未听说过SQL能够模糊匹配子字符串

更新#1

该函数如下所示:

wf = WordFinder(search_word='some_substring')
result1 = wf.find_word_in_string(string_to_search='string containing some_substring or misspelled some_sibstrung')
result2 = wf.find_word_in_string(string_to_search='string not containing the substring')
结果1是正确的


结果2为假

一个简单的方法是使用内置的
levenstein
函数。比如说,

(
    spark.createDataFrame([("apple",), ("aple",), ("orange",), ("pear",)], ["fruit"])
    .withColumn("substring", func.lit("apple"))
    .withColumn("levenstein", func.levenshtein("fruit", "substring"))
    .filter("levenstein <= 1")
    .toPandas()
)

如果你想使用普通Python函数,比如NLTK包中的函数,你必须定义一个UDF,它接受一个字符串并返回一个布尔值。

如果没有,你希望得到什么样的答案?@Piintesky我已经添加了上面的方法。为类和方法添加实际代码是没有意义的,因为它只是一些nltk标记化器和lemmitizer以及模糊模糊部分_比率。这与这个问题完全无关。问题在于如何将函数应用于pyspark数据帧,是否可以使用布尔函数过滤行,以及sql或python是否是解决此问题的最佳方法。
   fruit substring  levenstein
0  apple     apple           0
1   aple     apple           1