Scala 拆分了两个未分开的单词

Scala split a 2 words which aren't seperated

我有一个语料库,其中包含像 applefruit 这样的词,它没有被任何我想做的分隔符分隔。因为这可能是一个非线性问题。我想传递一个自定义词典,仅当词典中的单词是语料库中单词的子串时才进行拆分。

如果我的字典只有 apple 和语料库中的 3 个单词 aaplefruitapplebananafruitbananafruit。输出应该类似于 apple , fruit apple, bananafruit, bananafruit.

注意我不是拆分 bananafruit,目的是通过拆分字典中提供的文本来加快处理速度。我正在使用 scala 2.x.

您可以根据以下模式进行正则表达式查找和替换:

(?=apple)|(?<=apple)

然后用逗号替换,两边用空格包围。我们可以试试:

val input = "bananaapplefruit"
val output = input.replaceAll("(?=apple)|(?<=apple)", " , ")
println(output)  // banana , apple , fruit

您可以将正则表达式与拆分一起使用:

scala> "foobarfoobazfoofoobatbat".split("(?<=foo)|(?=foo)")
res27: Array[String] = Array(foo, bar, foo, baz, foo, foo, batbat)

或者如果您的词典(and/or 个要拆分的字符串)有多个单词...

   val rx = wordList.map { w => s"(?<=$w)|(?=$w)" }.mkString("|")
   val result: List[String] = toSplit.flatMap(_.split(rx))