0

Rのツイートからハッシュタグを抽出するための小さなコードを書きました

m<-c(paste("Hello! #London is gr8. #Wow"," ")) # My tweet
#m<- c("Hello! #London is gr8. #Wow")

x<- unlist(gregexpr("#(\\S+)",m))
#substring(m,x)[1]

subs<-function(x){
  return(substring(m,x+1,(x-2+regexpr(" |\\n",substring(m,x)[1]))))
}

tag<- sapply(x, subs)
#x
tag

このコードは、ツイートの最後にスペースを追加しないと機能しませんでした。理由は何でしょうか?\nも試しました。

4

3 に答える 3

1

gregexpr、必要な情報を提供します。

R> m<- c("Hello! #London is gr8. #Wow")
R> (x<- gregexpr("#(\\S+)",m)[[1]])
[1]  8 24
attr(,"match.length")
[1] 7 4
attr(,"useBytes")
[1] TRUE

match.lengthしたがって、を開始位置と組み合わせることができます。

R> substring(m, x+1 , x - 1 + attr(x,"match.length"))
[1] "London" "Wow"   
于 2012-12-07T16:04:45.997 に答える
1

これを試して:

m <- c("Hello! #London is gr8. #Wow")
x <- unlist(strsplit(m, " "))
tag <- x[grep("^#", x)]
tag

ここで、次のようなツイートのリストがあると想像してみましょう。

m1 <- c("Hello! #London is gr8. #Wow")
m2 <- c("#Hello! #London is gr8. #Wow")
m3 <- c("#Hello! #London i#s gr8. #Wow")
m4 <- c("Hello! #London is gr8. #Wow ")
m <- list(m1, m2, m3, m4)

あなたは小さな関数を書くことができます:

getTags <- function(tweet) {
  x <- unlist(strsplit(tweet, " "))
  tag <- x[grep("^#", x)]
  return(tag)
}

そしてそれを適用します:

lapply(m, function(tweet) getTags(tweet))
[[1]]
[1] "#London" "#Wow"   
[[2]]
[1] "#Hello!" "#London" "#Wow"   
[[3]]
[1] "#Hello!" "#London" "#Wow"   
[[4]]
[1] "#London" "#Wow"  

後付け...

ハッシュ(または句読点を削除)が必要な場合、関数は次のようになります。

getTags <- function(tweet) {
  x <- unlist(strsplit(tweet, " "))
  tag <- x[grep("^#", x)]
  tag <- gsub("#", "", tag)
  return(tag)
}

また

getTags <- function(tweet) {
  x <- unlist(strsplit(tweet, " "))
  tag <- x[grep("^#", x)]
  tag <- gsub("[[:punct:]]", "", tag)
  return(tag)
}
于 2012-12-08T18:08:29.123 に答える
0

$文字列の終わりに一致します。

m<- c("Hello! #London is gr8. #Wow")

subs<-function(x){
  return(substring(m,x+1,(x-2+regexpr(" |$",substring(m,x)[1]))))
}

コードの残りの部分はそのままにします。

> tag
[1] "London" "Wow"   
于 2012-12-08T19:58:38.857 に答える