数字 pyspark 或 NLP 之间的划分方式如何



我想在数据帧的一列中进行多重拆分。 例:

s = "Cras mattis MP the -69661/69662;69663 /IS4567"

如何获得:

s = ['Cras', 'mattis', 'MP', 'the', '69661', '69662', '69663', 'IS4567' ]

谢谢

使用 SparkSQL 的内置函数 sentences(( 和 flatten(( 的一种方式 [需要 spark 2.4.0+ forflatten((]:

from pyspark.sql.functions import expr
df.withColumn('new_s', expr('flatten(sentences(s))')).show(truncate=False)    
#+---------------------------------------------+----------------------------------------------------+
#|s                                            |new_s                                               |
#+---------------------------------------------+----------------------------------------------------+
#|Cras mattis MP the -69661/69662;69663 /IS4567|[Cras, mattis, MP, the, 69661, 69662, 69663, IS4567]|
#+---------------------------------------------+----------------------------------------------------+

句子((从Apache Hive文档中做了什么:

将自然语言文本字符串标记为单词和句子,其中每个句子在适当的句子边界处中断,并作为单词数组返回。"lang"和"locale"是可选参数。例如,句子('你好!你好吗?返回 ( ("你好", "那里"(, ("如何", "是", "你"( (。

您可以使用采用正则表达式模式拆分数据的拆分函数。

import pyspark.sql.functions as f
df.withColumn('ns', f.split('s', "[^a-zA-Z0-9']+")).show(10,False)
+---------------------------------------------+----------------------------------------------------+
|s                                            |ns                                                  |
+---------------------------------------------+----------------------------------------------------+
|Cras mattis MP the -69661/69662;69663 /IS4567|[Cras, mattis, MP, the, 69661, 69662, 69663, IS4567]|
+---------------------------------------------+----------------------------------------------------+

注意:"[^a-zA-Z0-9']+"将处理基本的英文字符 但是如果要包含特殊字符,则可以使用泛型p{L}而不是a-zA-Z"喜欢""[^\p{L}0-9']+"

最新更新