假设我有一个字符串(行)向量,我使用readLines
从.txt网页上抓取。一些行将以“<”开头,通常表示新段落的开头。一些行将以字母开头,通常表示它连接到它之前的行。我希望能够连接属于同一段的行。
我的计划是找到以“<”开头的行,并连接以“<”开头的两行之间的所有行。从本质上讲,我最终得到了一系列指数。例如,我可能想要连接lines[1:3]
,lines[4:4]
,lines[5:9]
等等。有没有办法对此进行矢量化?我不能只做paste(lines[begin.index : end.index])
,但这可能会让你知道我希望实现的目标。
以下是一些虚拟数据,因为我的实际数据太长了:
[1] "<P> sampletextsampletext"
[2] "sampletextsampletext</P>"
[3] "<P> sampletext"
[4] "sampletext"
[5] "sampletext</P>"
[6] "<P> sampletext </P>"
我想将第1行和第2行连接在一起,并且一起喜欢3,4和5,第6行将保持不变。
答案 0 :(得分:3)
如果您尝试分离HTML节点,最好使用理解HTML的函数。这样做的好处是无需手动查找开始和结束标记。
# read in data
lines <- c("<P> sampletextsampletext",
"sampletextsampletext</P>" ,
"<P> sampletext",
"sampletext",
"sampletext</P>",
"<P> sampletext </P>")
# load a simple HTML scraping/parsing package
library(rvest)
# find all `<p>` tags and their contents
lines %>% paste(collapse = '') %>% read_html() %>% html_nodes('p')
# {xml_nodeset (3)}
# [1] <p> sampletextsampletextsampletextsampletext</p>
# [2] <p> sampletextsampletextsampletext</p>
# [3] <p> sampletext </p>
答案 1 :(得分:1)
这是基础R解决方案。两个grep操作将段落的起始行和停止行提供给paste
- 管理的函数,以便将它们与> txt <- scan(what="")
1: "<P> sampletextsampletext"
2: "sampletextsampletext</P>"
3: "<P> sampletext"
4: "sampletext"
5: "sampletext</P>"
6: "<P> sampletext </P>"
7:
Read 6 items
> grep("<P>", txt)
[1] 1 3 6
> grep("</P>", txt)
[1] 2 5 6
> mapply( function(x,y) paste( txt[x:y], collapse=" "), grep("<P>", txt), grep("</P>", txt) )
[1] "<P> sampletextsampletext sampletextsampletext</P>"
[2] "<P> sampletext sampletext sampletext</P>"
[3] "<P> sampletext </P>"
一起折叠:
function checkRegexp( o, regexp, n ) {
if ( !( regexp.test( o.val() ) ) ) {
o.addClass( "ui-state-error" );
updateTips( n );
return false;
} else {
return true;
}
}