我有一个由评论组成的数据,在单词之间有特殊的字符。我想加一个空格。
例如,
星星之火( NLP -> Spark)NLP机器-学习->机器-学习
下面是我的数据
temp = spark.createDataFrame([
(0, "This is 5years of Spark)world 5-6"),
(1, "I wish Java-DL could use case-classes"),
(2, "Data-science is cool"),
(3, "Machine")
], ["id", "words"])
+---+-------------------------------------+
|id |words |
+---+-------------------------------------+
|0 |This is 5years of Spark)world 5-6 |
|1 |I wish Java-DL could use case-classes|
|2 |Data-science is cool |
|3 |Machine |
+---+-------------------------------------+我使用了下面的代码来完成这个任务,但是它不起作用。
temp_1 = temp.withColumn('words', F.regexp_replace('words', r'(?<! )(?=[.,!?()\/\-\+\'])|(?<=[.,!?()\/\-\+\'])(?! )', '$1 $2 $3'))期望产出:
+---+-----------------------------------------+
|id |words |
+---+-----------------------------------------+
|0 |This is 5years of Spark ) world 5 - 6 |
|1 |I wish Java - DL could use case - classes|
|2 |Data - science is cool |
|3 |Machine |
+---+-----------------------------------------+发布于 2022-07-25 12:28:11
您可以使用
\b[^\w\s]\b|_代之以$0。见regex演示。
如果不认为下划线是一个特殊字符,只需使用\b[^\w\s]\b来匹配单词字符和空格字符之间的字符以外的任何字符。注意单词字符包括下划线。
如果两边都必须有字母或数字,请用(?<=[^\W_])[^\w\s](?=[^\W_])|_替换单词边界。只查找字母之间的特殊字符:(?<=[^\W\d_])[^\w\s](?=[^\W\d_])|_或(?<=\p{L})[^\w\s](?=\p{L})|_。
https://stackoverflow.com/questions/73109192
复制相似问题