ruby-on-rails - Rails gem 将一段分成一系列句子

标签 ruby-on-rails ruby rubygems split slice

我正在尝试将一个段落拆分为一系列句子,以便每个句子组保持在 N 个字符以下。如果单个句子的长度超过 N,则应将其拆分为以标点符号或空格作为分隔符的 block 。

例如,如果 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 gem 可以帮助我实现这一目标?我看了html_slicer ,但我不确定它能否处理上面的示例。

最佳答案

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

  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 等现有实现应该可以轻松解决。 但是,对于标点符号有额外的要求。我不知道有任何现有的实现可以实现与您完全相同的目标。也许您必须提出自己的解决方案。

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

关于ruby-on-rails - Rails gem 将一段分成一系列句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16879013/

相关文章:

ruby-on-rails - 使用Spork时,我同时拥有rails_helper和spec_helper?

ruby-on-rails - 如何根据属于第一个模型的另一个模型的属性查询一个模型?

ruby-on-rails - 使用 rails 4 认证的根路由进行设计无法正常工作

ruby-on-rails - 如何让 Rails 应用程序记住用户输入而不将数据存储到数据库中

ruby-on-rails - Capybara + Poltergeist with Database-cleaner 找不到 FactoryGirl 记录

javascript - 一些代码让我在这个 gem 中感到困惑 ----backbone-bootstrap-rails

ruby-on-rails - 使用超链接在 rails 中发出 POST 请求

ruby-on-rails - Ruby IDE : any worth looking at?

ruby-on-rails - 处理 Rails 2.1.x 中的 RoutingError 的最佳方法?

ruby-on-rails - 在 OS X 10.9 升级和自制软件安装后重新安装 Ruby