Программа для подсчета общих слов в документах


Я закончил свою первую программу на Ruby, и я хочу поделиться им с вами, поэтому я могу получить некоторые предложения или рекомендации. Я бы очень хотела их услышать, потому что я учусь и хочу иметь солидную базу. Программа имеет основную функцию: он рассчитывает на 15 больше общих слов в документе. Это полезно в литературоведении, потому что это позволяет пользователю знать, какие слова повторяет несколько раз, может быть, не замечая этого. Вот как работает программа:

Пользователь может перетаскивать документ в терминал и четко прописываем путь. Затем, скрипт использует камень 'йому', чтобы прочитать его. Он читает PDF и docx, а также другие файлы, которые не важны для меня сейчас. После этого скрипт создает массив из слов документа. На данный момент, скрипт удаляет такие слова, как предлоги или разъемы, которые не важны для пользователя. Наконец, он выводит результаты в таблицу через камень под названием 'hirb'.

Скрипты также предлагает возможность изменять список слов, которые должны быть удалены из исходного слова. Например, если документ ", написанная Рик Декард" на каждой странице в виде сноски, пользователь имеет возможность содержать слова "написано", "на", "Рик" и "Декард" в список и они не будут засчитаны. Пользователь может изменять список и сохранить изменения на время или навсегда.

Итак, есть три сценария: "Вордсворт.", "ядро РБ.РБ", "forbidden_list_modify_eng.РБ". Бывший скрипт в Главный каталог, а две другие языки в путь '/английский'. Это потому, что я адаптировала программу на испанском и каталонском языках, а также. В любом случае, основной сценарий "Вордсворта.РБ", в котором просит пользователей их язык и направить его или ее к выбранному языку папке (английского, в данном случае). Когда-то в английском разделе, скрипт называет "ядром.РБ", который является основной сценарий английской секции. Это означает, что в этом сценарии будет делать главная задача программы: подсчет слов и вывода результатов. Однако "ядро.РБ" предлагает пользователю для изменения списка, и этот параметр перенаправляет пользователя на третий сценарий "forbidden_list_modify_eng.РБ" (извините за название).

Теперь я собираюсь после трех скриптов и объяснять их подробно:

#needs to install 'yomu' and 'hirb' gems

require 'hirb'
require 'yomu'
require 'fileutils'

require_relative "languages/english/forbidden_list_modify_eng.rb"
require_relative "languages/english/core.rb"

def language
  puts "Choose your language:"
  puts "1. Català"
  puts "2. English"
  puts "3. Castellano"
  idiom = gets.chomp.to_s
  case idiom
  when "1", "català", "Català", "CATALÀ"
    system "clear" or system "cls"
    menu_principal_cat
  when "2", "english", "English", "ENGLISH"
    system "clear" or system "cls"
    main_menu
  when "3", "castellano", "Castellano", "CASTELLANO"
    system "clear" or system "cls"
    menu_principal_cast
  else
    system "clear" or system "cls"
    puts "You have to choose a language in the list."
    puts "-----------------------------------------------------"
    language
  end
end

language()

Этот сценарий является довольно прямо вперед, за исключением последней части, которую я объясню позже. Это прежде всего требует нужны камни и называет нужны скрипты. После этого, в меню просится на язык пользователя, поэтому он может перенаправить его на правильный язык. Мы предположим, что пользователь выбирает 2 и получает перенаправлены на функцию "main_menu", которое переносит пользователя в "основных."сценарий РБ:

def tutorial
  puts "The program works like that... (blah blah blah)"
end

def main_menu
  retrieve_forbidden_words = File.read('languages/english/english_list.txt')
  english_list = retrieve_forbidden_words.split("\n")
  puts "Choose what you want to do by writing its number:"
  puts "1: Analyze a document."
  puts "2: Modify the list of forbidden words."
  puts "3: Help me to use this program."
  puts "4: Exit the program."
  main_choice = gets.chomp.to_s
  case main_choice
  when "1"
    system "clear" or system "cls"
    english(english_list)
  when "2"
    system "clear" or system "cls"
    modification_menu
  when "3"
    system "clear" or system "cls"
    tutorial
  when "4"
    exit
  else
    main_menu
  end
end

def english(received_list)
  puts "Drag in here the document you want to analyze:"
  provided_path = gets.chomp.to_s.tr("'", "").rstrip
  execution(provided_path, received_list)
end

def execution (provided_path, forbidden_list)
  data = File.read provided_path
  doc = Yomu.read :text, data

  text_listed = doc.to_s.downcase.gsub(/\p{^Alnum}/, " ").split(" ")
  pruned_text = text_listed - forbidden_list

  frequency = Hash.new 0
  pruned_text.each { |word| frequency[word] += 1 }
  sorted_frequency = Hash[frequency.sort_by{ | word, times | -times }[0..20]]
  toptimes = sorted_frequency.values
  topwords = sorted_frequency.keys

  puts Hirb::Helpers::AutoTable.render(sorted_frequency, headers: {0 => 'Word', 1 => 'Times'}, description: false)
  puts "-----------------------------------------------------"
  main_menu

end

В "main_menu" пользователь может выбрать для анализа документа. Если это так, то сценарий задает путь к документу в функции "user_doc_path", которая занимает также перечень запрещенных слов на английском языке от .txt файл, который идет в программе по умолчанию. Это простой файл под названием "english_list.txt", который содержит все слова должны быть удалены из документа, разделенные переносом строки. Таким образом, пользователь предоставляет путь к документу и скрипт открывает его с помощью 'камень-ням' и отсортировать его, чтобы получить слова в массив. После этого скрипт создает хэш, хранит количество раз каждое слово повторяется по всему тексту. Затем программа упорядочивает хэш, разворачивает ее и получите 15 лучших результатов, которые, наконец, выводит в таблицу на камень hirb'.

Если пользователь решит изменить список слов, которые удаляются из документа, он или она перенаправляется на "forbidden_list_eng_modify.РБ":

def remove_words(list_to_remove)
  puts "Write the words you want to remove from the list. If there are more than one, divide them by commas."
  remove_propose = gets.chomp.tr(" ", "").to_s.split(",")
  new_list = list_to_remove - remove_propose

  File.new("languages/english/english_backup.txt", "w")
  File.open("languages/english/english_backup.txt", "w+") do |f|
  f.puts(list_to_remove)
  end

  File.open("languages/english/english_list.txt", "w+") do |f|
  f.puts(new_list)
  end

  puts "The words have been removed. Do you want to see the new list? [Yes/No]"
  showit = gets.chomp.tr(" ", "").to_s
  case showit
  when "Yes", "yes", "Y", "y"
    system "clear" or system "cls"
    print new_list
    puts "-----------------------------------------------------"
    modification_menu
  when "No", "no", "N", "n"
    system "clear" or system "cls"
    modification_menu
  end
end

def add_words(list_to_add)
  puts "Write the words you want to add to the list. If there are more than one, divide them by commas."
  add_propose = gets.chomp.tr(" ", "").to_s.split(",")
  new_list = list_to_add + add_propose

  File.new("languages/english/english_backup.txt", "w")
  File.open("languages/english/english_backup.txt", "w+") do |f|
  f.puts(list_to_add)
  end
  File.open("languages/english/english_list.txt", "w+") do |f|
  f.puts(new_list)
  end

  puts "The words have been added. Do you want to see the new list? [Yes/No]"
  showit = gets.chomp.tr(" ", "").to_s
  case showit
  when "Yes", "yes", "Y", "y"
    system "clear" or system "cls"
    print new_list
    puts "-----------------------------------------------------"
    modification_menu
  when "No", "no", "N", "n"
    puts "-----------------------------------------------------"
    modification_menu
  end
end

def modification_menu
retrieve_forbidden_words = File.read('languages/english/english_list.txt')
original_list = retrieve_forbidden_words.split("\n")

puts "This list contains all the words that are automatically removed from the document you want to analyze. The words in it are widely-used words with no special meaning like connectors or prepositions. However, you can modify the list as you want."
puts "1: Show all the words of the list."
puts "2: Remove words."
puts "3: Add words."
puts "4: Save the new list for other sessions."
puts "5: Return to the main menu."
list_choice = gets.chomp.to_s
case list_choice
when "1"
  system "clear" or system "cls"
  print original_list
  puts ""
  puts "-----------------------------------------------------"
  modification_menu
when "2"
  system "clear" or system "cls"
  remove_words(original_list)
when "3"
  system "clear" or system "cls"
  add_words(original_list)
when "4"
  backup_existence = File.file?('languages/english/english_backup.txt')
  if backup_existence == TRUE
    File.delete('languages/english/english_backup.txt')
    system "clear" or system "cls"
    puts "Changes has been succesfully saved."
    puts "-----------------------------------------------------"
    modification_menu
  end
  if backup_existence == FALSE
    system "clear" or system "cls"
    puts "The list hasn't been modified, so it's nothing to save."
    puts "-----------------------------------------------------"
    modification_menu
  end
when "5"
  system "clear" or system "cls"
  main_menu
else
  system "clear" or system "cls"
  modification_menu
end
end

Данный скрипт показывает пользователю меню, которое предлагает возможность показывать список, добавляя или удаляя некоторые слова и сохранения изменений навсегда. Первый вариант, показать полный список, просто печатает выход "english_list.txt", который представляет собой файл, где слова сохраняются. В "add_words", как функция "remove_words", просит пользователей написать слова, которые хотите удалить, разделяя их запятыми. Скрипт просто удаляет массив из списка по умолчанию. На данный момент, скрипт создает "english_backup.txt" что является резервное копирование в случае, если пользователь закрывает программу без сохранения. Измененный список называется "english_list.txt" и он работает как новый список по умолчанию, так что пользователь может анализировать более текстов в одном сеансе с этим списком. Если пользователь выбирает, чтобы сохранить изменения, "english_backup.txt" разрушается, а новый "english_list.txt" это основной список. Если пользователь существует, "english_backup.txt" получит свое прежнее название ("english_list.txt") и несохраненные файл список будет удален. Это достигается в бывшем сценарий, "Вордсворта.РБ", когда заканчивается он приступает к удалить несохраненные файл и восстановить резервную копию в основной список.



Комментарии