I-Scover

I-Scover（あいすかばー、IEICE Knowledge Discovery）は、2013年4月3日より公開された電子情報通信学会の文献検索システムである。I-Scoverは、電子情報通信学会が著作権を保有する論文誌や研究会などの文献のメタデータをはじめ、日本電信電話株式会社 (NTT)や日本電気株式会社 (NEC)、沖電気工業株式会社 (OKI)などの各社が発行する企業誌のメタデータが登録されている。I-Scoverは、メタデータをLinked Open Data (LOD)の形式で蓄積しており、一般的な検索システムの機能に加え、OpenSearch APIやSPARQL API (SPARQL Endpoint)の各機能を提供している。 I-Scoverは、キーワードや著者名、組織名などを検索フォームに入力して検索する一般的な検索システムの機能に加え、外部のアプリケーションからアクセス可能なOpenSearch APIとSPARQL API (SPARQL Endpoint)の2つのAPIを一般公開している。APIを利用することでI-Scoverの文献データベースに自由にアクセスでき、文献検索だけでなく研究動向や研究コミュニティなどの分析が可能となる。2017年9月1日現在、I-Scoverには24万件以上の文献をはじめ、27万人規模の著者、32万件規模の技術用語がLinked Open Data (LOD)の形式で登録されている。 I-Scoverの"I"はIEICEの"I"であるとともに、I（私）を意味しており、I-Scoverの発音がI discoverと聞こえることから名付けられたものである。 I-Scoverは、電子情報通信学会の登録商標である。 I-Scoverは、文献のタイトルやキーワード、概要、発行日などのメタデータをLinked Dataとして蓄積しており、1語のキーワードによる直観的な検索や、個々のメタデータを指定した詳細検索の機能を提供している。I-Scoverは、CiNii ArticlesやIEEE Xploreなどの一般的な文献検索システムとは異なりメタデータが互いにリンクされているため、メタデータを辿ることで知識を横断するような文献検索が可能である。著者やキーワードなどのメタデータは、電子情報通信学会の事務局により名寄せが行われており、メタデータの質向上が図られている。 Linked Dataは、Resource Description Framework (RDF)に基づき主語、述語、目的語の3つ組（Triple）で個々のリソース（メタデータ）を意味的にリンクし、メタデータを体系的に整理したデータである。オープンデータとして公開されたLinked DataをLinked Open Data (LOD)という。I-Scoverは、Linked Dataを一般公開していないが、OpenSearch APIやSPARQL APIを通じて得られるデータに関してはオープンデータとして取り扱うことができ、メタデータの二次利用によるアプリケーション開発、及び公開が可能である。 I-Scoverは、各種メタデータをArticle（文献）、Term（技術用語）、Person（著者）、Organization（組織）、Publication（出版物）、Event（イベント）の6つのクラスに分類して管理している。また、この他にデータ数は僅かであるが、Multimedia（マルチメディア）とOnlineService（オンラインサービス）の2つのクラスを定義してメタデータを管理している。 SPARQLは、RDFクエリ言語の1つであり、Linked Dataのリソースを対象とした検索や分析が可能である。I-Scoverは、SPARQL APIを提供しており、文献メタデータを用いた高度な検索や分析を可能としている。 I-Scover SPARQL API: https://i-scover-api.ieice.org/iscover/api/sparql select count(*) where { ?articleIRI a iscover:Article. } select ?object count(?object) as ?total where { ?subject a ?object. } group by ?object order by desc(?total) select ?predicate where { ?subject ?predicate ?object. } group by ?predicate order by asc(?predicate) select ?articleIRI ?title where { ?articleIRI dcterms:title ?title; dcterms:abstract ?abstract; dcterms:issued ?date; a iscover:Article. filter(lang(?title) = "ja") filter(regex(?abstract, "センサネットワーク") = true && regex(?abstract, "消費電力") = true ) } order by desc(?date) limit 20 select ?date ?description where { values(?term) { ("センサネットワーク") } ?articleIRI dcterms:abstract ?abstract; dcterms:issued ?date; a iscover:Article. filter(regex(?abstract, concat(?term, "は.+る．")) = true) bind(replace(?abstract, strBefore(?abstract, concat(?term, "は")), "") as ?tmp) bind(replace(?tmp, strAfter(?tmp, "．"), "") as ?description) bind("本(稿|論文|報告|研究|システム|アルゴリズム)|我々|機構|説明|提案|検討" as ?reject) filter(regex(?description, ?reject) = false) } order by desc(?date) select ?keyword ?increasedRate where { { select ?p1TermIRI count(?p1TermIRI) as ?p1Total where { ?articleIRI dcterms:subject ?p1TermIRI; dcterms:issued ?date; a iscover:Article. bind(year(?date) as ?year) filter(?year = 2012) } } { select ?p2TermIRI count(?p2TermIRI) as ?p2Total where { ?articleIRI dcterms:subject ?p2TermIRI; dcterms:issued ?date; a iscover:Article. bind(year(?date) as ?year) filter(?year = 2016) } } filter(?p1TermIRI = ?p2TermIRI) filter(?p1Total >= 3 && ?p2Total >= 3) bind((xsd:float(?p2Total) / ?p1Total) as ?increasedRate) ?p1TermIRI rdfs:label ?keyword; a iscover:Term. filter(lang(?keyword) = "ja") filter(?increasedRate >= 5.0) } order by desc(?increasedRate) select ?keyword ?year count(?articleIRI) as ?total where { { select ?termIRI ?keyword where { values( ?keyword ) { ("IoT"@ja) ("ディープラーニング"@ja) } ?termIRI rdfs:label ?keyword; a iscover:Term. } } ?articleIRI dcterms:subject ?termIRI; dcterms:issued ?date; a iscover:Article. bind(year(?date) as ?year) } order by asc(?keyword) asc(?year) select ?term ?total where { { select ?termIRI count(?termIRI) as ?total where { ?articleIRI dcterms:subject ?termIRI; dcterms:issued ?date; a iscover:Article. bind(year(?date) as ?year) filter(?year = 2014) } group by ?termIRI order by desc(?total) limit 100 } optional { ?termIRI rdfs:label ?term; a iscover:Term. filter(lang(?term) = "ja") } optional { ?termIRI rdfs:label ?term; a iscover:Term. filter(lang(?term) = "en") } } order by desc(?total) select ?term if(?total > 5, ?transTerm, "(Insufficient data)") as ?transTerm where { { select ?term ?lang ?coTermIRI count(?coTermIRI) as ?total where { values(?term) { ("自然言語処理"@ja) } ?termIRI rdfs:label ?term; a iscover:Term. bind(lang(?term) as ?lang) ?articleIRI dcterms:subject ?termIRI; a iscover:Article. ?articleIRI dcterms:subject ?coTermIRI; a iscover:Article. } order by desc(?total) limit 5 } ?coTermIRI rdfs:label ?transTerm; a iscover:Term. bind(if(?lang = "ja", "en", "ja") as ?target) filter(lang(?transTerm) = ?target) } order by desc(?total) limit 1 select ?coTerm min(?year) as ?startYear max(?year) as ?endYear where { { select ?coTermIRI count(?coTermIRI) as ?total where { values(?term) { ("データマイニング"@ja) } ?termIRI rdfs:label ?term; a iscover:Term. ?articleIRI dcterms:subject ?termIRI; a iscover:Article. ?articleIRI dcterms:subject ?coTermIRI; dcterms:issued ?date; a iscover:Article. } order by desc(?total) limit 20 } ?coTermIRI rdfs:label ?coTerm; a iscover:Term. filter(lang(?coTerm) = "ja") ?articleIRI dcterms:subject ?coTermIRI; dcterms:issued ?date; a iscover:Article. bind(year(?date) as ?year) } order by asc(?startYear) select ?source ?target ?weight where { { select ?source ?targetIRI count(?targetIRI) as ?weight where { values ?source { "ニューラルネットワーク"@ja "機械学習"@ja "画像処理"@ja } ?termIRI rdfs:label ?source; a iscover:Term. ?articleIRI dcterms:subject ?termIRI; a iscover:Article. ?articleIRI dcterms:subject ?targetIRI; a iscover:Article. } } filter(?weight >= 5) ?targetIRI rdfs:label ?target; a iscover:Term. filter(lang(?target) = "ja") filter(?source != ?target) } order by asc(?source) desc(?weight) select ?source ?target ?weight where { { select ?source ?abbraviation ?targetIRI count(?organizationIRI) as ?weight where { values (?candidate ?abbraviation) { ("日本電信電話"@ja "NTT"@ja) ("日本電気"@ja "NEC"@ja) ("沖電気工業"@ja "OKI"@ja) } ?organizationIRI rdfs:label ?source; a iscover:Organization. filter(lang(?source) = "ja") filter(regex(?source, ?candidate) = true || regex(?source, ?abbraviation) = true) ?articleIRI iscover:authorInfos/rdf:rest*/rdf:first/iscover:authorInfo [ iscover:affiliation ?organizationIRI; ]; dcterms:issued ?date; a iscover:Article. filter(2010 <= year(?date)) ?articleIRI iscover:authorInfos/rdf:rest*/rdf:first/iscover:authorInfo [ iscover:affiliation ?targetIRI; ]; a iscover:Article. } order by desc(?weight) } filter(?weight >= 10) ?targetIRI rdfs:label ?target; a iscover:Organization. filter(lang(?target) = "ja") filter(?source != ?target && ?abbraviation != ?target) } order by asc(?source) desc(?weight) select ?term ?startYear ?endYear ?duration ?total where { { select ?termIRI min(?year) as ?startYear max(?year) as ?endYear count(?termIRI) as ?total where { ?organizationIRI rdfs:label "沖電気工業　株式会社"@ja; a iscover:Organization. ?articleIRI iscover:authorInfos/rdf:rest*/rdf:first/iscover:authorInfo [ iscover:affiliation ?organizationIRI; ]; dcterms:subject ?termIRI; dcterms:issued ?date; a iscover:Article. bind(year(?date) as ?year) } } bind((?endYear - ?startYear + 1) as ?duration) ?termIRI rdfs:label ?term; a iscover:Term. filter(lang(?term) = "ja") } order by desc(?total) desc(?duration)