|
# encoding: utf-8 |
|
require 'sequel' |
|
require 'lingua/stemmer' |
|
require 'active_support/core_ext' |
|
require 'hirb-unicode' |
|
require File.expand_path('../not_proud_parser', __FILE__) |
|
|
|
DB = Sequel.sqlite('pages.db') |
|
BANNED_WORDS = %w(ним чтоб ест ем нет раз до одн со из ни есл нег теб и эт мен мне на но а у был за то уж от бы к по ещ тольк даж о же не в с все так очен я что он как этот он мы ве котор он так сво вы ты так ег себ е когд вот друг наш сам мо кто сам там как их пот ничт кажд пот тогд зде какой-т что-т всегд ваш никт поч поэт сво никогд никак некотор тво куд кто-т как-т зач се туд какой-нибуд всег откуд сюд стол где-т что-нибуд почему-т нек когда-т чег отсюд че нечт кто-нибуд вон оттуд какой-либ так куда-т никуд как таков ко отт некогд отч нигд кое-чт когда-нибуд чей-т где-нибуд такой-т что-либ всюд как-нибуд откуда-т ничут куда-нибуд скол тут-т этак тот-т так-т кое-как кое-как кое-кт зачем-т кое-гд кто-либ ихн нект отчего-т каков эдак нибуд тогда-т чего-т когда-либ поч отовсюд нич досел он ниоткуд эк чей-нибуд сям ник).uniq |
|
|
|
desc 'Создать базу данных' |
|
task :setup_db do |
|
DB.create_table :pages do |
|
primary_key :id |
|
String :url, unique: true, null: false |
|
Text :text, unique: true, null: false |
|
end |
|
|
|
DB.create_table :words do |
|
primary_key :word |
|
String :word, unique: true, null: false |
|
Integer :count |
|
end |
|
end |
|
|
|
desc 'Скачать все старницы с http://notproud.ru' |
|
task :fetch_pages do |
|
NotProudParser.new |
|
end |
|
|
|
desc 'Проанализировать скачанные страницы и выделить из них слова' |
|
task :build_statistics do |
|
stemmer= Lingua::Stemmer.new(language: "ru") |
|
pages = DB[:pages] |
|
words = DB[:words] |
|
|
|
pages.each do |page| |
|
puts "Обработка страницы: #{page[:url]}..." |
|
page[:text].mb_chars.downcase.gsub('ё', 'е').gsub(/[?!"',.-]/, ' ').split.uniq.each do |word| |
|
stemmed_word = stemmer.stem(word) |
|
unless BANNED_WORDS.include?(stemmed_word) |
|
if words.where(word: stemmed_word).limit(1).count == 0 |
|
words.insert(word: stemmed_word, count: 1) |
|
else |
|
words.where(word: stemmed_word).limit(1).update(count: :count + 1) |
|
end |
|
end |
|
end |
|
end |
|
end |
|
|
|
desc 'Показать статистику слов' |
|
task :show_statistics, [:limit] do |t, args| |
|
limit = args.limit || 10 |
|
words = DB[:words] |
|
puts Hirb::Helpers::AutoTable.render words.reverse_order(:count).limit(limit) |
|
puts "Всего слов: #{words.count}" |
|
end |
|
|
|
desc 'Удалить запрещенные слова из базы' |
|
task 'remove_banned_words' do |
|
words = DB[:words] |
|
words.where(word: BANNED_WORDS).delete |
|
end |
|
|
|
desc 'Очистить таблицу со словами' |
|
task 'remove_all_words' do |
|
DB[:words].delete |
|
end |