Текст, содержащий точную строку из списка строк - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь найти все тексты, которые содержат хотя бы одно ключевое слово в списке приведенных ключевых слов. Это похоже на ответ: Строка, содержащая точную подстроку из списка подстрок

Однако мне нужно расширить ее, чтобы она могла работать с несколькими словами, например, сопоставляя слова «соединенные штаты» ине просто «США».


val df = spark.createDataFrame(Seq(
  (1, "usa of america"),
  (2, "usa"),
  (4, "united states of america"),
  (5, "states"),
  (6, "united states")
)).toDF("id", "country")
df.registerTempTable("df")

val valid_names = Set("usa", "united states")

def udf_check_country(valid_words: Set[String]) = {  udf {(words: String) => words.split(" ").exists(valid_words.contains) } }

var df2 = df.withColumn("udf_check_country", udf_check_country(valid_names)($"country"))
df2.registerTempTable("df2")

df2.show()


Где я получаю новый столбец с ошибкой в ​​последнем случае 'United States'.


+---+--------------------+-----------------+
| id|             country|udf_check_country|
+---+--------------------+-----------------+
|  1|      usa of america|             true|
|  2|                 usa|             true|
|  4|united states of ...|            false|
|  5|              states|            false|
|  6|       united states|            false|
+---+--------------------+-----------------+

Как я могу заставить его работать для ключевых слов с несколькими словами?

1 Ответ

0 голосов
/ 01 ноября 2019

В зависимости от ваших правил, вы можете просто добавить еще одно условие, повторяющее ваше valid_names по всей строке, например:

valid_words.exists(words.contains) || words.split(" ").exists(valid_words.contains)

Это позволит id 4 и 6 также вернуть true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...