Skip to content
This repository has been archived by the owner on Jun 27, 2019. It is now read-only.

Commit

Permalink
Merge pull request #226 from Apachina/2420_2
Browse files Browse the repository at this point in the history
2420_2
  • Loading branch information
HolyWalley authored Jul 26, 2018
2 parents 5b9b052 + 4201ad0 commit 4ce2093
Show file tree
Hide file tree
Showing 9 changed files with 222 additions and 0 deletions.
26 changes: 26 additions & 0 deletions 2420/2/BattlerMostUsableWordsCounter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# rubocop:disable Style/MultilineBlockChain
# class BattlerMostUsableWordsCounter
class BattlerMostUsableWordsCounter
FOLDER_PATH = Dir.pwd.freeze
attr_reader :text

def initialize(text)
@text = text
end

def run
text_without_preposition.split(' ')
.each_with_object(Hash.new(0)) do |word, counter|
counter[word] += 1
end.to_a.sort_by { |_word, count| count }
end

private

def text_without_preposition
all_texts = text.downcase!
prepositions_list = File.read("#{FOLDER_PATH}/prepositions").split(',')
prepositions_list.inject(all_texts) { |texts, preposition| texts.gsub(/#{preposition}[аояиеёю ]/, '') }
end
end
# rubocop:enable Style/MultilineBlockChain
3 changes: 3 additions & 0 deletions 2420/2/Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
source 'http://rubygems.org'
gem 'commander'
gem 'terminal-table'
21 changes: 21 additions & 0 deletions 2420/2/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Mini-project Versus-battle

# Info

Данной программой возможны несколько анализов текста:
* Исследование всех файлов с текстами батлеров, находящийся в корневой папке.
* Исследование текста на наличие мата.
* Просмотр топ батлеров, использовавших наиболее часто матные слова.

### Использование программы. Step-by-step.
1. Открываем Terminal, и переходим в директорию, где находится данный продукт.
2. В зависимости от решаемой задачи есть пара типов команд:
'--top-bad-words [NUMBER]' - вывод топ самых матерящихся людей в заданном количестве;
'--top-words [NUMBER] --name [NAME]' - вывод наиболее часто употребляемых слов во всех! текстах определенного человека.
Пример вызова команды:
' youfolderpath$ ruby options_file.rb --top-bad-words' [NUMBER]
3. Для информации пропишите 'ruby options_file.rb --help'

# Возможные изменения в программе:
* Если вам захочется изменить( добавить или уменьшить) количество текстов, то вам следует файле 'versus.rb', 5 строка, указать полный путь к папке, где находятся данные текста. ВАЖНО! В данной папке должны находиться только текста батлеров.
* Значение [NUMBER] и [NAME] - ваши желания, однако употребление [NAME] на транслите не учтено. Т.е. "Галахат" и "Galahat" - в данном случае будут разными батлерами. [NUMBER] в дефолтном состоянии выведет 30 строк.
19 changes: 19 additions & 0 deletions 2420/2/TopBadWordsCounter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# clas BadWordsCounter
class BadWordsCounter
FOLDER_PATH = Dir.pwd.freeze
attr_reader :text

def initialize(text)
@text = text
end

def run
load_bad_words.inject(0) { |counter, bad_word| counter + text.gsub(bad_word).count }
end

private

def load_bad_words
@load_bad_words ||= File.read("#{FOLDER_PATH}/bad_words").split(',')
end
end
1 change: 1 addition & 0 deletions 2420/2/bad_words
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6ля, 6лядь, 6лять, b3ъeб, cock, cunt, e6аль, ebal, eblan, eбал, eбать, eбуч, eбут, eблантий, fuck, fucker, fucking, xyев, xуй, xуя, xуе,xуй, xую, zaeb, zaebal, zaebali, zaebat, архипиздрит, ахуел, ахуеть, бздение, бздеть, бздех, бздецы, бздит, бздицы, бздло, бзднуть, бздун, бздунья, бздюха, бздюшка, бздюшко, бля, блябу, блябуду, блядь, бляди, блядина, блядище, блядки, блядовать, блядство, блядун, блядуны, бледунья, бледь, бледюга, блять, вафел, вафлёр, взъебка, взьебка, взьебывать, въеб, въебался, въебенн, въебусь, въебывать, выебать, выебал, выблядок, выблядыш, выеб, выебать,выебет, вы*бен, выебнулся, выебон, выебываться, выпердеть, высраться, выссаться, вьебен, гавно, гавнюк, гавнючка, гамно, гандон, гнид, гнида, гниды, говенка, говенный, говешка, говназия, говнецо, говнище, говно, говноед, говнолинк, говночист, говнюк, говнюха, говнядина, говняк, говняный, говнять, гондон, доебываться, долбоеб, долбоёб, долбоящер, дрисня, дрист, дристануть, дристать, дристун, дристуха, дрочелло, дрочена, дрочила, дрочилка, дрочистый, дрочить, дрочка, дрочун, е6ал, ебут, еб твою мать, ёб твою мать, ёбaн, ебaть, ебyч, ебал, ебало, ебальник, ебан, ебанамать, ебанат, ебаная, ёбаная, ебанический, ебанный, ебанныйврот, ебаное, ебануть, ебануться, ёбаную, ебаный, ебанько, ебарь, ебат, ёбат, ебатория, ебать, ебать-копать, ебаться, ебашить, ебёна, ебет, ебёт, ебец, ебик, ебин, ебись, ебическая, ебки, ебла, еблан, ебливый, еблище, ебло, еблыст, ебля, ёбн, ебнуть, ебнуться, ебня, ебошить, ебская, ебский, ебтвоюмать, ебун, ебут, ебуч, ебуче, ебучее, ебучий, ебучим, ебущ, ебырь, елда, елдак, елдачить, жопа, жопу, заговнять, задрачивать, задристать, задрота, зае6, заё6, заеб, заёб, заеба, заебал, заебанец, заебастая, заебастый, заебать, заебаться, заебашить, заебистое, заёбистое, заебистые, заёбистые, заебистый, заёбистый, заебись, заебошить, заебываться, залуп, залупа, залупу, залупаться, залупить, залупиться, замудохаться, запиздячить, засерать, засерун, засеря, засирать, засрун, захуячить, заябестая, злоеб, злоебучая, злоебучее, злоебучий, ибанамат, ибонех, изговнять, изговняться, изъебнуться, ипать, ипаться, ипаццо, Какдвапальцаобоссать, конча, курва, курвятник, лох, лошарa, лошара, лошары, лошок, лярва, малафья, манда, мандавошек, мандавошка, мандавошки, мандей, мандень, мандеть, мандища, мандой, манду, мандюк, минет, минетчик, минетчица, млять, мокрощелка, мокрощёлка, мразь, мудak, мудaк, мудаг, мудак, муде, мудель, мудеть, муди, мудил, мудила, мудистый, мудня, мудоеб, мудозвон, мудоклюй, на хер, на хуй, набздел, набздеть, наговнять, надристать, надрочить, наебать, наебет, наебнуть, наебнуться, наебывать, напиздел, напиздели, напиздело, напиздили, насрать, настопиздить, нахер, нахрен, нахуй, нахуйник, не ебет, не ебёт, невротебучий, невъебенно, нехира, нехрен, Нехуй, нехуйственно, ниибацо, ниипацца, ниипаццо, ниипет, никуя, нихера, нихуя, обдристаться, обосранец, обосрать, обосцать, обосцаться, обсирать, объебос, обьебать обьебос, однохуйственно, опездал, опизде, опизденивающе, остоебенить, остопиздеть, отмудохать, отпиздить, отпиздячить, отпороть, отъебись, охуевательский, охуевать, охуевающий, охуел, охуенно, охуеньчик, охуеть, охуительно, охуительный, охуяньчик, охуячивать, охуячить, очкун, падла, падонки, падонок, паскуда, педерас, педик, педрик, педрила, педрилло, педрило, педрилы, пездень, пездит, пездишь, пездо, пездят, пердануть, пердеж, пердение, пердеть, пердильник, перднуть, пёрднуть, пердун, пердунец, пердунина, пердунья, пердуха, пердь, переёбок, пернуть, пёрнуть, пи3д, пи3де, пи3ду, пиzдец, пидар, пидарaс, пидарас, пидарасы, пидары, пидор, пидорасы, пидорка, пидорок, пидоры, пидрас, пизда, пиздануть, пиздануться, пиздарваньчик, пиздато, пиздатое, пиздатый, пизденка, пизденыш, пиздёныш, пиздеть, пиздец, пиздит, пиздить, пиздиться, пиздишь, пиздища, пиздище, пиздобол, пиздоболы, пиздобратия, пиздоватая, пиздоватый, пиздолиз, пиздонутые, пиздорванец, пиздорванка, пиздострадатель, пизду, пиздуй, пиздун, пиздунья, пизды, пиздюга, пиздюк, пиздюлина, пиздюля, пиздят, пиздячить, педик, писбшки, писька, писькострадатель, писюн, писюшка, по хуй, по хую, подговнять, подонки, подонок, подъебнуть, подъебнуться, поебать, поебень, поёбываает, поскуда, посрать, потаскуха, потаскушка, похер, похерил, похерила, похерили, похеру, похрен, похрену, похуй, похуист, похуистка, похую, придурок, приебаться, припиздень, припизднутый, припиздюлина, пробзделся, проблядь, проеб, проебанка, проебать, промандеть, промудеть, пропизделся, пропиздеть, пропиздячить, раздолбай, разхуячить, разъ*б, разъ*ба, разебал, разъебай, разъебать, распиздай, распиздеться, распиздяй, распиздяйство, распроеть, сволота, сволочь, сговнять, секель, серун, серька, сестроеб, сикель, сила, сирать, сирывать, соси, сосать, спиздел, спиздеть, спиздил, спиздила, спиздили, спиздит, спиздить, срака, сраку, сраный, сранье, срать, срун, ссака, ссышь, стерва, страхопиздище, сука, суки, суходрочка, сучара, сучий, сучка, сучко, сучонок, сучье, сцание, сцать, сцука, сцуки, сцуконах, сцуль, сцыха, сцышь, съебаться, сыкун, трахае6, трахаеб, трахаёб, трахатель, ублюдок, уебать, уёбища, уебище, уёбище, уебищное, уёбищное, уебк, уебки, уёбки, уебок, уёбок, урюк, усраться, ушлепок, хyё, хyй, хyйня, хамло, хер, херня, хера, херовато, херовина, херовый, хитровыебанный, хитрожопый, хуeм, хуе, хуё, хуевато, хуёвенький, хуевина, хуево, хуевый, хуёвый, хуек, хуёк, хуел, хуем, хуенч, хуеныш, хуенький, хуеплет, хуеплёт, хуепромышленник, хуерик, хуерыло, хуесос, хуесоска, хуета, хуетень, хуею, хуи, хуй, хуйком, хуйло, хуйня, хуйрик, хуище, хуля, хую, хуюл, хуя, хуяк, хуякать, хуякнуть, хуяра, хуясе, хуячить, целка, чмо, чмошник, чмырь, шалава, шалавой, шараёбиться, шлюха, шлюхой, шлюшка, шлюхи, ябывает, *
59 changes: 59 additions & 0 deletions 2420/2/options_file.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
require 'optparse'
require './versus.rb'
require 'terminal-table'
require './TopBadWordsCounter.rb'
require './BattlerMostUsableWordsCounter.rb'
require './row.rb'

# rubocop:disable Style/MultilineBlockChain

options = { name: '', top_bad_words: 0, top_words: 30 }
OptionParser.new do |opts|
opts.banner = 'Usage: example.rb [options]'

opts.on('--top-bad-words [NUMBER]', Integer, 'Максимальное количество самых нецензурных участников') do |number|
options[:top_bad_words] = number
end
opts.on('--name [NAME]', String, 'Имя участника') do |name|
options[:name] = name
end
opts.on('--top-words [NUMBER]', Integer, 'Наиболее часто употребляемые слова') do |number|
options[:top_words] = number || 30
end
end.parse!

BATTLERS_NAMES_LIST = Battler.battler_names_list.freeze

if options[:top_bad_words] > 0
all_information_about_battlers = BATTLERS_NAMES_LIST.map do |name|
Battler.new(name).all_information_about_battler
end.sort_by { |key| key[:bad_words_count] }.reverse
rows = all_information_about_battlers.first(options[:top_bad_words]).inject([]) do |row, name|
row << Row.new(name[:name],
name[:battles_count],
name[:bad_words_count],
name[:words_in_battle],
name[:words_in_raund]).run
end
table = Terminal::Table.new rows: rows
puts table
end

return if options[:name].empty?
name_battler = []
battler = Battler.new(options[:name])
BATTLERS_NAMES_LIST.each { |name| name_battler << name.split.first }
if name_battler.include?(options[:name])
count_words = BattlerMostUsableWordsCounter.new(battler.all_battles_text)
.run
.pop(options[:top_words])
.reverse
rows = count_words.inject([]) { |row, (word, count)| row << [word.to_s, "#{count} раз"] }
table = Terminal::Table.new rows: rows
puts table
else
puts "Рэпер #{options[:name]} мне не известен. Зато мне известны: "
puts BATTLERS_NAMES_LIST.pop(3)
puts '...'
end
# rubocop:enable Style/MultilineBlockChain
1 change: 1 addition & 0 deletions 2420/2/prepositions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
а, а-ля, без, без ведома, безоблагодаря, близ, близко от, в, в виде, в зависимости от, в интересах, в качестве, в лице, в отличие от, в отношении, в пандан, в пользу, в преддверии, в продолжение, в результате, в роли, в связи с, в силу, в случае, в соответствии с, в течение, в целях, в честь, вблизи, ввиду, вглубь, вдогон, вдоль, вдоль по, взамен, включая, вкруг, вместо, вне, внизу, внутри, внутрь, во, во имя, во славу, вовнутрь, возле, вокруг, вопреки, вослед, впереди, вплоть до, впредь до, вразрез, вроде, вслед, вслед за, вследствие, встречу, выключая, для, для-ради, до, З, за, за вычетом, за исключением, за счёт, замест, заместо, И, из, из-за, из-под, из-подо, изнутри, изо, исключая, исходя из, К, к, касаемо, касательно, ко, кончая, кроме, кругом, Л, лицом к лицу с, М, меж, между, мимо, Н, на, на благо, на виду у, на глазах у, на предмет, наверху, навроде, навстречу, над, надо, назад, назади, накануне, наместо, наперекор, наперерез, наперехват, наподобие, напротив, наряду с, насупротив, насчёт, начиная с, не без, не считая, невзирая на, недалеко от, независимо от, несмотря, несмотря на, ниже, О, о, об, обо, обок, обочь, около, окрест, окроме, окромя, округ, опосля,опричь, от, от имени, от лица, относительно, ото, П, перед, передо, по, по линии, по мере, по направлению к, по поводу, по причине, по случаю, по сравнению с, по-за, по-над, по-под, поблизости от, повдоль,поверх, под,под видом, под эгидой, подле, подо, подобно, позади, позадь, позднее, помимо, поперёд, поперёк, порядка, посверху, посереди, посередине, посерёдке, посередь, после, посреди, посредине, посредством, пред, предо, преж, прежде, при, при помощи, применительно к, про, промеж, против, противно, противу, путём, Р, ради, рядом с, С, с, с ведома, с помощью, с прицелом на, с точки зрения, с целью, сверх, сверху, свыше, середи, середь, что, не, ты, не, н, и, -, я, это, з, же, у, теб, как, он, она, оно, они, бы, но, ведь, твой, -, так, если, этот, чтобы, мне, то, все, где, чем, тво, был, раунд, или, мы, только, теперь, уже, мой, даже, еще, его, кто, вы, меня.
35 changes: 35 additions & 0 deletions 2420/2/row.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# :reek:TooManyInstanceVariables

# class Row
class Row
attr_reader :name, :battles_count, :bad_words_count, :words_in_battle, :words_in_raund

def initialize(name, battles_count, bad_words_count, words_in_battle, words_in_raund)
@name = name
@battles_count = battles_count
@bad_words_count = bad_words_count
@words_in_battle = words_in_battle
@words_in_raund = words_in_raund
end

def run
rows = [name.to_s,
" #{battles_count} батл" + correct_ending,
" #{bad_words_count} нецензурных слов ",
" #{words_in_battle} слова на батл ",
" #{words_in_raund} слов в раунде"]
rows
end

private

def correct_ending
if battles_count < 2
''
elsif battles_count > 1 && battles_count <= 4
'a'
elsif battles_count >= 5
'ов'
end
end
end
Loading

0 comments on commit 4ce2093

Please sign in to comment.