我有一些数据,其中列“X”包含字符串。我正在编写一个函数,其中传递一个search_word,并且在列'X‘字符串中不包含子字符串search_word的所有行都被过滤掉。该函数还必须允许单词拼写错误,即模糊匹配。我已经将数据加载到pyspark中,并使用NLTK和fuzzywuzzy库编写了一个函数,如果字符串包含search_word,则返回True或False。
我的问题是,我不能正确地将函数映射到dataframe。我是不是不正确地处理这个问题?我应该尝试通过某种SQL查询来进行模糊匹配,还是使用RDD呢?
我对火种很陌生,所以我觉得这个问题以前肯定有人回答过,但我在任何地方都找不到答案。我从未对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')result1是真的
result2是假的
发布于 2018-01-03 21:26:23
一个简单的方法是使用内置的levenstein函数。例如,
(
spark.createDataFrame([("apple",), ("aple",), ("orange",), ("pear",)], ["fruit"])
.withColumn("substring", func.lit("apple"))
.withColumn("levenstein", func.levenshtein("fruit", "substring"))
.filter("levenstein <= 1")
.toPandas()
)返回
fruit substring levenstein
0 apple apple 0
1 aple apple 1如果您想使用普通的Python函数,就像NLTK包中的东西一样,您必须定义一个接受字符串并返回布尔值的UDF。
https://stackoverflow.com/questions/48074642
复制相似问题