Identifier les éléments communs à plusieurs textes

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Arthur Petitdemange
Messages : 3
Enregistré le : 18 Juil 2019, 20:20

Identifier les éléments communs à plusieurs textes

Messagepar Arthur Petitdemange » 23 Juil 2019, 20:53

Bonjour,

Je cherche à identifier, parmi les médicaments en cours de développements dans différentes maladies, ceux qui sont en développement dans au moins deux d'entre elles. Dans mon fichier Excel, les différents médicaments à l'étude dans une maladie sont disposés en colonnes (avec une colonne = une maladie). Je souhaite donc identifier les éléments qui sont présents dans plusieurs colonnes (au moins 2) à la fois. Ce qui complique la tâche, c'est que la dénomination d'un même médicament peut varier d'une cellule à l'autre (par ex. ça peut être belimumab, belimumab 200 mg, ou encore belimumab + corticoïde, etc.), pour autant il faudrait que ce médicament (belimumab dans cet exemple) soit identifié comme étant commun à plusieurs maladies.

Une solution à ce problème peut-elle être envisagée avec l'utilisation de R ?

Ci-joint un exemple avec 4 colonnes correspondant à 4 maladies : https://transfernow.net/291dr8d8t48x

Merci !

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Identifier les éléments communs à plusieurs textes

Messagepar Pierre-Yves Berrard » 24 Juil 2019, 08:02

Bonjour,

Le problème des variantes dans les dénominations doit pouvoir se gérer avec les expressions régulières.

Je n'ai pas accès au site de partage de fichiers que vous utilisez. Le plus simple serait de partager vos données de cette façon.
PY

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: Identifier les éléments communs à plusieurs textes

Messagepar François Bonnot » 24 Juil 2019, 08:17

Bonjour,
Voici une suggestion rapide.
Le filtrage est basique, il faudrait l'améliorer en fonction des caractères à supprimer et d'autres critères à définir.

Code : Tout sélectionner

## lecture des données du fichier mentionné ci-dessus
library(XLConnect) ## il existe d'autres packages
df <- readWorksheetFromFile("Comparaison.xlsx",sheet=1)
##

extrait.mots <- function(x,col) {
    li <- lapply(x,function(v) strsplit(v,' ')[[1]])
    z <- do.call(c,li)
    z <- z[!is.na(z)]
    ## exemple de filtrage
    z <- gsub('\\(','',z)
    z <- gsub('\\)','',z)
    z <- z[nchar(z)>3]
    ##
    d <- data.frame(mot=sort(unique(tolower(z))),k=1)
    names(d)[2] <- paste0("col",col)
    d
}

li <- lapply(1:ncol(df), function(i) extrait.mots(df[[i]],i))
df2 <- li[[1]]
for (i in 2:length(li)) df2 <- merge(df2,li[[i]],all=TRUE)
for (i in 2:ncol(df2)) df2[[i]][is.na(df2[[i]])] <- 0
df2$sum <- rowSums(as.matrix(df2[-1]))
df3 <- df2[df2$sum>1,]
df3[1:100,]
François

Arthur Petitdemange
Messages : 3
Enregistré le : 18 Juil 2019, 20:20

Re: Identifier les éléments communs à plusieurs textes

Messagepar Arthur Petitdemange » 28 Juil 2019, 09:41

Je n'ai pas réussi à faire mieux pour l'insertion de mes données...

"Interventions PR", "Interventions SpA", "Interventions SEP" et Interventions ScS" correspondent aux 4 maladies prises en exemple avec en dessous de chacune d'elle les traitements à l'étude.
Ce sont les traitements communs à au moins deux maladies que je cherche à mettre en évidence (par exemple le médicament appelé adalimumab, qu'on retrouve ligne 14 dans Interventions PR : "New formulation adalimumab" et ligne 12 dans Interventions SpA : "Adalimumab").

Code : Tout sélectionner

                                                Interventions.PR
1  Combination Product: DMARD´s and multidisciplinary treatment
2                  Biobank creation and Pharmacogenetic analysis
3
4
5
6                                    blood samplesynovial tissue
7                                                  VAY736VAY736
8                                  Dextromethorphan hydrobromide
9              ProteinCarbohydrate ()Resistance Exercise Program
10                                                      ABBV-257
11                                           AZD9567Prednisolone
12                                             Hyperbaric Oxygen
13                                           measurement of GITR
14                                    New formulation adalimumab
15
16     disease modified antirheumatic drugs or biological agents
17
                                                            Interventions.SpA
1   Jitongning tablet Jitongning tablet,Jitongning tablet  Jitongning tablet
2                                                                 Tofacitinib
3
4                                   Video coaching exercisesRoutine exercises
5                                                              Radiation: EOS
6                                                          Brodalumab 210 mg
7                    AdalimumabNon-steroidal Anti-inflammatory Drugs (NSAIDs)
8                                                                 Ixekizumab
9
10                                                                   KHK4827
11                                                anti drug antibodies dosage
12                                                                Adalimumab
13                                                             AIN457 AIN457
14                          Secukinumab/Adalimumab-BiosimilarStandard-of-care
15                                               Tofacitinib 5 mg, Etanercept
16        self-assessment/self-managementComorbidities (detection/prevention)
17                                                                Bimekizumab
                                                   Interventions.SEP
1  ketogenic dietIntermittent therapeutical fastingActive comparator
2              Interferon beta-1b (Betaseron, Betaferon, BAY86-5046)
3                                                        Data search
4                   Mindfulness Behavioural Intervention (MBI) group
5                                                        Ocrelizumab
6                                                          Reh1,Reh2
7                                                       Ublituximab
8
9                               Imatinib Mesylate Methylprednisolone
10 anti-aquaporin-4 antibodyanti-myelin oligodendrocyte glycoprotein
11                                           ponesimod teriflunomide
12                                                           ABT-555
13                                                     Teriflunomide
14
15                   Autologous Hematopoietic Stem Cell BEAM Regimen
16
17                            cognitive remediation program: REHACOP
                                          Interventions.ScS
1   Belimumab Rituximab Subcutaneous Injection Infusion MMF
2                    Radiation: RadiographyVeinous punction
3               This is an observational prospective study.
4                                       Nilotinib (Tasigna)
5                                                 Belimumab
6                           Prednisolone 5 mg  oral capsule
7                                                paquinimod
8                     Home-care rehabilitation group (HCRG)
9         injection of autologous stromal vascular fraction
10
11                                        Imatinib Mesylate
12
13      Methotrexate Mycophenolate mofetil Cyclophosphamide
14                               Magnetic resonance Imaging
15                                        Rituximab  (NaCl)
16                                 Tofacitinib  Oral Tablet
17                     JBT-101  Part B Open-Label Extension

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: Identifier les éléments communs à plusieurs textes

Messagepar François Bonnot » 29 Juil 2019, 07:17

Ce sont les traitements communs à au moins deux maladies que je cherche à mettre en évidence (par exemple le médicament appelé adalimumab, qu'on retrouve ligne 14 dans Interventions PR : "New formulation adalimumab" et ligne 12 dans Interventions SpA : "Adalimumab").

Bonjour,
C'est bien le résultat donné par mon script, l'avez-vous essayé ?

Code : Tout sélectionner

> df3[28,]
           mot col1 col2 col3 col4 sum
188 adalimumab    1    1    0    0   2

col1 à col4 correspondent évidemment aux 4 colonnes de votre fichier, donc aux 4 maladies.
François

Arthur Petitdemange
Messages : 3
Enregistré le : 18 Juil 2019, 20:20

Re: Identifier les éléments communs à plusieurs textes

Messagepar Arthur Petitdemange » 30 Juil 2019, 19:54

Bonsoir,

Merci beaucoup pour votre réponse François, c'est exactement ce que je cherchais.

Cependant, en "screenant" un peu au hasard les résultats donnés par votre script (afin de m'assurer qu'effectivement toutes les molécules communes sont bien identifiées et qu'aucune ne "passe à la trappe") j'ai remarqué qu'il n'identifiait pas le mot "oil", alors qu'il est retrouvé dans chacune des maladies (olive oil, fish oil, etc.). C'est juste un exemple sur lequel je suis tombé par hasard, en soit le médicament "oil" m'importe peu. Mais je me dit que si le médicament "oil" n'est pas relevé, d'autres ont également pu être manqués (et je ne peux bien sûr pas tout vérifier point par point, je perdrais tout le gain de temps fourni par ce script).

Comment avez-vous paramétré le filtrage ? Ces paramètres de filtrage pourraient-ils expliquer cette omission (et peut-être d'autres que je n'ai pas relevé) ?

Je joins une nouvelle version du fichier Excel dans laquelle j'ai supprimé certains éléments parasites, ce qui permet de rendre les résultats plus lisibles.
https://transfernow.net/243jo0k9jwey

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: Identifier les éléments communs à plusieurs textes

Messagepar François Bonnot » 31 Juil 2019, 07:04

Bonjour,
Mon script est rudimentaire et a seumlement pour objectif de vous suggérer une solution à améliorer. Comme je l'ai indiqué, le filtrage est basique:

Code : Tout sélectionner

    z <- gsub('\\(','',z)
    z <- gsub('\\)','',z)
    z <- z[nchar(z)>3]

Les 2 premières lignes éliminenet les parenthèses (il faudrait faire de même pour les crochets).
La 3ème élimine les mots de longueur 1 à 3 (les conjonctions "and", "or", les nombres isolés... c'est pour ça que "oil" est éliminé.
Pour conserver ces mots, il suffit de modifier la condition ou de la supprimer.
Par aileurs il existe beaucoup de possibilités d'amélioration, par exemple il ne serait pas très compliqué d'éliminer systématiquement les chiffres ou d'établir une table de tous les mots à éliminer ou au contraire des mots à conserver, et de l'utiliser pour le filtrage.

Par exemple voici les 10 premières lignes de votre nouveau fichier :

Code : Tout sélectionner

df <- structure(list(Interventions.PR = c("Combination Product: DMARD´s and multidisciplinary treatment",
"Biobank creation and Pharmacogenetic analysis", NA, NA, NA,
"blood sample synovial tissue", " VAY736  VAY736 placebo", "Dextromethorphan hydrobromide",
" Protein  Carbohydrate (Placebo) Resistance Exercise Program",
" ABBV-257  Placebo"), Interventions.SpA = c("Jitongning tablet Jitongning tablet,Jitongning tablet placebo Jitongning tablet placebo",
"Tofacitinib", "Video coaching exercises Routine exercises",
"Brodalumab 210 mg Placebo", " Adalimumab Non-steroidal Anti-inflammatory Drugs (NSAIDs)",
"Ixekizumab Placebo", "KHK4827 Placebo", " anti drug antibodies dosage",
"Adalimumab Placebo", " AIN457 AIN457 Placebo"), Interventions.LS = c("Dihydroartemisinin tablet Placebo tablet",
"MT-1303 Low dose MT-1303 High dose", " Hiomega-3 supplement of Naturalis® company -",
"Placebo ACT-334441", "\"Walk With Ease\"", "Ramipril", "AMG 592 Placebo",
" Anifrolumab Placebo", " Anifrolumab Placebo", " Psychotherapy"
), Interventions.ScS = c("Belimumab Rituximab Placebo Subcutaneous Injection Placebo Infusion MMF",
"Nilotinib (Tasigna)", "Belimumab", "Prednisolone 5 mg Placebo oral capsule",
"paquinimod", " Home-care rehabilitation group (HCRG)", " injection of autologous stromal vascular fraction",
"Imatinib Mesylate", "Magnetic resonance Imaging", "Rituximab Placebo (NaCl)"
), Interventions.SGS = c("  Biohorizons Laser-lok bonelevel dental implants",
"  Iguratimod", "  Parsaclisib", "  UCB5857   Placebo", "  aerobic exercise",
"  Cyclosporine A", "  VAY736   Placebo", "  Orencia   Placebo",
"  CFZ533 active", "  FMP-30")), .Names = c("Interventions.PR",
"Interventions.SpA", "Interventions.LS", "Interventions.ScS",
"Interventions.SGS"), row.names = c(NA, 10L), class = "data.frame")

... et voici le résultat obtenu en supprimant la 3ème ligne du test :

Code : Tout sélectionner

> df3
        mot col1 col2 col3 col4 col5 sum
1              1    1    1    1    1   5
12 exercise    1    0    0    0    1   2
16  placebo    1    1    1    1    1   5
25   vay736    1    0    0    0    1   2
41       mg    0    1    0    1    0   2
45   tablet    0    1    1    0    0   2
64       of    0    0    1    1    0   2
François


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité