我正在尝试生成两个带有HTML标记的文本之间可读性强的类似维基百科的差异。我使用diff-lcs,第一步是将字符串(字符数组)分成句子数组,但保留它们的标点符号。
"I am a lion. Hear me roar! Where is my cub? Never mind, found him.".magic_split(/[.?!]/)
# => "I am a lion." "Hear me roar!" "Where is my cub?" "Never mind, found him."
这应该能解决问题。
"I am a lion. Hear me roar! Where is my cub? Never mind, found him.".gsub(/[.?!]/, '\1|').split('|')
除了gsub似乎无法插入字符
.?!
,它返回的是这个:"I am a lion| Hear me roar| Where is my cub| Never mind, found him|"
什么是最简单的非破坏性分割方式?即保留用于进行分割的字符。
text.scan(/[^\.!?]+[\.!?]+/).map(&:strip)
唯一的问题是如何捕获没有句号的最后一句话:"我是一只狮子。听我咆哮!你叫什么名字?不要评判我",会漏掉最后的"不要评判我"。 - michaelsking1993text.scan(/[^\.!?]+[\.!?]+|[^\.!?]+.\z/).map(&:strip)
(可能有更优雅的方法,但这个是有效的)。输入:“我是一只狮子...听我咆哮!!你叫什么名字?不要评判我” --> 输出:["我是一只狮子...", "听我咆哮!!", "你叫什么名字?", "不要评判我"]
- michaelsking1993