查找单词密度最高的文本

时间:2017-06-07 12:14:53

标签: c ruby regex string pattern-matching

我有一个哈希如下:

{1=>[{content=>"Text of paragraph 1.........."},{content=>"Text of paragraph 2"}]}

解析文本文件后创建上述哈希。关键" 1"表示页面1.它指向一个哈希数组,每个哈希指向一个内容键指向实际文本的段落。

现在我有一个像[word1,word2,word3]这样的单词列表。我必须遍历该页面的所有段落内容,并告诉哪个段落出现这些词的次数最多。

我可以编写自己的代码,在那里我对段落中的每个单词进行正则表达式匹配。但我想知道是否有任何强大的字符串匹配库可以解决这个用例(在C,C ++,甚至ruby中)

它只是不匹配字符串。我需要一个可以提取单词列表中单词密度最高的数据的库。

1 个答案:

答案 0 :(得分:0)

这是一个简单的例子,在ruby中,用于计算字符串中单词的频率:

def count_words(string)
  string
    .scan(/[\w']+/) # Treat strings like "don't" as a single word
    .each_with_object(Hash.new(0)) do |w,h|
      h[w.downcase] += 1
    end
end

用法:

word_occurrences = count_words("Hello world! Hello, vipul.")
  => {"hello"=>2, "world"=>1, "vipul"=>1}

您不应该需要第三方库来实现这么简单的事情。

要检查特定单词的出现次数,只需在哈希中查找:

word_occurrences[word1.downcase]

获取最高密度的列表"单词,只按哈希值排序:

word_occurrences.sort_by {|_word, occurrences| -occurrences}
# Note the negative to make this descending, not ascending