Skip to content
Snippets Groups Projects
Commit c427e8b2 authored by axel's avatar axel
Browse files

Named entities for datasets

parent 21643fde
Branches
No related tags found
No related merge requests found
...@@ -53,29 +53,19 @@ class CatalogController < ApplicationController ...@@ -53,29 +53,19 @@ class CatalogController < ApplicationController
def named_entities_for_doc def named_entities_for_doc
if params[:doc_id].index('_article_').nil? if params[:doc_id].index('_article_').nil?
nems = SolrSearcher.query({q:"issue_id_ssi:#{params[:doc_id]}", rows: 1000000})['response']['docs'] article = Article.find(params[:doc_id])
named_entities = article.named_entities
else else
nems = SolrSearcher.query({q:"article_id_ssi:#{params[:doc_id]}", rows: 1000000})['response']['docs'] issue = Issue.find(params[:doc_id])
named_entities = issue.named_entities
end end
output = {LOC: {}, PER: {}, ORG: {}, HumanProd: {}} render partial: 'named_entities/named_entities', locals: {named_entities: named_entities}
nems.select {|ne_solr| ne_solr['type_ssi'] == "LOC"}.each do |ne_solr|
output[:LOC][ne_solr['linked_entity_ssi']] = [] unless output[:LOC].has_key? ne_solr['linked_entity_ssi']
output[:LOC][ne_solr['linked_entity_ssi']].append(ne_solr)
end end
nems.select {|ne_solr| ne_solr['type_ssi'] == "PER"}.each do |ne_solr|
output[:PER][ne_solr['linked_entity_ssi']] = [] unless output[:PER].has_key? ne_solr['linked_entity_ssi'] def named_entities_for_dataset
output[:PER][ne_solr['linked_entity_ssi']].append(ne_solr) dataset = Dataset.find(params[:dataset_id])
end named_entities = dataset.named_entities
nems.select {|ne_solr| ne_solr['type_ssi'] == "ORG"}.each do |ne_solr| render partial: 'named_entities/named_entities', locals: {named_entities: named_entities}
output[:ORG][ne_solr['linked_entity_ssi']] = [] unless output[:ORG].has_key? ne_solr['linked_entity_ssi']
output[:ORG][ne_solr['linked_entity_ssi']].append(ne_solr)
end
nems.select {|ne_solr| ne_solr['type_ssi'] == "HumanProd"}.each do |ne_solr|
output[:HumanProd][ne_solr['linked_entity_ssi']] = [] unless output[:HumanProd].has_key? ne_solr['linked_entity_ssi']
output[:HumanProd][ne_solr['linked_entity_ssi']].append(ne_solr)
end
render partial: 'named_entities/named_entities', locals: {named_entities: output}
# render json: nems
end end
def paginate_facets def paginate_facets
......
import { Controller } from "stimulus" import { Controller } from "stimulus"
import {DatasetAPI} from "../utils/dataset_api" import {DatasetAPI} from "../utils/dataset_api"
import {Popover} from "bootstrap" import {SearchAPI} from "../utils/search_api";
export default class extends Controller { export default class extends Controller {
static targets = [ ] static targets = [ ]
static values = { id: Number, selected: Boolean } static values = { id: Number, selected: Boolean }
connect() { connect() {
console.log("this.idValue", this.idValue)
this.loadDocuments(this.idValue, 1, 10, "default", "asc", "all") this.loadDocuments(this.idValue, 1, 10, "default", "asc", "all")
this.load_named_entities()
} }
loadDocuments(datasetId, page, per_page, sort, sort_order, type) { loadDocuments(datasetId, page, per_page, sort, sort_order, type) {
DatasetAPI.paginateDataset(datasetId, page, per_page, sort, sort_order, type, (data) => {}) DatasetAPI.paginateDataset(datasetId, page, per_page, sort, sort_order, type, (data) => {})
} }
load_named_entities() {
SearchAPI.load_dataset_named_entities(this.idValue, (data) => {
$('#named-entities-panel').find(".card-body").html(data)
})
}
} }
\ No newline at end of file
export class SearchAPI { export class SearchAPI {
static load_dataset_named_entities(dataset_id, callback) {
$.ajax({
type: "POST",
url: "/dataset_named_entities",
data: {dataset_id: dataset_id},
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
},
success: (data, textStatus, jqXHR) => {
callback(data)
},
error: (jqXHR, textStatus, errorThrown) => {
}
})
}
static load_named_entities(doc_id, callback) { static load_named_entities(doc_id, callback) {
$.ajax({ $.ajax({
type: "POST", type: "POST",
......
...@@ -32,4 +32,26 @@ class Article ...@@ -32,4 +32,26 @@ class Article
canvas_size = [canvas_coords[1]-canvas_coords[0], canvas_coords[3]-canvas_coords[2]] canvas_size = [canvas_coords[1]-canvas_coords[0], canvas_coords[3]-canvas_coords[2]]
[min_x,min_y,canvas_size[0],canvas_size[1]] [min_x,min_y,canvas_size[0],canvas_size[1]]
end end
def named_entities
nems = SolrSearcher.query({q:"article_id_ssi:#{self.id}", rows: 1000000})['response']['docs']
output = {LOC: {}, PER: {}, ORG: {}, HumanProd: {}}
nems.select {|ne_solr| ne_solr['type_ssi'] == "LOC"}.each do |ne_solr|
output[:LOC][ne_solr['linked_entity_ssi']] = [] unless output[:LOC].has_key? ne_solr['linked_entity_ssi']
output[:LOC][ne_solr['linked_entity_ssi']].append(ne_solr)
end
nems.select {|ne_solr| ne_solr['type_ssi'] == "PER"}.each do |ne_solr|
output[:PER][ne_solr['linked_entity_ssi']] = [] unless output[:PER].has_key? ne_solr['linked_entity_ssi']
output[:PER][ne_solr['linked_entity_ssi']].append(ne_solr)
end
nems.select {|ne_solr| ne_solr['type_ssi'] == "ORG"}.each do |ne_solr|
output[:ORG][ne_solr['linked_entity_ssi']] = [] unless output[:ORG].has_key? ne_solr['linked_entity_ssi']
output[:ORG][ne_solr['linked_entity_ssi']].append(ne_solr)
end
nems.select {|ne_solr| ne_solr['type_ssi'] == "HumanProd"}.each do |ne_solr|
output[:HumanProd][ne_solr['linked_entity_ssi']] = [] unless output[:HumanProd].has_key? ne_solr['linked_entity_ssi']
output[:HumanProd][ne_solr['linked_entity_ssi']].append(ne_solr)
end
output
end
end end
\ No newline at end of file
...@@ -49,4 +49,29 @@ class Dataset < ActiveRecord::Base ...@@ -49,4 +49,29 @@ class Dataset < ActiveRecord::Base
return {docs: solr_docs.nil? ? [] : solr_docs, nb_pages: nb_pages} return {docs: solr_docs.nil? ? [] : solr_docs, nb_pages: nb_pages}
end end
def named_entities
article_ids = self.documents.select {|d| d['type'] == 'article' }.map{|d| d['id']}
issue_ids = self.documents.select {|d| d['type'] == 'issue' }.map{|d| d['id']}
nems = []
nems = SolrSearcher.query({q: "*:*", fq: "article_id_ssi:(#{article_ids.join(' OR ')})", rows: 1000000})['response']['docs'] unless article_ids.empty?
nems += SolrSearcher.query({q: "*:*", fq: "issue_id_ssi:(#{issue_ids.join(' OR ')})", rows: 1000000})['response']['docs'] unless issue_ids.empty?
output = {LOC: {}, PER: {}, ORG: {}, HumanProd: {}}
nems.select {|ne_solr| ne_solr['type_ssi'] == "LOC"}.each do |ne_solr|
output[:LOC][ne_solr['linked_entity_ssi']] = [] unless output[:LOC].has_key? ne_solr['linked_entity_ssi']
output[:LOC][ne_solr['linked_entity_ssi']].append(ne_solr)
end
nems.select {|ne_solr| ne_solr['type_ssi'] == "PER"}.each do |ne_solr|
output[:PER][ne_solr['linked_entity_ssi']] = [] unless output[:PER].has_key? ne_solr['linked_entity_ssi']
output[:PER][ne_solr['linked_entity_ssi']].append(ne_solr)
end
nems.select {|ne_solr| ne_solr['type_ssi'] == "ORG"}.each do |ne_solr|
output[:ORG][ne_solr['linked_entity_ssi']] = [] unless output[:ORG].has_key? ne_solr['linked_entity_ssi']
output[:ORG][ne_solr['linked_entity_ssi']].append(ne_solr)
end
nems.select {|ne_solr| ne_solr['type_ssi'] == "HumanProd"}.each do |ne_solr|
output[:HumanProd][ne_solr['linked_entity_ssi']] = [] unless output[:HumanProd].has_key? ne_solr['linked_entity_ssi']
output[:HumanProd][ne_solr['linked_entity_ssi']].append(ne_solr)
end
output
end
end end
...@@ -33,4 +33,26 @@ class Issue ...@@ -33,4 +33,26 @@ class Issue
end end
i i
end end
def named_entities
nems = SolrSearcher.query({q:"issue_id_ssi:#{self.id}", rows: 1000000})['response']['docs']
output = {LOC: {}, PER: {}, ORG: {}, HumanProd: {}}
nems.select {|ne_solr| ne_solr['type_ssi'] == "LOC"}.each do |ne_solr|
output[:LOC][ne_solr['linked_entity_ssi']] = [] unless output[:LOC].has_key? ne_solr['linked_entity_ssi']
output[:LOC][ne_solr['linked_entity_ssi']].append(ne_solr)
end
nems.select {|ne_solr| ne_solr['type_ssi'] == "PER"}.each do |ne_solr|
output[:PER][ne_solr['linked_entity_ssi']] = [] unless output[:PER].has_key? ne_solr['linked_entity_ssi']
output[:PER][ne_solr['linked_entity_ssi']].append(ne_solr)
end
nems.select {|ne_solr| ne_solr['type_ssi'] == "ORG"}.each do |ne_solr|
output[:ORG][ne_solr['linked_entity_ssi']] = [] unless output[:ORG].has_key? ne_solr['linked_entity_ssi']
output[:ORG][ne_solr['linked_entity_ssi']].append(ne_solr)
end
nems.select {|ne_solr| ne_solr['type_ssi'] == "HumanProd"}.each do |ne_solr|
output[:HumanProd][ne_solr['linked_entity_ssi']] = [] unless output[:HumanProd].has_key? ne_solr['linked_entity_ssi']
output[:HumanProd][ne_solr['linked_entity_ssi']].append(ne_solr)
end
output
end
end end
\ No newline at end of file
<% if current_user.id == @dataset.user_id %> <% if current_user.id == @dataset.user_id %>
<% set_page_title @dataset.title %> <% set_page_title @dataset.title %>
<div class="row" <div class="row"
data-controller="show-dataset" data-controller="dataset"
data-show-dataset-id-value="<%= @dataset.id %>"> data-dataset-id-value="<%= @dataset.id %>">
<div id="sidebar" class="col-3"> <div id="sidebar" class="col-3">
<%= render partial: 'dataset_info' %> <%= render partial: 'dataset_info' %>
<%= render partial: 'named_entities/named_entities' %> <%= render partial: 'catalog/named_entities_panel' %>
</div> </div>
<div class="col-9"> <div class="col-9">
<%= render partial: 'dataset_header' %> <%= render partial: 'dataset_header' %>
......
...@@ -9,6 +9,7 @@ Rails.application.routes.draw do ...@@ -9,6 +9,7 @@ Rails.application.routes.draw do
get '/catalog/:id', to: 'catalog#show' get '/catalog/:id', to: 'catalog#show'
post '/paginate_facets', to: 'catalog#paginate_facets' post '/paginate_facets', to: 'catalog#paginate_facets'
post '/named_entities', to: 'catalog#named_entities_for_doc' post '/named_entities', to: 'catalog#named_entities_for_doc'
post '/dataset_named_entities', to: 'catalog#named_entities_for_dataset'
get '/datasets', to: 'dataset#index' get '/datasets', to: 'dataset#index'
get '/datasets/update', to: 'dataset#update_datasets_list' get '/datasets/update', to: 'dataset#update_datasets_list'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment