From 761695c5846dbe3797ebe0bf7a6811e331b9b300 Mon Sep 17 00:00:00 2001 From: Linsberger Christian Date: Wed, 8 Sep 2021 08:46:00 +0200 Subject: [PATCH] Changed search function --- 02_not_in_db.R | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/02_not_in_db.R b/02_not_in_db.R index 6151273..a32ecce 100644 --- a/02_not_in_db.R +++ b/02_not_in_db.R @@ -3,38 +3,37 @@ library("writexl") library("dplyr") library("xlsx") library("stringi") +library("stringr") +library("tidyverse") #Konfiguration einbinden source("config/config.R") source("sparql.R") #Datenbank einlesen und doppelte entfernen -vorhanden_df <- data.frame(get_current_geoera_lit_db()$citation) -vorhanden_df_2 <- unique(vorhanden_df) +inDB <- data.frame(get_current_geoera_lit_db()$citation) +inDB <- unique(inDB) #Spaltenname setzen -colnames(vorhanden_df) <- (c(COLUMN_NAME)) +colnames(inDB) <- (c(COLUMN_NAME)) #Excel mit den Zitaten die hinzugefügt werden sollen einlesen neu_df <- data.frame(read_excel(paste(PFAD_EXCEL, "distincts_kontrolliert.xlsx", sep=""))) neu_df <- data.frame(lapply(neu_df, stri_enc_toutf8)) #die beiden Dataframes zusammenfügen (braucht gleiche Spaltennamen) -all_df <- rbind(vorhanden_df, neu_df) +all_df <- rbind(inDB, neu_df) all_df_2 <- unique(all_df) #inner_join finds common elements between two data frames #anti_join finds elements the are exclusively in one of the data frames #Gemeinsame Element finden -common <- inner_join(neu_df, vorhanden_df) +common <- inner_join(neu_df, inDB) #Finde die Element die noch nicht in der Datenbank sind not_in_db <- anti_join(neu_df, common) -#Die der Uniques in eine Datei schreiben -write_xlsx(not_in_db, paste(PFAD_OUT, "not_in_db_",format(Sys.time(), "%Y_%m_%d") ,".xlsx", sep="")) - #### TO DO #### # Die direkte Vergleichsfunktion durch die %-Match-Funktion aus 03 ersetzen. # Ist etwas heikler, sollte aber weiterhin ganz gut funktionieren. @@ -42,11 +41,12 @@ write_xlsx(not_in_db, paste(PFAD_OUT, "not_in_db_",format(Sys.time(), "%Y_%m_%d" not_in_db_2 <- c() -#Zweite Schleife über die jeweiligen Zeilen des Spaltenvektors +#Erste Schleife über die Zeilen der Einträge die nicht in der Datenbank sind for (zeile_excel in 1:nrow(not_in_db)) { #Current Excel ist das derzeit behandelte Zitate / Zelle - current_excel <- tolower(not_in_db[zeile_excel, 1]) + #current_excel <- tolower(not_in_db[zeile_excel, 1]) + current_excel <- str_squish(not_in_db[zeile_excel, 1]) #Falls die aktuelle Zelle leer ist wird die nächste Iteration begonnen um Rechenleistung zu sparen if (is.na(current_excel)) { @@ -65,11 +65,13 @@ for (zeile_excel in 1:nrow(not_in_db)) { #Grund hierfür ist, dass das Jahr ein sehr guter zusätzlicher Indikator ist ob eine Publikation gleich ist excel_search_numbers <- unlist(str_extract_all(current_excel, "(?:19|20)\\d{2}")) - #Dritte Schleife die über die Vollzitatzeilen (INHALTE_DB) der Datenbank iteriert - for (zeile_db in 1:nrow(inDB[, INHALTE_DB])) { + #Zweite Schleife die über die Vollzitatzeilen der Datenbank iteriert + for (zeile_db in 1:nrow(inDB)) { #aktuell behandeltes Element der Datenbank - current_db <- tolower(inDB[zeile_db,INHALTE_DB]) + #current_db <- tolower(inDB[zeile_db, 1]) + current_db <- str_squish(inDB[zeile_db, 1]) + #Zerlegt den Zelleninhalt und macht daraus eine Liste "Wort"liste aus alphanumerischen Zeichen, getrennt wird jeweils bei nicht-alphanumischen Zeichen db_search_all <- unlist(strsplit(gsub("[^[:alnum:] ]", "", current_db), " +")) @@ -118,9 +120,16 @@ for (zeile_excel in 1:nrow(not_in_db)) { if ((percent_match_all >= MATCH_ALL) && (percent_match_numbers > MATCH_YEAR)) { #to_replace_done[zeile_excel, 1] <- str_remove_all(inDB[zeile_db,ID], "[<>]") - not_in_db_2.append(current_excel) + not_in_db_2 <- c(not_in_db_2, current_excel) } } } +not_in_db_2 <- data.frame(not_in_db_2) +not_in_db_2 <- unique(not_in_db_2) +colnames(not_in_db_2) <- (c(COLUMN_NAME)) + +#Die der Uniques in eine Datei schreiben +write_xlsx(not_in_db_2, paste(PFAD_OUT, "not_in_db_",format(Sys.time(), "%Y_%m_%d") ,".xlsx", sep="")) +