From 791457ca5540af3308f626ca214ebcd074c74ed0 Mon Sep 17 00:00:00 2001 From: Lucas Anki Date: Mon, 30 Mar 2026 08:54:26 +0200 Subject: [PATCH 1/3] [authors-tools] Fix Orcid email error --- services/authors-tools/Dockerfile | 1 + .../v1/orcid-disambiguation/disambiguate.py | 35 ++++++++++++++----- .../orcidDisambiguation.py | 6 +--- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/services/authors-tools/Dockerfile b/services/authors-tools/Dockerfile index 4dc0c51f7..e1f00ece4 100644 --- a/services/authors-tools/Dockerfile +++ b/services/authors-tools/Dockerfile @@ -4,6 +4,7 @@ FROM python:3.9-slim-bullseye AS dvcfiles WORKDIR /dvc RUN apt-get update && apt-get -y --no-install-recommends install git=1:2.30.2-1+deb11u5 && apt-get clean && rm -rf /var/lib/apt/lists/* RUN pip install --no-cache-dir dvc[webdav]==3.42.0 +RUN pip install "pathspec==0.10.3" RUN --mount=type=secret,id=webdav_login \ --mount=type=secret,id=webdav_password \ --mount=type=secret,id=webdav_url \ diff --git a/services/authors-tools/v1/orcid-disambiguation/disambiguate.py b/services/authors-tools/v1/orcid-disambiguation/disambiguate.py index b1b215e84..ca5c5e100 100644 --- a/services/authors-tools/v1/orcid-disambiguation/disambiguate.py +++ b/services/authors-tools/v1/orcid-disambiguation/disambiguate.py @@ -8,9 +8,13 @@ from requests.auth import HTTPBasicAuth import os + def getPoints(liste): return liste[2] +def getSecondaryPoints(liste): + return liste[3] + class disambiguate: def __init__(self, infoDic, nameDepth = 20, worksDepth = 20): @@ -166,9 +170,13 @@ def splitFirstName(self,name): return choice def checkEmail(self,email): + mails = [] for em in self.infoDic["email"]: - if em == email: - return True,em + for mail in email.split(","): + if em == mail: + mails.append(em) + if len(mails) > 0: + return True,em return False,0 def disambiguation(self): @@ -183,7 +191,7 @@ def disambiguation(self): if "email" in self.infoDic: #check email end,em = self.checkEmail(personInfos["email"]) if end: - return [[orcid,["Email "+em],100]] + return [[orcid,["Email "+em],100]][0][0] works = self.getWorksFromOrcid(orcid) time.sleep(self.timeBetweenrequest) @@ -194,7 +202,7 @@ def disambiguation(self): for tit in [title.lower() for title in worksInfo["title"]]: ratio = SequenceMatcher(None, title.lower(), tit).ratio() #check similarity between title if ratio > 0.7: - return [[orcid,["title "+tit],100]] + return [[orcid,["title "+tit],100]][0][0] if "coAuthors" in self.infoDic: #check coAuthors authorsPutcode = [] @@ -206,7 +214,7 @@ def disambiguation(self): choices = self.splitFirstName(author) for choice in choices: if choice in [auth.lower() for auth in authors]: - return [[orcid,["Co-authors "+choice],100]] + return [[orcid,["Co-authors "+choice],100]][0][0] if "affiliations" in self.infoDic: #check affiliations for affiliation in self.infoDic["affiliations"]: @@ -226,6 +234,7 @@ def disambiguation(self): points += 5 matchArg.append("Match LastName ") + personInfos["secondaryScore"] = len(worksInfo["title"]) personInfos["points"] = points personInfos["matchArg"] = matchArg @@ -233,7 +242,17 @@ def disambiguation(self): finalReturn = [] for personInfos in personsInfos: if personInfos["points"] != 0: - finalReturn.append([personInfos["orcid"],personInfos["matchArg"],personInfos["points"]]) - + finalReturn.append([personInfos["orcid"],personInfos["matchArg"], + personInfos["points"], personInfos["secondaryScore"]]) + #Better score first finalReturn.sort(key=getPoints,reverse=True) - return finalReturn + #if multiples sort based on secondary score + if len(finalReturn) == 0: + return "None" + max_score = finalReturn[0][2] + finalReturn = [t for t in finalReturn if t[2] == max_score] + if len(finalReturn) == 1: + return finalReturn[0][0] + else: + finalReturn.sort(key=getSecondaryPoints, reverse=True) + return [t[0] for t in finalReturn] diff --git a/services/authors-tools/v1/orcid-disambiguation/orcidDisambiguation.py b/services/authors-tools/v1/orcid-disambiguation/orcidDisambiguation.py index 7889195f3..ec624a8e3 100755 --- a/services/authors-tools/v1/orcid-disambiguation/orcidDisambiguation.py +++ b/services/authors-tools/v1/orcid-disambiguation/orcidDisambiguation.py @@ -17,11 +17,7 @@ def main(nameDepth = 20, worksDepth = 20): res = [] for info in data['value'].copy(): db = disambiguate(info,nameDepth=nameDepth, worksDepth=worksDepth ) - result = db.disambiguation() - if len(result)>0: - res.append(result[0][0]) - else: - res.append("None") + res.append(db.disambiguation()) data["value"] = res sys.stdout.write(json.dumps(data)) sys.stdout.write('\n') From 3a96e560981064569d7d93c48f12b6af125f1ba5 Mon Sep 17 00:00:00 2001 From: Luc-Ank <60920551+Luc-Ank@users.noreply.github.com> Date: Tue, 7 Apr 2026 14:16:34 +0200 Subject: [PATCH 2/3] Update services/authors-tools/Dockerfile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: François Parmentier --- services/authors-tools/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/authors-tools/Dockerfile b/services/authors-tools/Dockerfile index e1f00ece4..4ec216a30 100644 --- a/services/authors-tools/Dockerfile +++ b/services/authors-tools/Dockerfile @@ -4,7 +4,7 @@ FROM python:3.9-slim-bullseye AS dvcfiles WORKDIR /dvc RUN apt-get update && apt-get -y --no-install-recommends install git=1:2.30.2-1+deb11u5 && apt-get clean && rm -rf /var/lib/apt/lists/* RUN pip install --no-cache-dir dvc[webdav]==3.42.0 -RUN pip install "pathspec==0.10.3" +RUN pip install --no-cache-dir "pathspec==0.10.3" RUN --mount=type=secret,id=webdav_login \ --mount=type=secret,id=webdav_password \ --mount=type=secret,id=webdav_url \ From 39c06e703b4ee3f07651682c6ec2a6fb34a8ad9d Mon Sep 17 00:00:00 2001 From: Lucas Anki Date: Tue, 7 Apr 2026 14:20:09 +0200 Subject: [PATCH 3/3] fix typo --- services/authors-tools/v1/orcid-disambiguation/disambiguate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/authors-tools/v1/orcid-disambiguation/disambiguate.py b/services/authors-tools/v1/orcid-disambiguation/disambiguate.py index ca5c5e100..f2a35dc62 100644 --- a/services/authors-tools/v1/orcid-disambiguation/disambiguate.py +++ b/services/authors-tools/v1/orcid-disambiguation/disambiguate.py @@ -176,7 +176,7 @@ def checkEmail(self,email): if em == mail: mails.append(em) if len(mails) > 0: - return True,em + return True,mails return False,0 def disambiguation(self):