我正在寻找一些句子分析(主要用于 twitter 应用程序)并推断出一些一般特征。在 Ruby 中是否有任何好的自然语言处理库来处理这类事情?
类似于Is there a good natural language processing library but for Ruby。我更喜欢非常笼统的东西,但任何线索都值得赞赏!
我正在寻找一些句子分析(主要用于 twitter 应用程序)并推断出一些一般特征。在 Ruby 中是否有任何好的自然语言处理库来处理这类事情?
类似于Is there a good natural language processing library but for Ruby。我更喜欢非常笼统的东西,但任何线索都值得赞赏!
三个优秀且成熟的 NLP 包是Stanford Core NLP、Open NLP和LingPipe。有与斯坦福核心 NLP工具(GPL 许可)以及OpenNLP工具(Apache 许可)的 Ruby 绑定。
在更具实验性的方面,我维护了一个在 GPL 下发布的文本检索、提取和注释工具包(Treat),它为几乎所有存在于 Ruby 的 NLP 相关 gem 提供了一个通用 API。下面的 Treat 特性列表也可以作为与 Ruby 1.9 兼容的稳定自然语言处理 gem 的一个很好的参考。
punkt-segmenter
, tactful_tokenizer
, srx-english
, scalpel
)stanford-core-nlp
) 的命名实体提取。linguistics
),词干(ruby-stemmer
, uea-stemmer
,lingua
等)rwordnet
)、词性标注器 ( rbtagger
,engtagger
等)whatlanguage
)、日期/时间(chronic
、kronic
、nickel
)、关键字(lda-ruby
)提取。ferret
)。stanford-core-nlp
)。decisiontree
)、MLP ( ruby-fann
)、SVM ( rb-libsvm
) 和线性分类 ( tomz-liblinear-ruby-swig
) 的基本机器学习。levenshtein-ffi
, fuzzy-string-match
, tf-idf-similarity
)。不包括在 Treat 中,但与 NLP 相关:hotwater(字符串距离算法)、yomu(用于读取 .doc、.docx、.pages、.odt、.rtf、.pdf 的 Apache Tiki 绑定器)、graph-rank(一种实现GraphRank)。
Ruby Linguistics有一些东西和其中的一些链接,尽管它似乎与NLTK用于 Python 的东西没有任何相似之处。
您始终可以使用 jruby 并使用 java 库。
编辑:在 jvm 上本地执行 ruby 并轻松利用 java 库的能力对于 rubyists 来说是一大优势。这是一个不错的选择,在这种情况下应该考虑。
我在这里找到了一篇优秀的文章,详细介绍了 Ruby 中的一些 NLP 算法。这包括词干分析器、日期时间解析器和语法解析器。
TREAT——文本检索和注释工具包——是我所知道的最全面的 Ruby 工具包:https ://github.com/louismullie/treat/wiki/
我在 GitHub 上维护了一个Ruby 自然语言处理资源(库、API 和演示文稿)列表,其中涵盖了此处其他答案中列出的库以及一些其他库。
还可以考虑使用MonkeyLearn等 SaaS API 。您可以使用机器学习轻松训练文本分类器并通过 API 进行集成。有一个Ruby SDK可用。
除了创建自己的分类器外,您还可以选择预先创建的模块进行情绪分析、主题分类、语言检测等。我们还有关键字提取和实体等提取器,我们将继续添加更多公共模块。
其他不错的功能:
试试这个
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/
您需要更具体地了解这些“一般特征”是什么。
在 NLP 中,一个句子的“一般特征”可能意味着一百万种不同的东西——情感分析(即说话者的态度)、基本词性标记、人称代词的使用、句子是否包含主动或被动动词、什么是动词的时态和语态...
我不介意您是否对描述含糊不清,但是如果我们不知道您在问什么,那么我们就不太可能专门为您提供帮助。
我的一般建议是,尤其是对于 NLP,您应该使用最适合该工作的工具,而不是限制自己使用特定的语言。将自己限制在一种特定的语言上对于在任何地方都实现通用工具的某些任务来说是很好的,但 NLP 不是其中之一。
与 Twitter 合作的另一个问题是大量的句子会以奇怪而美妙的方式半生不熟或被压缩——大多数 NLP 工具都没有经过培训。为了在这方面提供帮助,国大短信语料库由“学生收集的大约 10,000 条短信”组成。由于类似的限制和使用,分析这可能有助于您使用 Twitter 进行探索。
如果您更具体,我会尝试列出一些有用的工具。
对于那些寻求更轻量级和更容易实现的人来说,这个选项对我来说效果很好。
我会查看 Mark Watson 的免费书籍Practical Semantic Web and Linked Data Applications, Java, Scala, Clojure, and JRuby Edition。他有关于使用 java、clojure、ruby 和 scala 的 NLP 的章节。他还提供了您需要的资源的链接。