2017-11-08 1 views
0

Ich habe einen Datensatz mit unstrukturierten Textdaten.extrahieren Satz, der ein Muster hat

Aus dem Text, den ich Sätze extrahieren möge, die folgenden Worte:

education_vector <- c("university", "academy", "school", "college") 

Zum Beispiel aus dem Text I am a student at the University of Wyoming. My major is biology. I I am a student at the University of Wyoming.

Aus dem Text I love statistics and I enjoy working with numbers. I graduated from Walla Wall Community College Ich will bekommen I graduated from Walla Wall Community College. bekommen und so weiter

Ich versuchte mit grep Funktion, aber es ergab falsche Ergebnisse

+0

Bitte fügen Sie die Art und Weise, dass Sie grep in Ihrer Frage aufgerufen haben. – G5W

+1

grep (einfügen (education_vector, collapse = '|'), unlist (strsplit (str1, "(. *?) \\ .. *")), unlist (strsplit (str1, '(? <= \\.) \\ s + ', perl = TRUE)), Wert = TRUE) –

Antwort

1

Antwort modifiziert wählen ersten Spiel verwenden.

texts = c("I am a student at the University of Wyoming. My major is biology.", 
"I love statistics and I enjoy working with numbers. I graduated from Walla Wall Community College", 
"First, I went to the Bowdoin College. Then I went to the University of California.") 

gsub(".*?([^\\.]*(university|academy|school|college)[^\\.]*).*", 
    "\\1", texts, ignore.case=TRUE) 

[1] "I am a student at the University of Wyoming" 
[2] " I graduated from Walla Wall Community College" 
[3] "First, I went to the Bowdoin College" 

Erläuterung: .*? ist ein nicht-gieriges Spiel bis zu dem Rest des Musters. Dies ist da, um Sätze vor dem entsprechenden Satz zu entfernen.

([^\\.]*(university|academy|school|college)[^\\.]*) entspricht einer Zeichenkette anders als eine Periode unmittelbar vor und nach einem der Schlüsselwörter.

.* behandelt alles nach dem entsprechenden Satz.

Dies ersetzt die gesamte Zeichenfolge mit nur dem relevanten Teil.

+0

Wie erhält man das erste Spiel? Meine Beispiele waren nur Demo. Dein Code funktioniert, aber in Wirklichkeit sind meine Texte groß und manchmal gibt es das erste Spiel nicht zurück –

0

Hier ist eine Lösung grep

education <- c("university", "academy", "school", "college") 

str1 <- "I am a student at the University of Wyoming. My major is biology." 
str2 <- "I love statistics and I enjoy working with numbers. I graduated from Walla Wall Community College" 
str1 <- tolower(str1) # we use tolower because "university" != "University" 
str2 <- tolower(str2) 

grep(paste(education, collapse = "|"), unlist(strsplit(str1, "(?<=\\.)\\s+", 
                 perl = TRUE)), 
    value = TRUE) 

grep(paste(education, collapse = "|"), unlist(strsplit(str2, "(?<=\\.)\\s+", 
                 perl = TRUE)), 
    value = TRUE) 
Verwandte Themen