【问题标题】:Rails gem to break a paragraph into series of sentencesRails gem 将一个段落分成一系列句子
【发布时间】:2013-05-28 13:22:54
【问题描述】:

我正在尝试将一个段落分成一系列句子,以便每个句子组保持在 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,但我不确定它是否可以处理上面的示例。

【问题讨论】:

  • 您能否提供有关您为什么要这样做的任何背景信息?这有点奇怪,所以我猜你需要推出自己的解决方案 - 但从长远来看,如果我们知道你在尝试什么,可能会有一种不同的方法可能会更好去实现。
  • @drosboro:我需要集成第三方语言处理服务,一次最多需要 N 个字符。当我提供分成句子的文本时,我从这项服务中获得了最好的结果。即使我描述的问题没有最终解决方案,我想知道是否有任何可以重复使用的执行段落/句子/分词的 gem。实现这一点本身似乎并非易事。

标签: ruby-on-rails ruby rubygems split slice


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

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

【讨论】:

  • 谢谢,@M。椎名。回复:句子拆分——这正是我最终要做的。除了Stanford CoreNLP 之外,还有Apache OpenNLP 似乎也很受欢迎。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
相关资源
最近更新 更多