4

我正在尝试将一个段落分成一系列句子,以使每个句子组都保持在 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."]

是否有任何 Rails 宝石可以帮助我实现这一目标?我查看了html_slicer,但我不确定它是否可以处理上面的示例。

4

1 回答 1

1

有两个重要的任务可以实现你所追求的:

  1. 将字符串拆分成句子
  2. 并在每个句子中特别注意标点符号。

我认为第一个从头开始并不容易实现,因此最好的选择可能是使用自然语言处理库,前提是您的“第三方语言处理服务”没有这样的功能。我不知道有任何“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)轻松解决。但是,对标点符号有额外的要求。我不知道任何现有的实现可以实现与您完全相同的目标。也许你必须想出自己的解决方案。

我唯一的想法是首先对每个句子进行自动换行,然后用标点符号分割每一行,然后再将它们连接起来,但要限制长度。我想知道这是否可行。

于 2013-06-04T11:15:23.973 回答