2017-10-26 4 views
0

diesen Datenrahmen AnbetrachtR Ersetzen Stoppwörter in einer Spalte von Listen aus

test = data.frame(language=c("german", "english"), text=I(list(c("und das Beil", "wichtige Thematik der"), c("some useful information", "the most unuseful product")))) 

Ich brauche die Stoppwörter in jedem Vektor der Spalte „Text“ nach, welche Sprache der Zeilen gehört zu löschen. Eigentlich brauche ich nur zwischen Deutsch und Englisch unterscheiden, so dachte ich an mit ifelse wie dies in Kombination anwenden mit:

test[2] = apply(test, 1, function(x) ifelse(x[1] == "german", lapply(x[2], function(y)removeWords(y, stopwords("de"))), lapply(x[2], function(y)removeWords(y, stopwords("en"))))) 

Aber dies nicht funktioniert .. Vielleicht gibt es sogar einen eleganteren Weg zu löse das?

+0

Was ist die gewünschte Ausgabe für Ihre Testdaten? – mathdotrandom

+0

Die Ausgabe sollte in der Form sein, dass ich die Spalte "Text" ersetzen kann. Es sollte ein Vektor (oder eine Liste?) Sein, in dem jeder Eintrag eine Liste ist. – WinterMensch

Antwort

0

Als ersten Schritt könnten Sie tun:

library(tm)

apply(test, 1, function(x) removeWords(x[["text"]], stopwords(x[["language"]])))

, die Sie als Ergebnis liefert:

 [,1]     [,2]     
[1,] " Beil"    " useful information" 
[2,] "wichtige Thematik " " unuseful product" 

Ich weiß nicht, was das obwohl gewünschte Ausgabe ist. ..

+0

Die Ausgabe muss die gleiche Struktur wie die Spalte 'text' haben, damit ich sie ersetzen kann. Ist es möglich, dass ich meine eigenen Listen von Stoppwörtern (z. B. StoppwörterDE und StoppwörterDE) in dieser Lösung definieren kann? – WinterMensch

0

Hier ist eine saubere Lösung th kann leicht auf mehrere Sprachen erweitert werden:

library(tidyverse) 

test <- tibble(
    language = c("german", "english"), 
    text = I(list(c("und das Beil", "wichtige Thematik der"), 
       c("some useful information", "the most unuseful product"))) 
) 

test %>% 
    mutate(lang_abr = recode(language, "german" = "de", "english" = "en")) %>% 
    mutate(text = map2(text, lang_abr, ~ removeWords(.x, stopwords(.y)))) 
Verwandte Themen