4

问题是微不足道的,在某些语言中使用字符串删除变音符号。例如,使用“téléphone”会产生结果“telephone”。

在Java中我可以使用这样的方法:

 public static String removeAccents(String str){
    return Normalizer.normalize(str, Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}

它工作正常,但在scala中它没有......我尝试了如下代码:

val str = Normalizer.normalize("téléphone",Normalizer.Form.NFD)
val exp = "\\p{InCombiningDiacriticalMarks}+".r
exp.replaceAllIn(str,"")

它不起作用!

我想,我在 Scala 中使用 Regex 时遗漏了一些东西,所以任何帮助都将不胜感激。

4

2 回答 2

0

您可以使用它,创建一个函数来返回stripAccents.

val spark=SparkBase.getSparkSession()

val sc=spark.sparkContext
import spark.implicits._

val str = stripAccents("téléphone")
println(str)

val str2 = stripAccents("SERNAQUE ARGÜELLO NORMA ELIZABETH")
println(str2)

case class Fruits(name: String, quantity: Int)
val sourceDS = Seq(("YÁBAR ARRIETA JENSON", 1), ("SERNAQUE ARGÜELLO NORMA ELIZABETH", 2)).toDF("text","num")

val check = udf((colValue: String) => {
  stripAccents(colValue)
})

sourceDS.select(col("text"),check(col("text"))).show(false)

->输出

+---------------------------------+---------------------------------+
|text                             |UDF(text)                        |
+---------------------------------+---------------------------------+
|YÁBAR ARRIETA JENSON             |YABAR ARRIETA JENSON             |
|SERNAQUE ARGÜELLO NORMA ELIZABETH|SERNAQUE ARGUELLO NORMA ELIZABETH|
+---------------------------------+---------------------------------+
于 2019-09-12T18:08:15.057 回答
0

我使用 Normalizer 遇到了同样的问题。从Apache Commons StringUtils中找到了 stripAccents 形式的解决方案,它从字符串中删除了变音符号。

 val str = stripAccents("téléphone")
 println(str)

这将产生“电话”。希望这对某人有帮助!

于 2017-11-24T10:37:05.780 回答