1 <?php |
1 <?php |
2 |
2 |
3 namespace CorpusParole\Http\Controllers\Api; |
3 namespace CorpusParole\Http\Controllers\Api; |
4 |
4 |
5 // use CorpusParole\Http\Requests; |
|
6 use CorpusParole\Http\Controllers\Controller; |
5 use CorpusParole\Http\Controllers\Controller; |
7 |
6 |
8 use Illuminate\Http\Request; |
7 use Illuminate\Http\Request; |
9 use EasyRdf\Resource; |
|
10 use EasyRdf\Literal; |
|
11 |
8 |
12 use CorpusParole\Libraries\Sparql\SparqlClient; |
9 use Es; |
13 use CorpusParole\Services\LexvoResolverInterface; |
|
14 use CorpusParole\Services\BnfResolverInterface; |
|
15 |
|
16 |
10 |
17 class DiscourseController extends Controller |
11 class DiscourseController extends Controller |
18 { |
12 { |
19 private $sparqlClient = null; |
|
20 |
|
21 public function __construct(SparqlClient $sparqlClient) { |
|
22 $this->sparqlClient = $sparqlClient; |
|
23 } |
|
24 |
13 |
25 /** |
14 /** |
26 * Display the specified resource. |
15 * Display the specified resource. |
27 * |
16 * |
28 * @return \Illuminate\Http\Response |
17 * @return \Illuminate\Http\Response |
29 */ |
18 */ |
30 public function index(Request $request) |
19 public function index(Request $request) |
31 { |
20 { |
32 |
21 |
33 $query = preg_replace('/\s+/', ' ', "SELECT (?o AS ?res) (COUNT(?s) AS ?count) WHERE { |
22 $query = [ "match_all" => []]; |
34 ?s a <http://www.europeana.eu/schemas/edm/ProvidedCHO>. |
|
35 ?s <http://purl.org/dc/elements/1.1/type> ?o. |
|
36 FILTER(uri(?o) in (<".implode('>,<', array_keys(config('corpusparole.corpus_discourse_type'))).">)) |
|
37 } |
|
38 GROUP BY ?o |
|
39 ORDER BY DESC(?count)"); |
|
40 |
23 |
41 $docs = $this->sparqlClient->query($query); |
24 $esQuery = [ |
|
25 'index' => env('ELASTICSEARCH_INDEX'), |
|
26 'body' => [ |
|
27 "size" => 0, |
|
28 "query" => $query, |
|
29 "aggs" => [ |
|
30 "discourses" => [ |
|
31 "terms" => [ "field" => "discourse_types", "order" => [ "_count" => "desc" ], "size" => 0 ] |
|
32 ] |
|
33 ] |
|
34 ] |
|
35 ]; |
|
36 |
|
37 $esRes = Es::search($esQuery); |
42 |
38 |
43 $discourses = []; |
39 $discourses = []; |
44 |
40 |
45 foreach ($docs as $row) { |
41 foreach ($esRes['aggregations']['discourses']['buckets'] as $b) { |
46 $key = $row->res->getUri(); |
42 $key = $b['key']; |
47 $count = $row->count->getValue(); |
43 $count = $b['doc_count']; |
48 $label = config('corpusparole.corpus_discourse_type')[$key]; |
44 $label = config('corpusparole.corpus_discourse_type')[$key]; |
49 $discourses[$key] = [ |
45 $discourses[$key] = [ |
50 "label" => $label, |
46 "label" => $label, |
51 "count" => $count |
47 "count" => $count |
52 ]; |
48 ]; |