1

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

apple 如果我的字典在语料库中只有和 3 个单词aaplefruit, applebananafruit, bananafruit. 输出应该看起来像 apple , fruit apple, bananafruit, bananafruit

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

4

2 回答 2

2

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

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

或者,如果您的字典(和/或要拆分的字符串)包含多个单词...

   val rx = wordList.map { w => s"(?<=$w)|(?=$w)" }.mkString("|")
   val result: List[String] = toSplit.flatMap(_.split(rx))
于 2021-03-31T11:13:46.827 回答
1

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

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

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

val input = "bananaapplefruit"
val output = input.replaceAll("(?=apple)|(?<=apple)", " , ")
println(output)  // banana , apple , fruit
于 2021-03-31T10:26:36.027 回答