1

Rails に「これは Twitter メッセージです。#books War & Peace by Leo Tolstoy.I love this book!」という文字列があり、テキストを解析して、「War & Peace by Leo Tolstoy」のような特定のフレーズのみを抽出したいと考えています。レオ・トルストイ」。

これは、正規表現を使用して「#books」間のテキストを「.」に持ち上げることの問題ですか?

メッセージに構造がない場合はどうなるでしょうか。たとえば、「これは Twitter のメッセージです #books War & Peace by Leo Tolstoy I love this book!」などです。または「これは Twitter メッセージです。Leo Tolstoy の War & Peace #books」という本が大好きです。

これを行うのに役立つgem、メソッドなどはありますか?

少なくとも、私がやろうとしていることを何と呼びますか? Google で解決策を検索するのに役立ちます。「解析」でいくつかの検索を試みましたが、うまくいきませんでした。

--- 編集 --- @rogeliog の提案に基づいて、以下を追加します。

#books の後に来るゴミのテキストは我慢できますが、それ以前は何もありません。「match.(/#books.*/)」を試してみました -- 結果はこちら: www.rubular.com/r/gM7oSZxF5M .

しかし、どうすれば結果 #6 をキャプチャできますか? (例: #books を文末に置くとき)?

正規表現で if-then を実行する方法はありますか? 何かのようなもの:

[#books がメッセージの末尾にある] 場合、

[#books の前の最後の 10 語を取得]、

そうでなければ [マッチ.(/#books.*/)]

正規表現を提供する場合は、rubular.com を使用してパーマリンク経由でソリューションを投稿してください。

4

2 に答える 2

2

あなたが必要としているのは自然言語処理だと思います。それは非常に大きな分野であり、多くの技術と応用があります。特にRubyでは、 Ruby言語学プロジェクトを見たいと思うかもしれません。

幸運を祈ります。自然言語の解析と処理は簡単なことではありません。

于 2011-06-25T00:44:55.383 に答える
0

かなり複雑なバリエーションを解析しようとしていると思います。すべての本のタイトルが記載されたDBはありますか?それは割り当てに役立ちます。

最初の例(「これはTwitterメッセージです。#booksWar&Peace by Leo Tolstoy。私はこの本が大好きです!」)からタイトルを取得するには、次のようにするだけです。

"This is a Twitter message. #books War & Peace by Leo Tolstoy. I love this book".match(/#book.*\./).to_s.gsub("#books",'')

それは戻ってきます:「レオ・トルストイによる戦争と平和」。

#booksが最後にあるかどうかに応じて、if elseステートメントを実行する場合は、次のことができます。

if text.match(/#books$/)
  puts text.match(/([^\s]*\s){10}(#books$)/).to_s
else
  puts text.match(/#books.*/).to_s.gsub("#books",'')
end

これにより、#booksが最後にある場合は、本の前にある最後の10語が得られ、最後にない場合は、#booksの後にあるものが何でも得られます。

私は本当に良い考えを持っていません、それがあなたのために働くことを願っています、私に知らせてください:)

于 2011-06-25T00:46:46.567 に答える