web-dev-qa-db-ja.com

tm()を使用してRのコーパスから英語以外のテキストを削除する

Rでの基本的なデータマイニングにtm()wordcloud()を使用していますが、データセットに英語以外の文字が含まれているために問題が発生しています(背景変数に基づいて他の言語を除外します。

私のTXTファイル(TextWranglerにUTF-8として保存されている)のいくつかの行が次のようになっているとしましょう。

Special
satisfação
Happy
Sad
Potential für

次に、txtファイルをRに読み込みます。

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

これにより、警告メッセージが表示されます。

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

しかし、それはエラーではなく警告であるため、私は前進し続けます。

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

これにより、エラーが発生します。

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

TextWranglerまたはRのいずれかで英語以外の文字を除外する方法を見つけることにオープンです。最も便利なものは何でも。ご協力いただきありがとうございます!

10
roody

コーパスを作成する前に、ASCII以外の文字を含む単語を削除する方法は次のとおりです。

# 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
9
Ben

パッケージ「stringi」を使用することもできます。

上記の例を使用すると:

library(stringi)
dat <- "Special,  satisfação, Happy, Sad, Potential, für"
stringi::stri_trans_general(dat, "latin-ascii")

出力:

[1] "Special,  satisfacao, Happy, Sad, Potential, fur"  
0
Wilfredo