2013-08-09 12 views
10

Ich verwende und wordcloud() für einige grundlegende Data-Mining in R, aber ich stehe in Schwierigkeiten, weil nicht-englische Zeichen in meinem Dataset sind (obwohl ich habe versucht, andere Sprachen zu filtern, basierend auf HintergrundvariablenEntfernen von nicht-englischen Text aus Corpus in R mit tm()

Lassen Sie uns sagen, dass einige der Linien in meiner TXT-Datei (gespeichert als UTF-8 in TextWrangler) wie folgt aussehen:.

Special 
satisfação 
Happy 
Sad 
Potential für 

ich dann lese meine TXT-Datei in R:

Dies ergibt die Warnmeldung:

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

Aber da es eine Warnung ist, kein Fehler, ich weiter nach vorne schieben.

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

Dies ergibt dann den Fehler:

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

Ich bin offen Wege zu finden, die nicht-englische Zeichen zu filtern, entweder in TextWrangler oder R; was auch immer das zweckmäßigste ist. Danke für Ihre Hilfe!

+1

Wenn das Ziel nur ist diese Nicht-ASCII-Zeichen zu entfernen, dann führt dies zu dem Trick: 'sapply (Wörter , Funktion (Zeile) iconv (Zeile, "latin1", "ASCII", sub = "")) '[(von hier)] (http://stackoverflow.com/a/15754155/1036500). Aber das wird Sie mit Wortfragmenten mit fehlenden Zeichen belassen. Wenn Sie nicht-englische Wörter entfernen möchten, können Sie Wörter mit Nicht-ASCII-Zeichen unterteilen, sie zu Ihrer Stoppwortliste hinzufügen und diese beim Entfernen von Stoppwörtern entfernen. – Ben

+0

Ich habe diesen Post tatsächlich gesehen, aber er öffnet die Tür, um den Corpus in ein anderes Objekt zu verwandeln? Das Ausführen dieses Befehls auf einem Korpus ergibt: 'Fehler in UseMethod (" tm_map ", x): keine anwendbare Methode für 'tm_map' angewendet auf ein Objekt der Klasse" c ('matrix', 'character') "' – roody

+0

Sie können wandle die Ausgabe von 'sapply' in ein Korpus wie folgt um:' dat1 <- sapply (Wörter, Funktion (Zeile) iconv (Zeile, "latin1", "ASCII", sub = "")) '' dann zurück zu a corpus: 'words1 <- Corpus (VectorSource (dat1))' – Ben

Antwort

9

Hier ist eine Methode, Wörter mit Nicht-ASCII-Zeichen zu entfernen, bevor ein Korpus machen:

# 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 
Verwandte Themen