mirror of
https://github.com/nexus-stc/hyperboria
synced 2024-12-11 20:27:50 +01:00
61 lines
1.3 KiB
Python
61 lines
1.3 KiB
Python
|
import re
|
||
|
from enum import Enum
|
||
|
|
||
|
from nexus.nlptools.regex import (
|
||
|
DOI_REGEX,
|
||
|
ISBN_REGEX,
|
||
|
NID_REGEX,
|
||
|
URL_REGEX,
|
||
|
)
|
||
|
|
||
|
# ToDo: redo all, code is logically incorrect now
|
||
|
|
||
|
|
||
|
class QueryClass(Enum):
|
||
|
Default = 'default'
|
||
|
DOI = 'doi'
|
||
|
ISBN = 'isbn'
|
||
|
NID = 'nid'
|
||
|
URL = 'url'
|
||
|
|
||
|
|
||
|
def check_doi(query) -> (QueryClass, str):
|
||
|
# ToDo: rewrite normally, just hotfixed
|
||
|
if query.startswith('references:'):
|
||
|
return
|
||
|
if r := re.search(DOI_REGEX, query):
|
||
|
doi = (r[1] + '/' + r[2]).lower()
|
||
|
return {
|
||
|
'doi': doi,
|
||
|
'query': f'doi:"{doi}"',
|
||
|
'class': QueryClass.DOI,
|
||
|
}
|
||
|
|
||
|
|
||
|
def check_isbn(query: str) -> (QueryClass, str):
|
||
|
if r := re.search(ISBN_REGEX, query):
|
||
|
isbn = r[1].replace('-', '')
|
||
|
return {
|
||
|
'isbn': isbn,
|
||
|
'query': 'isbns:' + isbn,
|
||
|
'class': QueryClass.ISBN
|
||
|
}
|
||
|
|
||
|
|
||
|
def check_nid(query: str) -> (QueryClass, str):
|
||
|
if r := re.search(NID_REGEX, query):
|
||
|
return {
|
||
|
'id': r[1],
|
||
|
'query': 'id:' + r[1],
|
||
|
'class': QueryClass.NID,
|
||
|
}
|
||
|
|
||
|
|
||
|
def check_url(query: str) -> (QueryClass, str):
|
||
|
if r := re.search(URL_REGEX, query):
|
||
|
return {
|
||
|
'url': r[0],
|
||
|
'query': r[0],
|
||
|
'class': QueryClass.URL,
|
||
|
}
|