2013-10-31 3 views
7

これは、ここで私の初めての質問です、私はデータ処理を行う方法で私の最初のステップを把握しようと、Rに新たなんだ、簡単にそれを保管してください。)構造化されていないテキストファイルをRに読み込むために使用する関数はどれですか?

を、私は思ったんだけど何だろうさらなる処理のために構造化されていないテキストデータをロードするための最良の関数であり、有用なデータ構造である。たとえば、テキストファイルに改行文字を含めずにブックを保存しているとします。

read.delim()を使用してデータをリストに格納することをお勧めしますか?または、文字ベクトルがより良いです、そして、それをどのように定義しますか?

ありがとうございます。

PN

P.私が "。"私のdelimeterとして、それは "Mr."のようなものを扱います別の文としてこれは単なる例であり、私はこの欠陥を心配していませんが、教育目的のために、私はあなたがこの問題をどのように回避するのか不思議です。

+3

ようこそ! [質問する](http://stackoverflow.com/help/on-topic)と[良いRの質問を書く](http://stackoverflow.com/questions/5963269/how-to-make-a)をお読みください。 -great-r-reproducible-example)を使用します。実際のファイルを見ることなく、これは少し広すぎます。 – Thomas

+0

最初に小さなサンプル(多分最初のページ、段落、または夫婦の文章)をとり、いくつかの利用可能な方法を試してみることをお勧めします。その後、何がうまくいくのか、何ができないのかを学び、どんな特定の質問でも戻ってくることができます。 –

+1

tmパッケージ、ビネットはこちらhttp://cran.r-project.org/web/packages/tm/vignettes/tm.pdf最初のセクションにはデータのインポートに関する情報があります – sckott

答えて

7

read.delimは、表形式のデータをExcel形式で読み込みます。文字列を読むのにはあまり役に立ちません。

テキストファイルのテキストをRに読み込むには、readLines()を使用できます。 readLines()は、テキスト行と同数の要素を持つ文字ベクトルを作成します。この種のソフトウェアの行は、改行で終わる任意の文字列です。 (Wikipediaのnewlineについて読む)テキストを書くときは、Returnを押して、システム固有の改行文字を入力する。実際には、テキスト行はソフトウェアウィンドウの幅で定義されていませんが、多くの視覚的な行で実行できます。事実、1行のテキストは、本の中で段落になるものです。あなたはstackoverflowの中で、ここで左に長いテキストをスクロールすることができます

> readLines("/path/to/tom_sawyer.txt") 
[1] "\"TOM!\""                                                                                                                  
[2] "No answer."                                                                                                                  
[3] "\"TOM!\""                                                                                                                  
[4] "No answer."                                                                                                                  
[5] "\"What's gone with that boy, I wonder? You TOM!\""                                                                                                        
[6] "No answer."                                                                                                                  
[7] "The old lady pulled her spectacles down and looked over them about the room; then she put them up and looked out under them. She seldom or never looked through them for so small a thing as a boy; they were her state pair, the pride of her heart, and were built for \"style,\" not service—she could have seen through a pair of stove-lids just as well. She looked perplexed for a moment, and then said, not fiercely, but still loud enough for the furniture to hear:" 
[8] "\"Well, I lay if I get hold of you I'll—\" 

注:だからreadLines()は、段落のテキストを分割します。その第七行はこの列より長く、幅が広い。

ご覧のとおり、readLines()は、長い7番目の段落を1行として読みます。また、ご覧のとおり、readLines()には、各引用符の前にバックスラッシュが追加されています。 Rは個々の行を引用符で囲んでいるので、元のテキストの一部であるものと区別する必要があります。したがって、元の引用符を "エスケープ"します。 Wikipediaのescapingについて読む

readLines() "不完全な最終行"がファイル内に見つかったという警告を出力することがあります。これは、最後の行の後に改行がなかったことを意味します。 readLines(..., warn = FALSE)でこの警告を抑制することはできますが、そうする必要はありません。これはエラーではなく、警告を抑止するだけで警告メッセージは表示されません。

あなただけの出力にはしたくない場合は、あなたのRコンソールにテキストが、プロセス、それはさらに、readLines()の出力を保持するオブジェクトの作成:readLines()ほか

mytext <- readLines("textfile.txt") 

を、あなたもscan()を使用することができ、 readBin()などのファイルからテキストを読み取る関数。 ?scanなどを入力してマニュアルを見てください。?connectionsを見て、ファイルをRに読み込むためのさまざまな方法について学んでください。

Vim、メモ帳、TextWranglerなどのテキストエディタで.txtファイルにテキストを書き、MS Wordのようなワードプロセッサでは作成しないことを強くお勧めします。 Wordファイルには、画面に表示されるテキストや印刷されたテキストよりも多くのテキストが含まれています。これらのファイルはRで読み込まれます。試してみることができますが、良い結果を得るには、Wordから.txtファイルテキストエディタで作成することができます。

することもできますコピー&ペーストRを他のソフトウェアで開いたテキストファイルからテキストをまたはRコンソールで、あなたのテキストを作成:Returnを入力すると、Rが実行されることはありませんか

myothertext <- c("What did you do? 
+ I wrote some text. 
+ Ah, interesting.") 
> myothertext 
[1] "What did you do?\nI wrote some text.\nAh, interesting." 

注意私は")で文字列を閉じる前にコマンドを実行します。 Rは+と返信し、編集を続けることができます。私はそれらのplussesに入力しませんでした。それを試してみてください。また、改行はあなたの文字列の一部であることに注意してください。 (私の改行が\nあるので、私は、Mac上でだ。)

あなたが入力テキストを手動で、私は、ベクター中に1つの文字列としてテキスト全体をロードしたい場合:

x <- c("The text of your book.") 

あなたは異なる読み込むことができますこのベクトルの異なる要素への章:より良い参考

y <- c("Chapter 1", "Chapter 2") 

、あなたが要素に名前を付けることができます。

z <- c(ch1 = "This is the text of the first chapter. It is not long! Why was the author so lazy?", ch2 = "This is the text of the second chapter. It is even shorter.") 

今、あなたはこれらのベクターのいずれかの要素を分割することができます:

sentences <- strsplit(z, "[.!?] *") 

は、この機能のための取扱説明書を読み、それが取るの属性について学ぶために?strsplitを入力します。 2番目の属性は正規表現をとります。この場合、私はstrsplitに、ベクトルの要素を3つの句読点の後ろにオプションのスペースが続くように分割するように指示しました(ここにスペースを定義しないと、結果の「文章」の前にスペースが付きます)。

sentencesは現在含まれています

> sentences 
$ch1 
[1] "This is the text of the first chapter" "It is not long"      
[3] "Why was the author so lazy"   

$ch2 
[1] "This is the text of the second chapter" "It is even shorter" 

をあなたはインデックス化することによって、個々の文章にアクセスすることができます。

> sentences$ch1[2] 
[3] "It is not long" 

Rは、それが「ミスター」の後に分割してはならないことを知っていることができなくなります。正規表現で例外を定義する必要があります。これを説明することはこの質問の範囲外です。

どのように被写体や物体を認識するかをRに教えてもらえませんか?

+0

これはまさに私が望んでいた議論です。ありがとうございました!スペースについての大きなポイントであり、 "Mr."について心配しないでください。被験者/対象物。これは具体的な例にすぎません。私が念頭に置いておいておきたいのは、一部の区切り文字付きのテキストの構造化されていない長い文字列です。だから私はあなたがコンソールからxを読み込むと、あなたはread.delimが好きではないと思う。次に、テキストファイルから文字列をロードするにはどうすればよいですか? エラー:不良リストアファイルのマジックナンバー(ファイルが壊れている可能性があります) - データがロードされていません ヘルプは、以前に保存した場合のみload()を使用できますファイルから上記のxをロードするために何を使用しますか? – user2942656

+0

あなたの質問に答えるために私の答えを編集しました。 –

+0

私はあなたの質問を編集して、再び開かれることを願っています。これは大丈夫ですか? –

関連する問題