4

各文グループが N 文字未満になるように、段落を一連の文に分割しようとしています。1 つの文が 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 gem はありますか? html_slicerを見ましたが、上記の例を処理できるかどうかはわかりません。

4

1 に答える 1

1

あなたが求めているものを達成するための2つの重要なタスクがあります:

  1. 文字列を文に分割する
  2. 句読点に細心の注意を払って各文をワードラップします。

最初のものはゼロから実装するのは簡単ではないと思うので、「サードパーティの言語処理サービス」にそのような機能がない場合は、自然言語処理ライブラリを使用するのが最善の策かもしれません。あなたの要件を満たす「レールの宝石」はわかりません。

以下は、 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."]

2 番目の問題はワード ラップに似ており、ワード ラップの問題である場合、ActionView::Helpers::TextHelper.word_wrap などの既存の実装を使用して簡単に解決できます。ただし、句読点に関しては追加の要件があります。あなたとまったく同じ目標を達成するための既存の実装は知りません。たぶん、あなたはあなた自身の解決策を考え出さなければなりません。

私の唯一のアイデアは、最初に各文をワードラップし、次に各行を句読点で分割してから、もう一度断片を結合することですが、長さには制限があります. これが機能するかどうかは疑問ですが。

于 2013-06-04T11:15:23.973 に答える