Changed search function

This commit is contained in:
Linsberger Christian 2021-09-08 08:46:00 +02:00
commit 761695c584

View file

@ -3,38 +3,37 @@ library("writexl")
library("dplyr") library("dplyr")
library("xlsx") library("xlsx")
library("stringi") library("stringi")
library("stringr")
library("tidyverse")
#Konfiguration einbinden #Konfiguration einbinden
source("config/config.R") source("config/config.R")
source("sparql.R") source("sparql.R")
#Datenbank einlesen und doppelte entfernen #Datenbank einlesen und doppelte entfernen
vorhanden_df <- data.frame(get_current_geoera_lit_db()$citation) inDB <- data.frame(get_current_geoera_lit_db()$citation)
vorhanden_df_2 <- unique(vorhanden_df) inDB <- unique(inDB)
#Spaltenname setzen #Spaltenname setzen
colnames(vorhanden_df) <- (c(COLUMN_NAME)) colnames(inDB) <- (c(COLUMN_NAME))
#Excel mit den Zitaten die hinzugefügt werden sollen einlesen #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(read_excel(paste(PFAD_EXCEL, "distincts_kontrolliert.xlsx", sep="")))
neu_df <- data.frame(lapply(neu_df, stri_enc_toutf8)) neu_df <- data.frame(lapply(neu_df, stri_enc_toutf8))
#die beiden Dataframes zusammenfügen (braucht gleiche Spaltennamen) #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) all_df_2 <- unique(all_df)
#inner_join finds common elements between two data frames #inner_join finds common elements between two data frames
#anti_join finds elements the are exclusively in one of the data frames #anti_join finds elements the are exclusively in one of the data frames
#Gemeinsame Element finden #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 #Finde die Element die noch nicht in der Datenbank sind
not_in_db <- anti_join(neu_df, common) 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 #### #### TO DO ####
# Die direkte Vergleichsfunktion durch die %-Match-Funktion aus 03 ersetzen. # Die direkte Vergleichsfunktion durch die %-Match-Funktion aus 03 ersetzen.
# Ist etwas heikler, sollte aber weiterhin ganz gut funktionieren. # 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() 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)) { for (zeile_excel in 1:nrow(not_in_db)) {
#Current Excel ist das derzeit behandelte Zitate / Zelle #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 #Falls die aktuelle Zelle leer ist wird die nächste Iteration begonnen um Rechenleistung zu sparen
if (is.na(current_excel)) { 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 #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}")) excel_search_numbers <- unlist(str_extract_all(current_excel, "(?:19|20)\\d{2}"))
#Dritte Schleife die über die Vollzitatzeilen (INHALTE_DB) der Datenbank iteriert #Zweite Schleife die über die Vollzitatzeilen der Datenbank iteriert
for (zeile_db in 1:nrow(inDB[, INHALTE_DB])) { for (zeile_db in 1:nrow(inDB)) {
#aktuell behandeltes Element der Datenbank #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 #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), " +")) 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)) { if ((percent_match_all >= MATCH_ALL) && (percent_match_numbers > MATCH_YEAR)) {
#to_replace_done[zeile_excel, 1] <- str_remove_all(inDB[zeile_db,ID], "[<>]") #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=""))