【问题标题】:Natural Language Processing in Ruby [closed]Ruby 中的自然语言处理 [关闭]
【发布时间】:2010-11-03 05:16:39
【问题描述】:

我希望进行一些句子分析(主要用于 Twitter 应用程序)并推断出一些一般特征。 Ruby 中有没有很好的自然语言处理库来处理这类事情?

类似于Is there a good natural language processing library,但对于 Ruby。我更喜欢非常笼统的东西,但任何线索都值得赞赏!

【问题讨论】:

  • 为什么不试试 wit.ai?这是一项免费的外部服务。我写了一个 gem 来包装它们的功能:wit_bot

标签: ruby artificial-intelligence nlp


【解决方案1】:

三个优秀成熟的NLP包是Stanford Core NLPOpen NLPLingPipe。 Ruby 绑定到Stanford Core NLP 工具(GPL 许可)以及OpenNLP 工具(Apache 许可)。

在更具实验性的方面,我维护了一个在 GPL 下发布的 Text Retrieval, Extraction and Annotation Toolkit(Treat),它为几乎所有存在于 Ruby 的 NLP 相关 gem 提供了一个通用 API。下面的 Treat 特性列表也可以作为与 Ruby 1.9 兼容的稳定自然语言处理 gem 的一个很好的参考。

  • 文本分段器和标记器(punkt-segmentertactful_tokenizersrx-englishscalpel
  • 用于英语、法语和德语的自然语言解析器以及用于英语的命名实体提取 (stanford-core-nlp)。
  • 词的变形和共轭(linguistics),词干(ruby-stemmeruea-stemmerlingua等)
  • WordNet 接口 (rwordnet)、词性标注器 (rbtaggerengtagger 等)
  • 语言(whatlanguage)、日期/时间(chronickronicnickel)、关键字(lda-ruby)提取。
  • 带有索引和全文搜索的文本检索 (ferret)。
  • 命名实体提取 (stanford-core-nlp)。
  • 具有决策树 (decisiontree)、MLP (ruby-fann)、SVM (rb-libsvm) 和线性分类 (tomz-liblinear-ruby-swig) 的基本机器学习。
  • 文本相似度指标(levenshtein-ffifuzzy-string-matchtf-idf-similarity)。

不包含在 Treat 中,但与 NLP 相关:hotwater(字符串距离算法)、yomu(用于读取 .doc、.docx、.pages、.odt、.rtf、.pdf 的 Apache Tiki 绑定器) , graph-rank(GraphRank 的实现)。

【讨论】:

    【解决方案2】:

    Ruby Linguistics 有一些东西和一些来自其中的链接,尽管它似乎与NLTK 用于 Python 的内容相去甚远。

    【讨论】:

      【解决方案3】:

      您始终可以使用 jruby 并使用 java 库。

      编辑:在 jvm 上本地执行 ruby​​ 并轻松利用 java 库的能力是 ruby​​ 爱好者的一大优势。这是一个不错的选择,在这种情况下应该考虑。

      Which NLP toolkit to use in JAVA?

      【讨论】:

      【解决方案4】:

      我发现一篇优秀的文章详细介绍了 Ruby here 中的一些 NLP 算法。这包括词干分析器、日期时间解析器和语法解析器。

      【讨论】:

      • +1 将我单独指向慢性...
      【解决方案5】:

      TREAT——文本检索和注释工具包——是我所知道的最全面的 Ruby 工具包:https://github.com/louismullie/treat/wiki/

      【讨论】:

        【解决方案6】:

        我在 GitHub 上维护了一个 Ruby Natural Language Processing resources(库、API 和演示文稿)列表,其中涵盖了此处其他答案中列出的库以及一些其他库。

        【讨论】:

          【解决方案7】:

          还可以考虑使用 SaaS API,例如 MonkeyLearn。您可以使用机器学习轻松训练文本分类器并通过 API 进行集成。有一个Ruby SDK 可用。

          除了创建自己的分类器外,您还可以选择预先创建的模块进行情绪分析、主题分类、语言检测等。 我们还有关键字提取和实体等提取器,我们将继续添加更多公共模块。

          其他不错的功能:

          • 您有一个 GUI 来创建/测试算法。
          • 算法在我们的云计算平台上运行得非常快。
          • 您可以与 Ruby 或任何其他编程语言集成。

          【讨论】:

            【解决方案8】:

            试试这个

            https://github.com/louismullie/stanford-core-nlp

            关于 stanford-core-nlp gem

            此 gem 提供与 Stanford Core NLP 包的高级 Ruby 绑定,这是一套用于标记化、句子分割、词性标记、词形还原以及英语、法语和德语解析的自然语言处理工具。该软件包还为英语提供命名实体识别和共指解析。

            http://nlp.stanford.edu/software/corenlp.shtml 演示页面 http://nlp.stanford.edu:8080/corenlp/

            【讨论】:

              【解决方案9】:

              您需要更具体地了解这些“一般特征”是什么。

              在 NLP 中,一个句子的“一般特征”可能意味着一百万种不同的东西——情感分析(即说话者的态度)、基本词性标注、人称代词的使用、句子是否包含主动或被动动词,动词的时态和语态是什么...

              我不介意您是否含糊其辞地描述它,但如果我们不知道您在问什么,我们不太可能具体帮助您。

              我的一般建议是,尤其是对于 NLP,您应该使用最适合该工作的工具,而不是限制自己使用特定的语言。将自己限制在一种特定的语言上对于一些通用工具无处不在的任务是可以的,但 NLP 不是其中之一。

              使用 Twitter 的另一个问题是大量的句子会以奇怪而美妙的方式半生不熟或被压缩——大多数 NLP 工具都没有经过培训。为了在这方面提供帮助,NUS SMS Corpus 包含“学生收集的大约 10,000 条 SMS 消息”。由于类似的限制和用法,分析这可能有助于您使用 Twitter 进行探索。

              如果您更具体,我会尝试列出一些有用的工具。

              【讨论】:

                【解决方案10】:

                我会查看 Mark Watson 的免费书籍Practical Semantic Web and Linked Data Applications, Java, Scala, Clojure, and JRuby Edition。他有关于使用 java、clojure、ruby 和 scala 的 NLP 的章节。他还提供了您需要的资源的链接。

                【讨论】:

                  【解决方案11】:

                  对于那些寻求更轻量级和易于实现的人来说,这个选项对我来说效果很好。

                  https://github.com/yohasebe/engtagger

                  【讨论】:

                    猜你喜欢
                    • 2012-08-07
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-09-09
                    • 2011-01-15
                    • 1970-01-01
                    • 2012-03-04
                    • 1970-01-01
                    相关资源
                    最近更新 更多