2014-09-01 3 views
0

Я пытаюсь выполнить базовое текстовое сопоставление в Ruby с использованием активных записей.Соответствие текстам активных записей

Here is my code so far; 

require 'active_record' 
require 'yaml' 
require 'pg' 
require 'pry' 
require 'FileUtils' 

$config = ' 
adapter: postgresql 
database: edgar 
username: YYYYY 
password: 
host: 127.0.0.1' 

ActiveRecord::Base.establish_connection(YAML::load($config)) 
class Doc < ActiveRecord::Base; end 
class Eightk < ActiveRecord::Base; end 



directory = "disease"  #Creates a directory called disease 
FileUtils.mkpath(directory)  # Makes the directory if it doesn't exists 

cancer = Eightk.where("text ilike '%cancer%'") 
death = Eightk.where("text ilike '%death%'") 


cancer.each do |filing|  #filing can be used instead of eightks 
    filename = "#{directory}/#{filing.doc_id}.html" 
    File.open(filename,"w").puts filing.text 
    puts "Storing #{filing.doc_id}..." 


death.each do |filing| #filing can be used instead of eightks 
    filename = "#{directory}/#{filing.doc_id}.html" 
    File.open(filename,"w").puts filing.text 
    puts "Storing #{filing.doc_id}..." 

    end 
end 

У меня есть длинный список условий, которые я хочу найти;

  1. Есть ли способ для объединения списка поиска. я пытался «рак» | «смерть», но не имели никакой удачи
  2. Я хотел бы сделать точное соответствие слов, а не ILIKE, но не знаю команду,

Благодаря

ответ

0

Возможно, что-то вроде

keywords = %w(cancer death anotherone) 
records = Eightk.where keywords.map{|w| "(text ILIKE '%#{w}%')"}.join(' OR ') 

records.each do |filing| 
    filename = "#{directory}/#{filing.doc_id}.html" 
    File.open(filename,"w").puts filing.text 
end 

В противном случае вы можете использовать «ПОХОЖИМ» или «POSIX» http://www.postgresql.org/docs/8.1/static/functions-matching.html#FUNCTIONS-SIMILARTO-REGEXP, то вы можете использовать регулярные выражения.

например

Eightk.where "text SIMILAR TO '%(#{keywords.join '|' })%'" 

POSIX позволит вам сделать проверки для начала и конца слова, чтобы вы могли проверить только матч полное слово (например, будет соответствовать на ,death, death или death., но не deathbed и т.д. .

Я оставлю регулярки материала для кого-то с более регулярным выражением-обув :)

+0

Привет @BigFive спасибо за это. Есть ли способ сопоставить точное слово, а не аналогичное команде в активных записях? Мой поиск – wazza2013

Смежные вопросы