Эта служба поиска предназначена для связывания данных о вхождениях с коллекциями. Он будет использовать данные коллекций для поиска, но это поведение может быть перезаписано машинными тегами набора данных.
Этот сервис может получать следующие параметры:
Если в наборе данных есть машинные теги, мы используем их и останавливаем поиск.
Сервис должен возвращать, насколько хорошо совпадение (точное, нечеткое и т. д.). Точные совпадения будут иметь место только в том случае, если совпадают коды и идентификаторы, или они не противоречат друг другу (например, присутствуют только на одной стороне).
Что-нибудь еще? есть ли другие параметры, которые полезно учитывать?
Я добавил в DEV первую версию службы поиска коллекций (она по-прежнему не использует машинные теги), чтобы убедиться, что это то, что мы ожидали.
Он возвращает список совпадений учреждений и еще один для совпадений коллекций. Это список, потому что коды не уникальны, поэтому могут быть случаи, когда у нас может быть несколько вариантов, и мы не можем различать их по какому-либо другому полю.
Для каждого матча показывает:
exact
или fuzzy
. exact
только в том случае, если совпадают и код, и идентификатор. В противном случае это fuzzy
.CODE_MATCH
: регистр не игнорируетсяIDENTIFIER_MATCH
: регистр не игнорируетсяALTERNATIVE_CODE_MATCH
: регистр не игнорируетсяNAME_MATCH
: игнорирует регистр и удаляет диакритические знаки и пробелы, но не выполняет сопоставление префикса или суффикса.PROBABLY_ON_LOAN
: это происходит, когда организация-владелец и организация не совпадаютINST_COLL_MISMATCH
: это происходит, когда учреждение коллекции не присутствует в соответствующих учреждениях.Когда есть совпадения учреждений, коллекция нечетко совпадает только в том случае, если она принадлежит какому-либо из сопоставленных учреждений. Точные совпадения коллекций всегда будут возвращены.
Вы можете проверить эти примеры, чтобы увидеть, как работает сервис:
INST_COLL_MISMATCH
PROBABLY_ON_LOAN
Я что-то упустил @MortenHofft @timrobertson100 ?
Я добавил проверку тега машины в формате, который уже использовался в конвейерах :
processing.gbif.org
institutionCode
: сопоставляет код учреждения с учреждением GrSciColl.collectionCode
: сопоставляет код коллекции с коллекцией GrSciColl.collectionToInstitutionCode
: сопоставляет код коллекции с учреждением GrSciColl. Я бы, наверное, переименовал его в collectionCodeToInstitution
(подлежит уточнению).institutionToCollectionCode
: сопоставляет код учреждения с коллекцией GrSciColl. Я бы, наверное, переименовал его в institutionCodeToCollection
(подлежит уточнению).Значение тегов должно соответствовать шаблону {key}:{code}
.
Выглядит хорошо - мне очень любопытно увидеть, как это применимо к реальным данным.
многословно или нет
Должны ли у нас быть «подробные» опции, как при сопоставлении видов?
Если мы представим, что кто-то, кроме персонала, использует это, может быть полезно просто иметь опцию match or none
. Скажите Plazi, используя его для создания ссылок из кодов коллекций в статьях.
// plain lookup - not verbose - will at most return one institution and one collection.
{
institutionMatch: {
matchType: 'NONE'
},
{
collectionMatch: {
matchType: 'FUZZY',
reasons: ['SAME_NAME', 'SAME_CODE', 'SAME_COUNTRY'],
entity: {
...
}
}
}
}
// verbose option
// could be like the one running in dev
{
"institutionMatches": [],
"collectionMatches": [
...
]
}
по именованию
API сопоставления видов использует matchType
вместо type
, а кластеры используют reasons
вместо remarks
.
Реальные данные
Прежде чем запускать его на реальных данных, мне интересно, стоит ли просто проверить 500 лучших различных комбинаций кода учреждения/идентификатора colectionCode/ID и вручную оценить некоторые из них? Мы могли бы чему-то научиться (скажем, нам нужно попытаться перевернуть идентификатор и код)
Что представляет собой матч?
Как вы думаете, когда это вызовет совпадение?
Страна как средство устранения неоднозначности
Имеет ли смысл добавить страну в качестве параметра поиска? При индексировании вхождений мы могли бы добавить страну издателя, чтобы устранить неоднозначность, когда есть, например, 2 совпадения коллекций? Или это лучше сделать, если потребитель повторяет результаты?
Я просто попытался сопоставить на основе извлечения csv, которое у меня было некоторое время назад.
CSV отличается institutionId, institutionCode, datasetKey, publisherKey
с количеством вхождений для каждого.
Я взял все, что содержит более 2500 вхождений, и попытался сопоставить их с сервисом.
105,871,241 occurrences had a single match
24,553,278 with an exact singular match
27,113,941 occurrences had multiple matches
34,998,066 occurrences had no match
2,374 combinations was tested against the service (multiple can be the same since it included dataset and publisher)
Это неплохое начало. Хотя я не оценивал качество матчей.
_Что представляет собой совпадение?_
Как вы думаете, когда это вызовет совпадение?
- Только точно?
- Нечеткий, но только один результат
- Точное учреждение, но только одна нечеткая коллекция?
Под этим вы имеете в виду неподробную версию, где мы показываем только 1 совпадение, верно?
Это может быть что-то вроде:
Считаете ли вы, что мы должны также предоставить общий статус матча?
_Что представляет собой совпадение?_
Как вы думаете, когда это вызовет совпадение?
- Только точно?
- Нечеткий, но только один результат
- Точное учреждение, но только одна нечеткая коллекция?
Под этим вы имеете в виду неподробную версию, где мы показываем только 1 совпадение, верно?
Я имел в виду при использовании его в конвейерах для назначения идентификаторов GrSciColl для вхождений. Я представлял себе, что эта услуга включает в себя решение и всю логику. Как это работает для других поисковых сервисов?
Это напомнило мне, что вы упомянули на днях, что рассматривали возможность добавления всех совпадающих идентификаторов в индекс вхождений.
Я предполагаю, что есть 2 возможных версии:
Я больше за версию 2. Добавлять идентификатор GrSciColl к вхождению только тогда, когда у нас есть 1 достоверное совпадение. Не массив совпадений-кандидатов. И если мы хотим больше совпадений, мы обращаемся к издателям с просьбой добавить лучшие идентификаторы либо к GrSciColl, либо к вхождениям. Или мы добавляем машинные теги в наборы данных на всякий случай.
Если полезно индексировать всех кандидатов, можем ли мы рассмотреть для этого отдельное поле?
Должна ли служба возвращать флаги. НЕЧЕТКОЕ СОВПАДЕНИЕ КОДА КОЛЛЕКЦИИ. НЕТ СОВПАДЕНИЯ КОЛЛЕКЦИОННОГО КОДА. Подобно сервису подбора видов.
Я могу думать об этих флагах:
AMBIGUOUS_INSTITUTION
: было найдено более 1 учреждения, и мы не смогли решить ничьихAMBIGUOUS_COLLECTION
: то же, что и выше, но для коллекцийFUZZY_INSTITUTION_MATCH
: 1 учреждение соответствует, но нечеткоFUZZY_COLLECTION_MATCH
: то же, что и выше, но для коллекцийINSTITUTION_NAME_USED
: поле institutionCode
содержит название учреждения вместо кодаOWNER_INSTITUTION_NAME_USED
: то же, что и выше, но для учреждения-владельцаCOLLECTION_NAME_USED
: то же, что и выше, но для коллекций.NO_COLLECTION_CODE_MATCH
: предоставленный код не соответствуетNO_INSTITUTION_CODE_MATCH
: то же, что и вышеNO_COLLECTION_ID_MATCH
: предоставленный идентификатор не совпадаетNO_INSTITUTION_ID_MATCH
: то же, что и вышеINSTITUTION_COLLECTION_MISMATCH
: найденная коллекция не принадлежит совпадающему учреждениюРЕДАКТИРОВАТЬ: INSTITUTION_NAME_USED
, возможно, можно удалить и просто использовать FUZZY_INSTITUTION_MATCH
для этих случаев. Не знаю, что было бы полезнее для издателей
Мне это нравится — у меня сложилось впечатление, что многие издатели ценят эти флаги и действуют в соответствии с ними. Это даст им информацию для изменения данных и улучшения сопоставления.
Служба теперь возвращает ответ, например:
{
"institutionMatch": {
...
},
"collectionMatch": {
...
},
alternativeMatches {
institutionMatches: []
collectionMatches: []
}
}
Альтернативные совпадения отображаются только в том случае, если для параметра verbose
установлено значение true. Нечеткие совпадения ограничены 20 результатами из соображений производительности.
Также был добавлен параметр Country
, используемый для разрыва связей: http://api.gbif-dev.org/v1/grscicoll/lookup?institutionCode=BR&country=BE&verbose=true
Совпадение происходит, если выполняется любое из этих условий:
Кроме того, учреждения, чей владелец отличается от учреждения, не считаются совпадающими. Кроме того, коллекции, учреждение которых не соответствует принятому учреждению, также не считаются соответствующими.
Я не добавил флаги, а вместо этого добавил поле статуса:
ACCEPTED
: совпадение принятоAMBIGUOUS
: было найдено более 1 результата, и мы не смогли разрешить ничьюAMBIGUOUS_MACHINE_TAGS
: то же, что и выше, но с совпадением тега машиныAMBIGUOUS_OWNER
: есть результаты, но они не совпадают с владельцем учреждения, поэтому мы пропускаем их, чтобы не связывать сборы по кредитам.AMBIGUOUS_INSTITUTION_MISMATCH
: есть нечеткие совпадения, но они не принадлежат совпадающему учреждениюDOUBTFUL
: найденное совпадение нечеткоеОстальные флаги можно вывести из поля совпадения reasons
. Проблемы могут быть установлены из этого поля в пайплайнах.
Я извлек из наших данных в PROD комбинации этих полей, которые присутствуют более чем в 1000 записях:
v_institutionid
v_institutioncode
v_ownerinstitutioncode
v_collectioncode
v_collectionid
datasetkey
Кроме того, я взял страну из организации, опубликовавшей набор данных.
Затем я передал их службе поиска в UAT. Результаты в этой рассылке
Самый полезный комментарий
Я просто попытался сопоставить на основе извлечения csv, которое у меня было некоторое время назад.
CSV отличается
institutionId, institutionCode, datasetKey, publisherKey
с количеством вхождений для каждого.Я взял все, что содержит более 2500 вхождений, и попытался сопоставить их с сервисом.
Это неплохое начало. Хотя я не оценивал качество матчей.