Rails gem将一段打破成一系列句子

我试图将一个段落分成一系列句子,使每个句子组保持在N个字符之下。 如果单个句子长于N,则应将其拆分为带有标点符号或空格作为分隔符的块。

例如,如果N = 50,则接下来的字符串

“Lorem ipsum,consectetur elit.Donec ut ligula.Sed acumsan posuere tristique.Sed et tristique sem.Aenean sollicitudin,sapien sodales elementum blandit.Fusce urna libero blandit eu aliquet ac rutrum vel tortor。”

会成为

[“Lorem ipsum,consectetur elit.Donec ut ligula。”,“Sed acumsan posuere tristique。”,“Sed et tristique sem。”,“Aenean sollicitudin”,“sapien sodales elementum blandit。”,“Fusce urna libero blandit eu aliquet ac rutrum vel“,”tortor。“]

有没有可以帮助我实现这一目标的轨道gem? 我看了html_slicer ,但我不确定它能处理上面的例子。

有两个非平凡的任务来实现你的目标:

  1. 将一个字符串分成句子
  2. 并且在对每个句子进行包装时要特别注意标点符号。

我认为第一个不容易从头开始实现,所以你最好的选择可能只是使用自然语言处理库,前提是你的“第三方语言处理服务”没有这样的function。 我不知道任何“rails gem”符合您的要求。

这里只是一个使用stanford-core-nlp将字符串拆分成句子的玩具示例。

require 'stanford-core-nlp' text = "Lorem ipsum, consectetur elit. Donec ut ligula. Sed acumsan posuere tristique. Sed et tristique sem. Aenean sollicitudin, sapien sodales elementum blandit. Fusce urna libero blandit eu aliquet ac rutrum vel tortor." pipeline = StanfordCoreNLP.load(:tokenize, :ssplit) a = StanfordCoreNLP::Annotation.new(text) pipeline.annotate(a) sentenses = a.get(:sentences).to_a.map &:to_s # Map with to_s if you want an array of sentence string. # => ["Lorem ipsum, consectetur elit.", "Donec ut ligula.", "Sed acumsan posuere tristique.", "Sed et tristique sem.", "Aenean sollicitudin, sapien sodales elementum blandit.", "Fusce urna libero blandit eu aliquet ac rutrum vel tortor."] 

第二个问题类似于自动换行,如果它确实是一个自动换行问题,它应该可以使用ActionView :: Helpers :: TextHelper.word_wrap等现有实现轻松解决。 但是,对标点符号有额外的要求。 我不知道任何现有的实现方式可以实现与您完全相同的目标。 也许你必须提出自己的解决方案。

我唯一的想法是首先对每个句子进行自动换行,然后用标点符号分割每一行,然后再次加入各个部分,但长度有限制。 我想知道这是否会奏效。