2012-10-18 27 views
0

我有一大串文字description,長達500個單詞。我想執行以下操作:循環遍歷文本並在Rails中提取預定義的單詞和單詞對

  1. 遍歷description和尋找從陣列keywords大量預定義的詞語,它包含單個單詞,單詞對和字三元組。
  2. 每次找到匹配項時,將此匹配項添加到新的數組matches(除非在此過程中已經添加),並從description中刪除匹配的詞。

我已經找到了解決方案,但其中大部分似乎都是在自然語言處理的深層次,這對我目前的需求來說太複雜了,或者簡單地將文本字符串在空間上,這意味着它不可能尋找單詞對。

非常感謝任何想法,以便如何有效地做到這一點。

+0

看到,因爲effeiecnt是你的主要關注,是「大量的預定義的單詞」相當靜態的?或者它是動態的? 「高效」是指你的內存資源是「高性能」還是「有效率」?還是高效的WRT DRY和簡潔的代碼? – RadBrad

+0

是的,預定義單詞的數量相當穩定,可能會在300-400左右徘徊。我的意思是乾的和簡潔的代碼是有效的 - 它是有史以來表現最快的代碼並不重要,因爲它將用於不常用的後臺進程。希望這提供了一些背景? – simonrohrbach

回答

1
description = "The quick brown fox jumped over the lazy dog, and another brown dog" 

keywords = ["brown", "lazy", "apple"] 

matches = [] 

keywords.each do |keyword| 
    matches << description.match(keyword).to_s if description.match(keyword) 
end 

puts matches 
#=> ["brown", "lazy"] 

matches.each do |keyword| 
    description.gsub!(Regexp.new(keyword), '') 
end 

description.gsub!(' ', ' ') 

puts description 
#=> "The quick fox jumped over the dog, and another dog" 
0

您可以設置在陣列中的每個字的閾值頻率

遍歷說明

If word matches exactly with description text then increase the threshold frequency by 1 point 

文本末了,也就是說誰的頻率刨絲器比0把它放在新的陣列比賽和從description

對於實施例刪除它,

If any word repeated for 2 times, 
It's frequency will be 0 + 2 and 
Initially it should be 0. 
0

這是發生在我粗黑客:)

keywords.select do |keyword| 
    description =~ /\b#{Regexp.escape(keyword)}\b/ 
    # -or- 
    description.gsub(/\b#{Regexp.escape(keyword)}\b/) do |match| 
    # whatever 
    end 
end 
相關問題