文本数据集中最长的行
Longest line in text dataset
我正在寻找一种方法来查找文本文件中最长行的长度。
例如考虑来自 tm
包的简单数据集。
install.packages("tm")
library(tm)
txt <- system.file("texts", "txt", package = "tm")
ovid <- VCorpus(DirSource(txt, encoding = "UTF-8"), readerControl =
list(language = "lat"))
length(ovid)
[1] 5
ovid
由五个文档组成,每个文档由 n
个元素(从 16 到 18)的字符向量组成,我想确定其中最长的一个。
我找到了 python, and for bash shell 的文档,但令人惊讶的是,我没有找到 R 的任何内容。因此,我的尝试非常幼稚,其中:
max(nchar(ovid))
[1] 5410
max(length(ovid))
[1] 5
实际上是第四个文本,一旦我们从白色space中删除填充,它就是最长的。这是如何做。请注意,其中很多来自于从 tm (V)Corpus 对象中获取文本的困难,之前曾被问过(多次),例如 .
请注意,我将您关于 "lines" 的问题解释为指的是五个文档,每个文档超过五行,但由多行组成(每个文档的长度在 16 到 18 个字符向量之间)。希望我的解释正确。
texts <- sapply(ovid$content, "[[", "content")
str(texts)
## List of 5
## $ : chr [1:16] " Si quis in hoc artem populo non novit amandi," " hoc legat et lecto carmine doctus amet." " arte citae veloque rates remoque moventur," " arte leves currus: arte regendus amor." ...
## $ : chr [1:17] " quas Hector sensurus erat, poscente magistro" " verberibus iussas praebuit ille manus." " Aeacidae Chiron, ego sum praeceptor Amoris:" " saevus uterque puer, natus uterque dea." ...
## $ : chr [1:17] " vera canam: coeptis, mater Amoris, ades!" " este procul, vittae tenues, insigne pudoris," " quaeque tegis medios, instita longa, pedes." " nos venerem tutam concessaque furta canemus," ...
## $ : chr [1:17] " scit bene venator, cervis ubi retia tendat," " scit bene, qua frendens valle moretur aper;" " aucupibus noti frutices; qui sustinet hamos," " novit quae multo pisce natentur aquae:" ...
## $ : chr [1:18] " mater in Aeneae constitit urbe sui." " seu caperis primis et adhuc crescentibus annis," " ante oculos veniet vera puella tuos:" " sive cupis iuvenem, iuvenes tibi mille placebunt." ...
所以这里我们提取了文本,但是它们在多行上,由每个 "document" 包含的每个字符向量的一个元素表示,并且因为它们是诗句,所以有变量 white space 在其中一些元素的开头和结尾进行填充。让我们 trim 使用 stringi 的 stri_trim_both
函数留下文本。
# need to trim leading and trailing whitespace
texts <- lapply(texts, stringi::stri_trim_both)
## texts[1]
## [[1]]
## [1] "Si quis in hoc artem populo non novit amandi," "hoc legat et lecto carmine doctus amet."
## [3] "arte citae veloque rates remoque moventur," "arte leves currus: arte regendus amor."
## [5] "" "curribus Automedon lentisque erat aptus habenis,"
## [7] "Tiphys in Haemonia puppe magister erat:" "me Venus artificem tenero praefecit Amori;"
## [9] "Tiphys et Automedon dicar Amoris ego." "ille quidem ferus est et qui mihi saepe repugnet:"
## [11] "" "sed puer est, aetas mollis et apta regi."
## [13] "Phillyrides puerum cithara perfecit Achillem," "atque animos placida contudit arte feros."
## [15] "qui totiens socios, totiens exterruit hostes," "creditur annosum pertimuisse senem."
# now paste them together to make a single character vector of the five documents
texts <- sapply(texts, paste, collapse = "\n")
str(texts)
## chr [1:5] "Si quis in hoc artem populo non novit amandi,\nhoc legat et lecto carmine doctus amet.\narte citae veloque rates remoque movent"| __truncated__ ...
cat(texts[1])
## Si quis in hoc artem populo non novit amandi,
## hoc legat et lecto carmine doctus amet.
## arte citae veloque rates remoque moventur,
## arte leves currus: arte regendus amor.
##
## curribus Automedon lentisque erat aptus habenis,
## Tiphys in Haemonia puppe magister erat:
## me Venus artificem tenero praefecit Amori;
## Tiphys et Automedon dicar Amoris ego.
## ille quidem ferus est et qui mihi saepe repugnet:
##
## sed puer est, aetas mollis et apta regi.
## Phillyrides puerum cithara perfecit Achillem,
## atque animos placida contudit arte feros.
## qui totiens socios, totiens exterruit hostes,
## creditur annosum pertimuisse senem.
看起来更像了。现在我们可以找出哪个最长了。
nchar(texts)
## [1] 600 621 644 668 622
which.max(nchar(texts))
## [1] 4
我正在寻找一种方法来查找文本文件中最长行的长度。
例如考虑来自 tm
包的简单数据集。
install.packages("tm")
library(tm)
txt <- system.file("texts", "txt", package = "tm")
ovid <- VCorpus(DirSource(txt, encoding = "UTF-8"), readerControl =
list(language = "lat"))
length(ovid)
[1] 5
ovid
由五个文档组成,每个文档由 n
个元素(从 16 到 18)的字符向量组成,我想确定其中最长的一个。
我找到了 python,
max(nchar(ovid))
[1] 5410
max(length(ovid))
[1] 5
实际上是第四个文本,一旦我们从白色space中删除填充,它就是最长的。这是如何做。请注意,其中很多来自于从 tm (V)Corpus 对象中获取文本的困难,之前曾被问过(多次),例如
请注意,我将您关于 "lines" 的问题解释为指的是五个文档,每个文档超过五行,但由多行组成(每个文档的长度在 16 到 18 个字符向量之间)。希望我的解释正确。
texts <- sapply(ovid$content, "[[", "content")
str(texts)
## List of 5
## $ : chr [1:16] " Si quis in hoc artem populo non novit amandi," " hoc legat et lecto carmine doctus amet." " arte citae veloque rates remoque moventur," " arte leves currus: arte regendus amor." ...
## $ : chr [1:17] " quas Hector sensurus erat, poscente magistro" " verberibus iussas praebuit ille manus." " Aeacidae Chiron, ego sum praeceptor Amoris:" " saevus uterque puer, natus uterque dea." ...
## $ : chr [1:17] " vera canam: coeptis, mater Amoris, ades!" " este procul, vittae tenues, insigne pudoris," " quaeque tegis medios, instita longa, pedes." " nos venerem tutam concessaque furta canemus," ...
## $ : chr [1:17] " scit bene venator, cervis ubi retia tendat," " scit bene, qua frendens valle moretur aper;" " aucupibus noti frutices; qui sustinet hamos," " novit quae multo pisce natentur aquae:" ...
## $ : chr [1:18] " mater in Aeneae constitit urbe sui." " seu caperis primis et adhuc crescentibus annis," " ante oculos veniet vera puella tuos:" " sive cupis iuvenem, iuvenes tibi mille placebunt." ...
所以这里我们提取了文本,但是它们在多行上,由每个 "document" 包含的每个字符向量的一个元素表示,并且因为它们是诗句,所以有变量 white space 在其中一些元素的开头和结尾进行填充。让我们 trim 使用 stringi 的 stri_trim_both
函数留下文本。
# need to trim leading and trailing whitespace
texts <- lapply(texts, stringi::stri_trim_both)
## texts[1]
## [[1]]
## [1] "Si quis in hoc artem populo non novit amandi," "hoc legat et lecto carmine doctus amet."
## [3] "arte citae veloque rates remoque moventur," "arte leves currus: arte regendus amor."
## [5] "" "curribus Automedon lentisque erat aptus habenis,"
## [7] "Tiphys in Haemonia puppe magister erat:" "me Venus artificem tenero praefecit Amori;"
## [9] "Tiphys et Automedon dicar Amoris ego." "ille quidem ferus est et qui mihi saepe repugnet:"
## [11] "" "sed puer est, aetas mollis et apta regi."
## [13] "Phillyrides puerum cithara perfecit Achillem," "atque animos placida contudit arte feros."
## [15] "qui totiens socios, totiens exterruit hostes," "creditur annosum pertimuisse senem."
# now paste them together to make a single character vector of the five documents
texts <- sapply(texts, paste, collapse = "\n")
str(texts)
## chr [1:5] "Si quis in hoc artem populo non novit amandi,\nhoc legat et lecto carmine doctus amet.\narte citae veloque rates remoque movent"| __truncated__ ...
cat(texts[1])
## Si quis in hoc artem populo non novit amandi,
## hoc legat et lecto carmine doctus amet.
## arte citae veloque rates remoque moventur,
## arte leves currus: arte regendus amor.
##
## curribus Automedon lentisque erat aptus habenis,
## Tiphys in Haemonia puppe magister erat:
## me Venus artificem tenero praefecit Amori;
## Tiphys et Automedon dicar Amoris ego.
## ille quidem ferus est et qui mihi saepe repugnet:
##
## sed puer est, aetas mollis et apta regi.
## Phillyrides puerum cithara perfecit Achillem,
## atque animos placida contudit arte feros.
## qui totiens socios, totiens exterruit hostes,
## creditur annosum pertimuisse senem.
看起来更像了。现在我们可以找出哪个最长了。
nchar(texts)
## [1] 600 621 644 668 622
which.max(nchar(texts))
## [1] 4