我想看看一個字串列是否作為一個完整的單詞包含在另一列中。很少有方法像使用這里contains描述的或使用描述這里。array_contains
第一種方法在以下邊緣情況下失敗:
--------- -----------------------
|candidate| sentence |
--------- -----------------------
| su |We saw the survivors. |
--------- -----------------------
su應該作為單獨的單詞而不是作為sentence列的純子字串來查找。
當候選詞是復合詞時,第二種方法會失敗。一個例子是:
---------------- ------------------------
|candidate | sentence |
---------------- ------------------------
| Roman emperor | He was a Roman emperor.|
---------------- ------------------------
第二種方法在這里失敗了,因為它將句子列轉換為一個標記陣列:[He, was, a, Roman, emperor]并且它們都不等于Roman emperor.
有沒有辦法解決這個問題?
uj5u.com熱心網友回復:
這可能仍然有邊緣情況,但我希望你能得到一些想法。我會使用regex_extract將候選人與句子進行匹配。
首先,我將候選轉換為正則運算式(即,將空格轉換為\s),然后使用regex_extract單詞邊界(\b)。
df = (df.withColumn('regex', F.regexp_replace(F.col('candidate'), ' ', '\\\s'))
.withColumn('match', F.expr(r"regexp_extract(sentence, concat('\\b', regex, '\\b'), 0)")))
結果
------------- ----------------------- -------------- -------------
| candidate| sentence| regex| match|
------------- ----------------------- -------------- -------------
| su| We saw the survivors.| su| |
|Roman emperor|He was a Roman emperor.|Roman\semperor|Roman emperor|
------------- ----------------------- -------------- -------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488837.html
