@internetarchive/collection-browser 2.8.1-alpha-webdev7386.0 → 2.8.1-alpha-webdev7002.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/src/collection-browser.js +1 -7
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/dedupe.js +2 -1
- package/dist/src/collection-facets/smart-facets/dedupe.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/heuristics/{browser-language-heuristic.d.ts → browser-language/browser-language-heuristic.d.ts} +1 -1
- package/dist/src/collection-facets/smart-facets/heuristics/browser-language/browser-language-heuristic.js.map +1 -0
- package/dist/src/collection-facets/smart-facets/heuristics/index.d.ts +3 -0
- package/dist/src/collection-facets/smart-facets/heuristics/index.js +4 -0
- package/dist/src/collection-facets/smart-facets/heuristics/index.js.map +1 -0
- package/dist/src/collection-facets/smart-facets/heuristics/{query-keywords-heuristic.d.ts → query-keywords/query-keywords-heuristic.d.ts} +1 -2
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.js +14 -0
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.js.map +1 -0
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.d.ts +6 -0
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.js +52 -0
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.js.map +1 -0
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.d.ts +9 -0
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.js +69 -0
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.js.map +1 -0
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.d.ts +21 -0
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js +82 -0
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js.map +1 -0
- package/dist/src/collection-facets/smart-facets/models.d.ts +4 -0
- package/dist/src/collection-facets/smart-facets/models.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +2 -2
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +9 -7
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js.map +1 -1
- package/index.ts +15 -1
- package/package.json +1 -1
- package/src/collection-browser.ts +3 -6
- package/src/collection-facets/smart-facets/dedupe.ts +2 -1
- package/src/collection-facets/smart-facets/heuristics/{browser-language-heuristic.ts → browser-language/browser-language-heuristic.ts} +1 -1
- package/src/collection-facets/smart-facets/heuristics/index.ts +3 -0
- package/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-heuristic.ts +17 -0
- package/src/collection-facets/smart-facets/heuristics/query-keywords/query-keywords-map.ts +54 -0
- package/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-entity-map.ts +79 -0
- package/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.ts +96 -0
- package/src/collection-facets/smart-facets/models.ts +4 -0
- package/src/collection-facets/smart-facets/smart-facet-heuristics.ts +12 -7
- package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.js.map +0 -1
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js +0 -45
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js.map +0 -1
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.d.ts +0 -5
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js +0 -173
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js.map +0 -1
- package/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.ts +0 -55
- package/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.ts +0 -191
- /package/dist/src/collection-facets/smart-facets/heuristics/{browser-language-heuristic.js → browser-language/browser-language-heuristic.js} +0 -0
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
SmartQueryHeuristic,
|
|
3
|
-
KeywordFacetMap,
|
|
4
|
-
SmartFacet,
|
|
5
|
-
} from '../models';
|
|
6
|
-
|
|
7
|
-
// If wikidata describes the top query result as X, recommend facet Y, e.g.:
|
|
8
|
-
// X Y
|
|
9
|
-
// written work mt:texts
|
|
10
|
-
// film mt:movies
|
|
11
|
-
// author mt:texts and creator:<query>
|
|
12
|
-
// filmmaker mt:movies and creator:<query>
|
|
13
|
-
// photographer mt:image and creator:<query>
|
|
14
|
-
// visual artist mt:image and creator:<query>
|
|
15
|
-
// etc.
|
|
16
|
-
export class WikidataHeuristic implements SmartQueryHeuristic {
|
|
17
|
-
private static readonly ENTITIES: KeywordFacetMap = {
|
|
18
|
-
'written work': [
|
|
19
|
-
{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] },
|
|
20
|
-
],
|
|
21
|
-
literature: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
|
|
22
|
-
book: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
|
|
23
|
-
novel: [{ facets: [{ facetType: 'mediatype', bucketKey: 'texts' }] }],
|
|
24
|
-
filmmaker: [
|
|
25
|
-
{
|
|
26
|
-
label: 'Films by __QUERY',
|
|
27
|
-
facets: [
|
|
28
|
-
{ facetType: 'mediatype', bucketKey: 'movies' },
|
|
29
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
30
|
-
],
|
|
31
|
-
},
|
|
32
|
-
],
|
|
33
|
-
author: [
|
|
34
|
-
{
|
|
35
|
-
label: 'Writing by __QUERY',
|
|
36
|
-
facets: [
|
|
37
|
-
{ facetType: 'mediatype', bucketKey: 'texts' },
|
|
38
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
39
|
-
],
|
|
40
|
-
},
|
|
41
|
-
],
|
|
42
|
-
writer: [
|
|
43
|
-
{
|
|
44
|
-
label: 'Writing by __QUERY',
|
|
45
|
-
facets: [
|
|
46
|
-
{ facetType: 'mediatype', bucketKey: 'texts' },
|
|
47
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
48
|
-
],
|
|
49
|
-
},
|
|
50
|
-
],
|
|
51
|
-
poet: [
|
|
52
|
-
{
|
|
53
|
-
label: 'Writing by __QUERY',
|
|
54
|
-
facets: [
|
|
55
|
-
{ facetType: 'mediatype', bucketKey: 'texts' },
|
|
56
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
57
|
-
],
|
|
58
|
-
},
|
|
59
|
-
],
|
|
60
|
-
photographer: [
|
|
61
|
-
{
|
|
62
|
-
label: 'Images by __QUERY',
|
|
63
|
-
facets: [
|
|
64
|
-
{ facetType: 'mediatype', bucketKey: 'image' },
|
|
65
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
66
|
-
],
|
|
67
|
-
},
|
|
68
|
-
],
|
|
69
|
-
painter: [
|
|
70
|
-
{
|
|
71
|
-
label: 'Images by __QUERY',
|
|
72
|
-
facets: [
|
|
73
|
-
{ facetType: 'mediatype', bucketKey: 'image' },
|
|
74
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
75
|
-
],
|
|
76
|
-
},
|
|
77
|
-
],
|
|
78
|
-
'visual artist': [
|
|
79
|
-
{
|
|
80
|
-
label: 'Images by __QUERY',
|
|
81
|
-
facets: [
|
|
82
|
-
{ facetType: 'mediatype', bucketKey: 'image' },
|
|
83
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
84
|
-
],
|
|
85
|
-
},
|
|
86
|
-
],
|
|
87
|
-
'graphic artist': [
|
|
88
|
-
{
|
|
89
|
-
label: 'Images by __QUERY',
|
|
90
|
-
facets: [
|
|
91
|
-
{ facetType: 'mediatype', bucketKey: 'image' },
|
|
92
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
93
|
-
],
|
|
94
|
-
},
|
|
95
|
-
],
|
|
96
|
-
singer: [
|
|
97
|
-
{
|
|
98
|
-
label: 'Music by __QUERY',
|
|
99
|
-
facets: [
|
|
100
|
-
{ facetType: 'mediatype', bucketKey: 'audio' },
|
|
101
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
102
|
-
],
|
|
103
|
-
},
|
|
104
|
-
],
|
|
105
|
-
songwriter: [
|
|
106
|
-
{
|
|
107
|
-
label: 'Music by __QUERY',
|
|
108
|
-
facets: [
|
|
109
|
-
{ facetType: 'mediatype', bucketKey: 'audio' },
|
|
110
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
111
|
-
],
|
|
112
|
-
},
|
|
113
|
-
],
|
|
114
|
-
musician: [
|
|
115
|
-
{
|
|
116
|
-
label: 'Music by __QUERY',
|
|
117
|
-
facets: [
|
|
118
|
-
{ facetType: 'mediatype', bucketKey: 'audio' },
|
|
119
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
120
|
-
],
|
|
121
|
-
},
|
|
122
|
-
],
|
|
123
|
-
composer: [
|
|
124
|
-
{
|
|
125
|
-
label: 'Music by __QUERY',
|
|
126
|
-
facets: [
|
|
127
|
-
{ facetType: 'mediatype', bucketKey: 'audio' },
|
|
128
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
129
|
-
],
|
|
130
|
-
},
|
|
131
|
-
],
|
|
132
|
-
pianist: [
|
|
133
|
-
{
|
|
134
|
-
label: 'Music by __QUERY',
|
|
135
|
-
facets: [
|
|
136
|
-
{ facetType: 'mediatype', bucketKey: 'audio' },
|
|
137
|
-
{ facetType: 'creator', bucketKey: '__QUERY' },
|
|
138
|
-
],
|
|
139
|
-
},
|
|
140
|
-
],
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
async getRecommendedFacets(query: string): Promise<SmartFacet[]> {
|
|
144
|
-
const recommendations: SmartFacet[] = [];
|
|
145
|
-
|
|
146
|
-
try {
|
|
147
|
-
const urlQuery = encodeURIComponent(query);
|
|
148
|
-
|
|
149
|
-
const wikidataResponse = await fetch(
|
|
150
|
-
`https://www.wikidata.org/w/api.php?action=wbsearchentities&search=${urlQuery}&format=json&language=en&uselang=en&origin=*&type=item&limit=5`,
|
|
151
|
-
);
|
|
152
|
-
const searchResults = await wikidataResponse.json();
|
|
153
|
-
|
|
154
|
-
for (const [keyword, facets] of Object.entries(
|
|
155
|
-
WikidataHeuristic.ENTITIES,
|
|
156
|
-
)) {
|
|
157
|
-
const keywordRegex = new RegExp(`\\b${keyword}\\b`);
|
|
158
|
-
if (keywordRegex.test(searchResults.search[0]?.description)) {
|
|
159
|
-
const entityName = searchResults.search[0].label;
|
|
160
|
-
recommendations.push(
|
|
161
|
-
...facets.map(
|
|
162
|
-
sf =>
|
|
163
|
-
({
|
|
164
|
-
label: sf.label?.replace('__QUERY', entityName),
|
|
165
|
-
facets: sf.facets.map(f => {
|
|
166
|
-
const replaced = {
|
|
167
|
-
...f,
|
|
168
|
-
bucketKey: f.bucketKey.replace('__QUERY', query),
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
if (f.displayText) {
|
|
172
|
-
replaced.displayText = replaced.displayText?.replace(
|
|
173
|
-
'__QUERY',
|
|
174
|
-
entityName,
|
|
175
|
-
);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
return replaced;
|
|
179
|
-
}),
|
|
180
|
-
}) as SmartFacet,
|
|
181
|
-
),
|
|
182
|
-
);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return recommendations;
|
|
187
|
-
} catch {
|
|
188
|
-
return [];
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|