我应该使用哪个函数将非结构化文本文件读入R?

我应该使用哪个函数将非结构化文本文件读入R?,r,text-processing,file-read,readlines,R,Text Processing,File Read,Readlines,这是我在这里遇到的第一个问题,我是R的新手,试图找出如何进行数据处理的第一步,请保持轻松:) 我想知道在R中,加载非结构化文本数据以进行进一步处理的最佳函数和有用的数据结构是什么。例如,假设我有一本书存储为文本文件,其中没有新行字符 使用read.delim()并将数据存储在列表中是一个好主意吗?或者是一个字符向量更好,我该如何定义它 先谢谢你 PN 另外,如果我用“.”作为我的delimeter,它会把像“先生”这样的东西当作一个单独的句子。虽然这只是一个示例,我并不担心这个缺陷,只是出于教育

这是我在这里遇到的第一个问题,我是R的新手,试图找出如何进行数据处理的第一步,请保持轻松:)

我想知道在R中,加载非结构化文本数据以进行进一步处理的最佳函数和有用的数据结构是什么。例如,假设我有一本书存储为文本文件,其中没有新行字符

使用
read.delim()
并将数据存储在列表中是一个好主意吗?或者是一个字符向量更好,我该如何定义它

先谢谢你

PN


另外,如果我用“.”作为我的delimeter,它会把像“先生”这样的东西当作一个单独的句子。虽然这只是一个示例,我并不担心这个缺陷,只是出于教育目的,但我仍然很好奇您如何解决这个问题。

read.delim
以表格格式读取数据(如Excel中的行和列)。它对于阅读一串文本不是很有用

要将文本文件中的文本读入R,可以使用
readLines()
readLines()
创建一个包含与文本行一样多元素的字符向量。对于这种软件来说,一行是以换行符结尾的任何文本字符串。(在Wikipedia上阅读)当您编写文本时,您可以通过按
Return
来输入系统特定的换行符。实际上,一行文本不是由软件窗口的宽度定义的,而是可以覆盖许多可视行。实际上,一行文字就是书中的段落。因此,
readLines()
在段落处拆分文本:

> 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—\"
请注意,您可以在Stackoverflow中将长文本向左滚动。第七行的长度比这一列的宽度长

如您所见,
readLines()
将第七段作为一行阅读。您还可以看到,
readLines()
在每个引号前面添加了一个反斜杠。因为R在引号中保留了单独的行,所以需要将它们与原始文本的一部分区分开来。因此,它“逃逸”了原始引号。阅读维基百科

readLines()
可能会输出一条警告,指出在您的文件中发现了“不完整的最后一行”。这只意味着在最后一行之后没有换行符。您可以使用
读线(…,warn=FALSE)
抑制此警告,但您不必这样做,这不是一个错误,抑制警告只会抑制警告消息

如果您不想只将文本输出到R控制台,而是想进一步处理它,请创建一个对象来保存
readLines()的输出。

请注意,输入
Return
不会导致R在我用
关闭字符串之前执行命令。R只是用
+
回复,告诉我我可以继续编辑。我没有输入这些加号。请尝试。另外,请注意,现在换行符是文本字符串的一部分。(我在Mac电脑上,所以我的新行是
\n

如果手动输入文本,我会将整个文本作为一个字符串加载到向量中:

x <- c("The text of your book.")
您可以通过索引访问各个句子:

> sentences$ch1[2]
[3] "It is not long"
R将无法知道它不应该在“Mr.”之后拆分。您必须在正则表达式中定义异常。解释这一点超出了此问题的范围


你将如何告诉R如何识别主题或对象,我不知道。

欢迎这样做!请阅读和。不看实际文件,这有点太宽泛。我建议先取一个小样本(可能是第一页、段落或几句话)并尝试一些可用的方法。然后你将了解什么有效,什么无效,并可以回答任何具体的问题。查看tm软件包,这里的vignette第一部分有关于数据导入LCOME的信息!@Thomas说出了我的话!感谢大家的欢迎。我认为这个示例非常清楚,非常有用Specific:该函数必须获取任意英文文本的随机有限字符串,且不包含新行。使用“”。“作为您的分隔符,并将文本加载到数据结构中,该数据结构允许您计算每个句子中主语与宾语的比率。您将使用哪个函数和哪个数据结构?这正是我所希望的讨论。谢谢!关于空间的观点很好,不要担心“Mr.”和subject/object。这只是一个具体的例子。我想到的是一个带有delimeter的非结构化长文本字符串。所以我看到您从控制台加载x,而您不喜欢read.delim。那么如何从文本文件加载字符串?我尝试加载(“text.txt”),但我得到一个错误:错误:错误还原文件魔术号(文件可能已损坏)--没有加载数据的帮助说明我可以使用load()除非我早些保存。你会用什么从文件中加载上面的x?我编辑了我的答案来回答你的问题。我也编辑了你的问题,希望它能被重新打开。希望这没问题。谢谢你的时间和解释。非常有帮助和信息量大。我试过了,效果很好。非常感谢!不能添加类似的,不是吗还没有资格,但我确实很喜欢:)
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, "[.!?] *")
> 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"