2013-08-09 10 views
10

Używam i wordcloud() dla niektórych podstawowych eksploracji danych w R, ale mam problemy, ponieważ w moim zestawie danych są znaki spoza alfabetu łacińskiego (mimo że Wcześniej próbował odfiltrować inne języki oparte na zmiennych tłaUsuwanie tekstu w języku innym niż angielski z Corpus w R za pomocą tm()

Powiedzmy, że niektóre linie w moim pliku TXT (zapisane jako UTF-8 w TextWrangler) wyglądać tak:.

Special 
satisfação 
Happy 
Sad 
Potential für 

I wtedy przeczytaj mój plik tekstowy w R:

words <- Corpus(DirSource("~/temp", encoding = "UTF-8"),readerControl = list(language = "lat")) 

Daje komunikat ostrzegawczy:

Warning message: 
In readLines(y, encoding = x$Encoding) : 
    incomplete final line found on '/temp/file.txt' 

Ale ponieważ jest to ostrzeżenie, nie błąd, to nadal będzie dążyć do przodu.

words <- tm_map(words, stripWhitespace) 
words <- tm_map(words, tolower) 

To wtedy daje błąd:

Error in FUN(X[[1L]], ...) : invalid input 'satisfa��o' in 'utf8towcs' 

Jestem otwarty na znalezienie sposobów, aby odfiltrować znaki spoza alfabetu angielskiego zarówno w TextWrangler lub R; cokolwiek jest najbardziej dogodne. Dzięki za pomoc!

+1

Jeśli celem jest po prostu usunąć te znaki spoza ASCII, to będzie do trick: 'sapply (słowa , function (row) iconv (row, "latin1", "ASCII", sub = "")) '[(tutaj)] (http://stackoverflow.com/a/15754155/1036500). Jednak pozostawi to fragmenty tekstu z brakującymi znakami. Jeśli chcesz usunąć słowa inne niż angielskie, możesz podzielić słowa ze znakami spoza ASCII, dodać je do swojej listy stopów i usunąć je podczas usuwania słów kończących. – Ben

+0

Właściwie to widziałem, ale to otwiera drzwi do zmiany korpusu na inny obiekt? Uruchamianie tego polecenia na korpusie daje: 'Błąd w UseMethod (" tm_map ", x): brak stosowanej metody dla 'tm_map' zastosowanej do obiektu klasy" c ('matrix', 'character') "' – roody

+0

Możesz przekonwertuj wyjście "sapply" z powrotem do korpusu jak: 'dat1 <- sapply (słowa, funkcja (wiersz) iconv (wiersz," latin1 "," ASCII ", sub =" "))' następnie z powrotem do corpus: 'words1 <- Corpus (VectorSource (dat1))' – Ben

Odpowiedz

9

Oto metoda, aby usunąć słowa ze znakami spoza ASCII przed podjęciem corpus:

# remove words with non-ASCII characters 
# assuming you read your txt file in as a vector, eg. 
# dat <- readLines('~/temp/dat.txt') 
dat <- "Special, satisfação, Happy, Sad, Potential, für" 
# convert string to vector of words 
dat2 <- unlist(strsplit(dat, split=", ")) 
# find indices of words with non-ASCII characters 
dat3 <- grep("dat2", iconv(dat2, "latin1", "ASCII", sub="dat2")) 
# subset original vector of words to exclude words with non-ASCII char 
dat4 <- dat2[-dat3] 
# convert vector back to a string 
dat5 <- paste(dat4, collapse = ", ") 
# make corpus 
require(tm) 
words1 <- Corpus(VectorSource(dat5)) 
inspect(words1) 

A corpus with 1 text document 

The metadata consists of 2 tag-value pairs and a data frame 
Available tags are: 
    create_date creator 
Available variables in the data frame are: 
    MetaID 

[[1]] 
Special, Happy, Sad, Potential 
Powiązane problemy