从Rails中的字符串解析/提取文本?

问题描述

| 我在Rails中有一个字符串,例如“这是一条Twitter消息。#books《战争与和平》,列夫·托尔斯泰。我喜欢这本书! 这是使用正则表达式并将\“#books \”之间的文本提升为\ ..“的问题吗? 如果消息没有结构怎么办,例如: \“这是一条推特讯息,#列奥·托尔斯泰的《战争与和平》一书,我很喜欢这本书!\”或 \“这是Twitter消息。我喜欢列夫·托尔斯泰#books写的《战争与和平》 \” 我如何能可靠地将短语“托尔斯泰的战争与和平”拉出来而又不知道事前的短语。 是否有任何宝石,方法等可以帮助我做到这一点? 至少,您会称呼我要做什么?这将帮助我在Google上搜索解决方案。我已经尝试过对\“解析\\”进行几次搜索,但是没有运气。 -编辑- 基于@rogeliog的建议,我将添加以下内容: 我可以忍受#books后面的垃圾文字,但之前没有。我尝试了“匹配。(/#books。* /)\”-结果在这里:www.rubular.com/r/gM7oSZxF5M。 但是如何捕获结果6? (例如,当某人将#books放在句子的末尾时)? 我可以用正则表达式进行if-then吗?就像是:   如果[#books在消息末尾],      然后[从#books的最后10个单词开始],      其他[匹配。(/#books。* /)] 如果您提供正则表达式,请使用rubular.com通过永久链接发布解决方案     

解决方法

        我认为您正在尝试解析一些非常复杂的变体。您是否拥有所有书名的数据库?这将有助于分配。 要从第一个示例中获得标题(\“这是一条Twitter消息。#books《战争与和平》,作者是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位于末尾,则将为您提供#books之后的任何内容 我真的没有更好的主意,希望对您有用,让我知道:)     ,        我认为您需要的是自然语言处理。这是一个非常大的领域,具有许多技术和应用程序。特别是对于Ruby,您可能需要查看Ruby Linguistics项目。 祝您好运,解析和处理自然语言并非易事。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...