web-dev-qa-db-ja.com

Rテキストファイルとテキストマイニング...データの読み込み方法

Rパッケージtmを使用しており、テキストマイニングを実行したいと考えています。これは1つのドキュメントであり、単語のバッグとして扱われます。

テキストファイルをロードする方法、および必要なオブジェクトを作成して、次のような機能の使用を開始する方法に関するドキュメントが理解できません。

stemDocument(x, language = map_IETF(Language(x)))

これが私のドキュメントであると仮定します "これはR負荷のテストです"

テキスト処理用のデータをロードしてオブジェクトxを作成するにはどうすればよいですか?

16
user959129

@richiemorrisroeのように、これは十分に文書化されていませんでした。これが、テキストをtmパッケージで使用し、ドキュメント用語のマトリックスを作成する方法です。

library(tm) #load text mining library
setwd('F:/My Documents/My texts') #sets R's working directory to near where my files are
a  <-Corpus(DirSource("/My Documents/My texts"), readerControl = list(language="lat")) #specifies the exact folder where my text file(s) is for analysis with tm.
summary(a)  #check what went in
a <- tm_map(a, removeNumbers)
a <- tm_map(a, removePunctuation)
a <- tm_map(a , stripWhitespace)
a <- tm_map(a, tolower)
a <- tm_map(a, removeWords, stopwords("english")) # this stopword file is at C:\Users\[username]\Documents\R\win-library\2.13\tm\stopwords 
a <- tm_map(a, stemDocument, language = "english")
adtm <-DocumentTermMatrix(a) 
adtm <- removeSparseTerms(adtm, 0.75)

この場合、正確なファイル名を指定する必要はありません。それが3行目で参照されているディレクトリで唯一のものである限り、tm関数によって使用されます。 3行目でファイル名を指定することができなかったため、このようにしています。

Ldaパッケージにテキストを取り込む方法を誰かが提案できれば、私は最も感謝します。私はそれを完全に解決することができませんでした。

23
Ben

同じライブラリのreadPlain関数を使用できませんか?または、より一般的なscan関数を使用することもできます。

mydoc.txt <-scan("./mydoc.txt", what = "character")
7
Pieter

私は実際これを始めるのはかなり難しいと思ったので、ここでより包括的な説明をします。

まず、テキストドキュメントのソースを設定する必要があります。最も簡単な方法(特に、ドキュメントを追加する予定の場合)は、すべてのファイルを読み取るディレクトリソースを作成することです。

source <- DirSource("yourdirectoryname/") #input path for documents
YourCorpus <- Corpus(source, readerControl=list(reader=readPlain)) #load in documents

その後、StemDocument関数をコーパスに適用できます。 HTH。

6
richiemorrisroe

あなたがしたかったのは、個々のファイルをコーパスに読み込んでから、テキストファイルのさまざまな行をさまざまな観測値として処理することでした。

これがあなたが望むものを与えるかどうかを見てください:

text <- read.delim("this is a test for R load.txt", sep = "/t")
text_corpus <- Corpus(VectorSource(text), readerControl = list(language = "en"))

これは、「this is a test for R load.txt」ファイルにテキストデータを含む列が1つしかないことを前提としています。

ここで「text_corpus」は、探しているオブジェクトです。

お役に立てれば。

2
Shreyes

以下は、単語の袋を作成するテキストファイルのディレクトリがあることを前提としています。

行う必要がある唯一の変更はreplace path = "C:\\windows\\path\\to\\text\\files\\をディレクトリパスに置き換えます。

library(tidyverse)
library(tidytext)

# create a data frame listing all files to be analyzed
all_txts <- list.files(path = "C:\\windows\\path\\to\\text\\files\\",   # path can be relative or absolute
                       pattern = ".txt$",  # this pattern only selects files ending with .txt
                       full.names = TRUE)  # gives the file path as well as name

# create a data frame with one Word per line
my_corpus <- map_dfr(all_txts, ~ tibble(txt = read_file(.x)) %>%   # read in each file in list
                      mutate(filename = basename(.x)) %>%   # add the file name as a new column
                      unnest_tokens(Word, txt))   # split each Word out as a separate row

# count the total # of rows/words in your corpus
my_corpus %>%
  summarize(number_rows = n())

# group and count by "filename" field and sort descending
my_corpus %>%
  group_by(filename) %>%
  summarize(number_rows = n()) %>%
  arrange(desc(number_rows))

# remove stop words
my_corpus2 <- my_corpus %>%
  anti_join(stop_words)

# repeat the count after stop words are removed
my_corpus2 %>%
  group_by(filename) %>%
  summarize(number_rows = n()) %>%
  arrange(desc(number_rows))
0
Stan

これは、観測ごとの行を含むテキストファイルの解決策です。 tmの最新のビネット(2017年2月)で詳細を説明しています。

text <- read.delim(textFileName, header=F, sep = "\n",stringsAsFactors = F)
colnames(text) <- c("MyCol")
docs <- text$MyCol
a <- VCorpus(VectorSource(docs))
0
GM1313