如何在文本正文中找到单词?

时间:2013-11-04 05:02:47

标签: ruby-on-rails ruby

我正在进行一些文本处理,我有兴趣根据单词和/或短语的频率查找和评分文本段落,理想地使用Ruby。

问题的一个例子是:我有“苹果”,“香蕉”,“水果沙拉”和“橙子”。这个列表很可能是几千个单词和/或短语。

我有一大堆要搜索的文字:

  

我有一套苹果,苹果电脑和Apple.com上的帐户,但从来没有水果沙拉。为什么他们从未发布过像橘子那样翻倍的苹果电脑超出了我。

这会吐出一个说:

的数组
Apple 4
Orange 1
Banana 0
Fruit salad 1

理想情况下,我可以应用不同的权重,例如域名“apple.com”获得两分等等。

是否有一个特别有用的库?

3 个答案:

答案 0 :(得分:1)

text = <<_.downcase
I have a set of apples, and apple computer, and an account on Apple.com. Why they never released an Apple Computer that doubled as an orange was beyond me.
_

["apple", "banana",  "fruit salad", "orange"]
.map{|w| [w, text.scan(/\b#{w}\b/).length]}
# => [
#   ["apple", 3],
#   ["banana", 0],
#   ["fruit salad", 0],
#   ["orange", 1]
# ]

答案 1 :(得分:0)

执行此操作的非常简单的方法是使用计数哈希值,其中key为单词,value在每个单词出现时递增。

一旦构建了哈希,您就可以轻松打印出每个单词的计数,例如Apple, Orange, Banana。如果大小写无关紧要,请确保在将每个单词用作小键之前将其转换为小写。

答案 2 :(得分:0)

看起来你正试图计算术语频率,试试这个包https://github.com/reddavis/TF-IDF