如何清理 R 中的推特数据?
How do I clean twitter data in R?
我使用 twitteR 包从 Twitter 中提取推文并将它们保存到文本文件中。
我对语料库进行了如下操作
xx<-tm_map(xx,removeNumbers, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,stripWhitespace, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,removePunctuation, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,strip_retweets, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,removeWords,stopwords(english), lazy=TRUE, 'mc.cores=1')
(使用 mc.cores=1 和 lazy=True 否则 mac 上的 R 会 运行 出错)
tdm<-TermDocumentMatrix(xx)
但是这个术语文档矩阵有很多奇怪的符号,无意义的单词等等。
如果推文是
RT @Foxtel: One man stands between us and annihilation: @IanZiering.
Sharknado‚Äã 3: OH HELL NO! - July 23 on Foxtel @SyfyAU
清理完推文后,我只希望保留完整的英文单词,即 sentence/phrase 没有其他所有内容(用户名、缩写词、网址)
示例:
One man stands between us and annihilation oh hell no on
(注意:tm包中的转换命令只能去除停用词、标点符号空格和转换为小写)
要删除 URL,您可以尝试以下操作:
removeURL <- function(x) gsub("http[[:alnum:]]*", "", x)
xx <- tm_map(xx, removeURL)
也许你可以定义类似的函数来进一步转换文本。
使用 gsub 和
stringr package
我找到了部分解决方案,用于删除转推、对屏幕名称的引用、主题标签、空格、数字、标点符号、网址。
clean_tweet = gsub("&", "", unclean_tweet)
clean_tweet = gsub("(RT|via)((?:\b\W*@\w+)+)", "", clean_tweet)
clean_tweet = gsub("@\w+", "", clean_tweet)
clean_tweet = gsub("[[:punct:]]", "", clean_tweet)
clean_tweet = gsub("[[:digit:]]", "", clean_tweet)
clean_tweet = gsub("http\w+", "", clean_tweet)
clean_tweet = gsub("[ \t]{2,}", "", clean_tweet)
clean_tweet = gsub("^\s+|\s+$", "", clean_tweet)
参考资料:(希克斯,2014 年)
经过以上
我做了下面的。
#get rid of unnecessary spaces
clean_tweet <- str_replace_all(clean_tweet," "," ")
# Get rid of URLs
clean_tweet <- str_replace_all(clean_tweet, "http://t.co/[a-z,A-Z,0-9]*{8}","")
# Take out retweet header, there is only one
clean_tweet <- str_replace(clean_tweet,"RT @[a-z,A-Z]*: ","")
# Get rid of hashtags
clean_tweet <- str_replace_all(clean_tweet,"#[a-z,A-Z]*","")
# Get rid of references to other screennames
clean_tweet <- str_replace_all(clean_tweet,"@[a-z,A-Z]*","")
参考:(斯坦顿 2013)
在执行上述任何操作之前,我使用以下方法将整个字符串折叠成一个长字符。
paste(mytweets, collapse=" ")
与 tm_map 转换相比,这个清理过程对我来说非常有效。
我现在只剩下一套正经词和极少数不恰当的词了。
现在,我只需要弄清楚如何删除不正确的英文单词。
可能我将不得不从单词词典中减去我的单词集。
对我来说,由于某种原因,这段代码不起作用-
# Get rid of URLs
clean_tweet <- str_replace_all(clean_tweet, "http://t.co/[a-z,A-Z,0-9]*{8}","")
错误是-
Error in stri_replace_all_regex(string, pattern, fix_replacement(replacement), :
Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX)
所以,相反,我使用了
clean_tweet4 <- str_replace_all(clean_tweet3, "https://t.co/[a-z,A-Z,0-9]*","")
clean_tweet5 <- str_replace_all(clean_tweet4, "http://t.co/[a-z,A-Z,0-9]*","")
删除 URL
代码进行一些基本清理
转换为小写
df <- tm_map(df, tolower)
删除特殊字符
df <- tm_map(df, removePunctuation)
删除特殊字符
df <- tm_map(df, removeNumbers)
删除常用词
df <- tm_map(df, removeWords, stopwords('english'))
删除URL
removeURL <- function(x) gsub('http[[:alnum;]]*', '', x)
library(tidyverse)
clean_tweets <- function(x) {
x %>%
# Remove URLs
str_remove_all(" ?(f|ht)(tp)(s?)(://)(.*)[.|/](.*)") %>%
# Remove mentions e.g. "@my_account"
str_remove_all("@[[:alnum:]_]{4,}") %>%
# Remove hashtags
str_remove_all("#[[:alnum:]_]+") %>%
# Replace "&" character reference with "and"
str_replace_all("&", "and") %>%
# Remove puntucation, using a standard character class
str_remove_all("[[:punct:]]") %>%
# Remove "RT: " from beginning of retweets
str_remove_all("^RT:? ") %>%
# Replace any newline characters with a space
str_replace_all("\\n", " ") %>%
# Make everything lowercase
str_to_lower() %>%
# Remove any trailing whitespace around the text
str_trim("both")
}
tweets %>% clean_tweets
我使用 twitteR 包从 Twitter 中提取推文并将它们保存到文本文件中。
我对语料库进行了如下操作
xx<-tm_map(xx,removeNumbers, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,stripWhitespace, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,removePunctuation, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,strip_retweets, lazy=TRUE, 'mc.cores=1')
xx<-tm_map(xx,removeWords,stopwords(english), lazy=TRUE, 'mc.cores=1')
(使用 mc.cores=1 和 lazy=True 否则 mac 上的 R 会 运行 出错)
tdm<-TermDocumentMatrix(xx)
但是这个术语文档矩阵有很多奇怪的符号,无意义的单词等等。 如果推文是
RT @Foxtel: One man stands between us and annihilation: @IanZiering.
Sharknado‚Äã 3: OH HELL NO! - July 23 on Foxtel @SyfyAU
清理完推文后,我只希望保留完整的英文单词,即 sentence/phrase 没有其他所有内容(用户名、缩写词、网址)
示例:
One man stands between us and annihilation oh hell no on
(注意:tm包中的转换命令只能去除停用词、标点符号空格和转换为小写)
要删除 URL,您可以尝试以下操作:
removeURL <- function(x) gsub("http[[:alnum:]]*", "", x)
xx <- tm_map(xx, removeURL)
也许你可以定义类似的函数来进一步转换文本。
使用 gsub 和
stringr package
我找到了部分解决方案,用于删除转推、对屏幕名称的引用、主题标签、空格、数字、标点符号、网址。
clean_tweet = gsub("&", "", unclean_tweet)
clean_tweet = gsub("(RT|via)((?:\b\W*@\w+)+)", "", clean_tweet)
clean_tweet = gsub("@\w+", "", clean_tweet)
clean_tweet = gsub("[[:punct:]]", "", clean_tweet)
clean_tweet = gsub("[[:digit:]]", "", clean_tweet)
clean_tweet = gsub("http\w+", "", clean_tweet)
clean_tweet = gsub("[ \t]{2,}", "", clean_tweet)
clean_tweet = gsub("^\s+|\s+$", "", clean_tweet)
参考资料:(希克斯,2014 年) 经过以上 我做了下面的。
#get rid of unnecessary spaces
clean_tweet <- str_replace_all(clean_tweet," "," ")
# Get rid of URLs
clean_tweet <- str_replace_all(clean_tweet, "http://t.co/[a-z,A-Z,0-9]*{8}","")
# Take out retweet header, there is only one
clean_tweet <- str_replace(clean_tweet,"RT @[a-z,A-Z]*: ","")
# Get rid of hashtags
clean_tweet <- str_replace_all(clean_tweet,"#[a-z,A-Z]*","")
# Get rid of references to other screennames
clean_tweet <- str_replace_all(clean_tweet,"@[a-z,A-Z]*","")
参考:(斯坦顿 2013)
在执行上述任何操作之前,我使用以下方法将整个字符串折叠成一个长字符。
paste(mytweets, collapse=" ")
与 tm_map 转换相比,这个清理过程对我来说非常有效。
我现在只剩下一套正经词和极少数不恰当的词了。 现在,我只需要弄清楚如何删除不正确的英文单词。 可能我将不得不从单词词典中减去我的单词集。
对我来说,由于某种原因,这段代码不起作用-
# Get rid of URLs
clean_tweet <- str_replace_all(clean_tweet, "http://t.co/[a-z,A-Z,0-9]*{8}","")
错误是-
Error in stri_replace_all_regex(string, pattern, fix_replacement(replacement), :
Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX)
所以,相反,我使用了
clean_tweet4 <- str_replace_all(clean_tweet3, "https://t.co/[a-z,A-Z,0-9]*","")
clean_tweet5 <- str_replace_all(clean_tweet4, "http://t.co/[a-z,A-Z,0-9]*","")
删除 URL
代码进行一些基本清理
转换为小写
df <- tm_map(df, tolower)
删除特殊字符
df <- tm_map(df, removePunctuation)
删除特殊字符
df <- tm_map(df, removeNumbers)
删除常用词
df <- tm_map(df, removeWords, stopwords('english'))
删除URL
removeURL <- function(x) gsub('http[[:alnum;]]*', '', x)
library(tidyverse)
clean_tweets <- function(x) {
x %>%
# Remove URLs
str_remove_all(" ?(f|ht)(tp)(s?)(://)(.*)[.|/](.*)") %>%
# Remove mentions e.g. "@my_account"
str_remove_all("@[[:alnum:]_]{4,}") %>%
# Remove hashtags
str_remove_all("#[[:alnum:]_]+") %>%
# Replace "&" character reference with "and"
str_replace_all("&", "and") %>%
# Remove puntucation, using a standard character class
str_remove_all("[[:punct:]]") %>%
# Remove "RT: " from beginning of retweets
str_remove_all("^RT:? ") %>%
# Replace any newline characters with a space
str_replace_all("\\n", " ") %>%
# Make everything lowercase
str_to_lower() %>%
# Remove any trailing whitespace around the text
str_trim("both")
}
tweets %>% clean_tweets