我正在进行一些文本处理,我有兴趣根据单词和/或短语的频率查找和评分文本段落,理想地使用Ruby。
问题的一个例子是:我有“苹果”,“香蕉”,“水果沙拉”和“橙子”。这个列表很可能是几千个单词和/或短语。
我有一大堆要搜索的文字:
我有一套苹果,苹果电脑和Apple.com上的帐户,但从来没有水果沙拉。为什么他们从未发布过像橘子那样翻倍的苹果电脑超出了我。
这会吐出一个说:
的数组Apple 4 Orange 1 Banana 0 Fruit salad 1
理想情况下,我可以应用不同的权重,例如域名“apple.com”获得两分等等。
是否有一个特别有用的库?
答案 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