Ruby文本分析

13

有没有适用于文本分析的 Ruby Gem,可以进行诸如单词频率、模式检测等操作(最好能理解法语)?

3个回答

9
单词频率的泛化是语言模型,例如一元组(=单词频率)、二元组(=单词对的频率)、三元组(=单词三元组的频率),以此类推:n-grams。
你应该寻找现有的语言模型工具包——在这里重新发明轮子不是一个好主意。
有一些标准工具包可用,例如来自CMU Sphinx团队和HTK的工具包。
这些工具包通常用C编写(为了速度!因为你必须处理大量的语料库),并生成标准输出格式ARPA n-gram文件(这些通常是文本格式)。
请查看以下线程,其中包含更多详细信息和链接: 构建openears兼容的语言模型 一旦您使用这些工具包之一生成了您的语言模型,您将需要一个Ruby Gem,使语言模型在Ruby中可访问,或者您需要将ARPA格式转换为您自己的格式。
adi92的帖子列出了更多Ruby NLP资源。
您还可以搜索“ARPA语言模型”以获取更多信息。
最后但同样重要的是,检查一下谷歌的在线N-gram工具。他们基于数字化的书籍构建了n-gram,这些书籍也可用于法语和其他语言!

非常感谢您的回答,我会查看这些资源。但是这两个答案都倾向于鼓励我管理自己的例程。也许可以将它们缩小一点。 - gemp
要创建关于n-gram的可靠统计数据,您需要一个或多个非常大的文本数据训练语料库...例如,一段时间内所有WSJ文章的收集可能是这样的语料库。处理如此大量的数据非常耗时。我总体上喜欢Ruby,但对于这个任务,专用的C工具可能更适合。一旦您累积了统计数据,就可以在Ruby程序中使用生成的N-Gram——这很占用内存,但不占用时间。 - Tilo
这些训练语料库通常是特定于领域的。确保你有大量这样的文本数据可用,否则你的语言模型将会过度拟合。这意味着它不能推广到新数据,基本上是无用的。 - Tilo
我的要求并不是很苛刻。我只需要对文本进行基本分析。例如,最常用的单词、音节计数、统计比较等。我不需要上下文、语义或其他任何东西。只需要基本的词汇理解能力,以便能够识别复数形式、简单的拼写错误、单词相似性等。 - gemp
还有模式。就像成语或者组合词,比如“美国”、“République française”(我提到过法国了吗?)你的评论非常有帮助,谢谢。 - gemp

4

The Mendicant Bug: NLP Resources for Ruby包含许多有用的Ruby NLP链接。
我曾经尝试使用Ruby语言学工具很久,记得遇到了很多问题... 我不建议轻易尝试。

如果你的大部分文本分析涉及ngrams和朴素贝叶斯等内容,我建议你自己动手。Ruby有相当不错的基本库和对正则表达式的强大支持,所以这应该不会太麻烦,并且你可以更容易地适应解决问题的特殊要求。

就像Stanford解析器gem一样,可以在Ruby中使用解决问题的Java库,但这可能会很棘手,因此可能不是解决问题的最佳方式。


1
是的,我在搜索时看到了Java的东西。看起来很有趣,但是我是Ruby的粉丝^^ 希望有一些简单的东西可以节省我开发简单分析、统计等所需的时间。感谢您的回答。 - gemp

0
我为此编写了words_counted宝石。您可以在rubywordcount.com上看到演示。它具有您提到的许多分析功能,以及更多功能。API文档完善,可在Github的自述文件中找到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接