Add dictionary ingest and view

Dictionary json ingest to database, view populated with database contents
This commit is contained in:
maddiebaka 2023-10-12 22:24:31 -04:00
parent 6f2e074a0a
commit f5e9f3699f
8 changed files with 90 additions and 6 deletions

View File

@ -1,5 +1,6 @@
class DictionaryController < ApplicationController class DictionaryController < ApplicationController
def index def index
@parts_of_speech = PartOfSpeech.all @parts_of_speech = PartOfSpeech.all
@words = Word.all
end end
end end

3
app/models/definition.rb Normal file
View File

@ -0,0 +1,3 @@
class Definition < ApplicationRecord
belongs_to :word
end

3
app/models/word.rb Normal file
View File

@ -0,0 +1,3 @@
class Word < ApplicationRecord
has_many :definitions
end

View File

@ -10,8 +10,26 @@
</tr> </tr>
<% @parts_of_speech.each do |item| %> <% @parts_of_speech.each do |item| %>
<tr> <tr>
<td><%= item.pos %></td> <td><b><%= item.pos %></b></td>
<td><%= item.definition %></td> <td><%= item.definition %></td>
</tr> </tr>
<% end %> <% end %>
</table> </table>
<h1>Words</h1>
<% @words.each do |word| %>
<h2><%= word.word %></h2>
<table>
<tr>
<td><b>Part of Speech</b></td>
<td><b>Definition</b></td>
</tr>
<% word.definitions.each do |definition| %>
<tr>
<td><b><%= definition.pos %></b></td>
<td><%= definition.definition %></td>
</tr>
<% end %>
</table>
<% end %>

View File

@ -0,0 +1,9 @@
class CreateWords < ActiveRecord::Migration[7.1]
def change
create_table :words do |t|
t.string :word
t.timestamps
end
end
end

View File

@ -0,0 +1,11 @@
class CreateDefinitions < ActiveRecord::Migration[7.1]
def change
create_table :definitions do |t|
t.string :pos
t.string :definition
t.references :word, null: false, foreign_key: true
t.timestamps
end
end
end

18
db/schema.rb generated
View File

@ -10,7 +10,16 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.1].define(version: 2023_10_12_235050) do ActiveRecord::Schema[7.1].define(version: 2023_10_13_015524) do
create_table "definitions", force: :cascade do |t|
t.string "pos"
t.string "definition"
t.integer "word_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["word_id"], name: "index_definitions_on_word_id"
end
create_table "part_of_speeches", force: :cascade do |t| create_table "part_of_speeches", force: :cascade do |t|
t.string "pos" t.string "pos"
t.string "definition" t.string "definition"
@ -18,4 +27,11 @@ ActiveRecord::Schema[7.1].define(version: 2023_10_12_235050) do
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
end end
create_table "words", force: :cascade do |t|
t.string "word"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_foreign_key "definitions", "words"
end end

View File

@ -1,14 +1,16 @@
namespace :dataset do namespace :dataset do
desc "TODO" desc "TODO"
task ingest: :environment do task ingest: :environment do
ingest_data ingest_pos
ingest_dictionary
puts "Ingest complete."
end end
end end
def ingest_data def ingest_pos
if PartOfSpeech.count > 0 if PartOfSpeech.count > 0
puts "Data already exists in table! Aborting." puts "Parts of speech data already exists in table! Aborting."
return return
end end
@ -17,5 +19,26 @@ def ingest_data
parts_of_speech.each do |pos| parts_of_speech.each do |pos|
PartOfSpeech.create(pos: pos['pos'], definition: pos['definition']) PartOfSpeech.create(pos: pos['pos'], definition: pos['definition'])
end end
puts "Ingest complete." puts "Parts of speech ingest complete."
end
def ingest_dictionary
if Word.count > 0
puts "Dictionary data already exists in table! Aborting."
return
end
dictionary = JSON.parse(File.read('db/dataset_en/toki-dictionary.json'))
dictionary.each do |entry|
if entry['word'] == "a"
puts entry
end
word = Word.create(word: entry['word'])
entry['definitions'].each do |definition|
word.definitions.create(pos: definition['pos'], definition: definition['definition'])
end
end
puts "Dictionary ingest complete."
end end