2017-10-11 7 views
3

ich mit Sätzen zu tun habe, die sich wie folgtr ausschließen Sätze mit Schlüsselwörter

Has no anorexia 
    She denies anorexia 
    Has anorexia 
    Positive for Anorexia 

Mein Ziel ist es Sätze auszuschließen, die Wörter wie denies, denied, no haben und behalten nur die positive Anzeichen für Magersucht.

Die endgültigen Ergebnisse sollten

 Has anorexia 
    Positive for Anorexia 

I mit Grepl Funktion

 negation <- c("no","denies","denied") 
    if (grepl(paste(negation,collapse="|"), Anorexia_sentences[j]) == TRUE){ 

    Anorexia_sentences[j] <- NA 

    } 

und dies nicht funktioniert, versucht, diese Option Ich denke, die nicht in dem Wort A no rexia einige Probleme verursacht . Irgendwelche Ratschläge, wie man dieses Problem löst, wird sehr geschätzt.

+3

Sie vermissen ein Zitat nach 'abgelehnt – lawyeR

+2

Vielleicht 'negation <- c (" \\ bno \\ b ", ...)'. –

+0

Sie brauchen keine Schleife, 'if', oder irgendetwas. Just' denies = grepl (..., Anorexia_sentences); Anoreia_sentences [verneint] = NA' – Gregor

Antwort

4

Die corpus Bibliothek hat Funktionen, die wie die stringr Äquivalente arbeiten, aber die Arbeit an der Begriff Ebene, nicht die Zeichen Ebene. Dies funktioniert:

library(corpus) 
negation <- c("no", "denies", "denied") 
text <- c("Has no anorexia", "She denies anorexia", "Has anorexia", 
      "Positive for Anorexia", "Denies anorexia") 
text[!text_detect(text, negation)] 
## [1] "Has anorexia"   "Positive for Anorexia" 

Wenn Sie eine Lösung wollen, die gerade Basis R verwendet, verwenden Sie die folgende statt:

pattern <- paste0("\\b(", paste(negation, collapse = "|"), ")\\b") 
text[!grepl(pattern, text, ignore.case = TRUE)] 
+0

Ich werde das versuchen –

0

Sie können dies auch leicht die quanteda Paket. Um das Zeichenobjekt als Satz zu registrieren, benötigen Sie entweder eine Interpunktion oder die Zeilen in Elemente eines Vektors character zu segmentieren. Dann können wir char_trimsentences() verwenden, um diejenigen mit einer bestimmten Musterübereinstimmung zu entfernen, wenn sie mit Token versehen werden.

library("quanteda") 

readLines(textConnection(txt)) %>% 
    char_trimsentences(exclude_pattern = c("\\bden\\w+\\b|\\bno\\b")) 
##    text3     text4 
##  "Has anorexia" "Positive for Anorexia" 

Der reguläre Ausdruck garantiert, dass Sie Wörter mit dem glob Muster entsprechen, werden „den *“ und „nein“ als Wort nur (und nicht Teil eines keine rexia.

Verwandte Themen