Bei der Verarbeitung und Segmentierung von Zeichenketten, ob Suchanfragen aus der Google Search Console oder Keywords einer umfangreichen Recherche, ist es oftmals notwendig zu prüfen, welche Worte enthalten sind und die Zeichenkette einem Segment zu zuordnen. Hier helfen reguläre Ausdrücke bei der Suche nach Mustern in den Zeichenketten.

Im folgenden Beispiel trifft die einfache Suche nach dem String „flaschen“ auf alle Zeichenketten zu:

Quelle: https://regex101.com/r/Q8R4Sp/1

Ziel meiner Suche ist jedoch, nur Zeichenketten zu identifizieren, die alleinstehend „flaschen“ enthalten. Also das Wort entweder am Anfang, am Ende oder innerhalb einer Zeichenkette enthalten, ohne das es Bestandteil eines anderen Wortes ist. Entsprechend formuliere ich einen regulären Ausdruck der dies berücksichtigt:

Quelle: https://regex101.com/r/uJHGPG/1

Nun ist es keine wahre Freude, für mehrere Dutzend oder gar hunderte Begriffe den gleichen regulären Ausdruck zu tippen. Mit einer kleinen, recht hemdsärmelig geschriebenen Funktion schaffe ich mir hier Abhilfe und erleichtere mir die Arbeit.

Die folgende R-Funktion erlaubt es Dir, aus den Begriffen innerhalb einer Spalte deines Dataframes einen regulären Ausdruck zu bilden, der das exakte Muster eines gewünschten Begriffs auswählt. Vorangehende oder nachfolgende Zeichen werden nicht berücksichtigt, so dass nur der wirklich gesuchte Begriff einen Treffer erzeugt.

create_regex <- function(df_input, col_input) {
  
  df_output <- df_input %>%
    mutate(
      temp_begriff = tolower(col_input),
      temp_vorne = str_extract(temp_begriff, "^\\D"),
      temp_mitte = str_extract(temp_begriff, "(?<=\\D).+(?=\\D$)"),
      temp_hinten = str_extract(temp_begriff, "\\D$"),
      regex = paste0(
        "\\b",
        temp_vorne,
        "{1,2}[\\sh]?",
        temp_mitte,
        "\\s?",
        temp_hinten,
        "{1,2}\\b"
        )
      ) %>% select(-starts_with("temp_"))
  
  return(df_output)
  
}

So funktioniert die Funktion:

  1. Das Eingabedatenframe (df_input) wird zunächst durch die mutate-Funktion aus dem dplyr-Paket übergeben. Dadurch kann eine neue Spalte auf Basis der vorhandenen Spalten im Datenframe erstellt werden.
  2. Die Funktion tolower wird verwendet, um die Werte in der angegebenen Spalte (col_input) in Kleinbuchstaben umzuwandeln. Dies wird getan, um Unstimmigkeiten im regulären Ausdruck aufgrund der Groß-/Kleinschreibung zu vermeiden.
  3. Drei neue Spalten werden mit der Funktion str_extract aus dem stringr-Paket erstellt. Diese Spalten werden verwendet, um Informationen zu extrahieren, die zur Konstruktion des regulären Ausdrucks verwendet werden.
  1. Die regex-Spalte wird durch die Funktion paste0 erstellt. Diese kombiniert die extrahierten Werte zu einem regulären Ausdruck, der in der neuen Spalte gespeichert wird.
  2. Die Spalten, die mit „temp_“ beginnen, werden mit der select-Funktion und dem Argument -starts_with("temp_") entfernt.
  3. Das modifizierte Datenframe wird durch return zurückgegeben.