我使用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
在清理推文后,我只想留下适当的完整英文单词,即句子/短语无效(用户名,缩短的单词,网址)
示例:
One man stands between us and annihilation oh hell no on
(注意:tm包中的转换命令只能删除停用词,标点符号空格以及转换为小写)
答案 0 :(得分:12)
使用gsub和
stringr包
我已经找到了部分解决方案,用于删除转推,对屏幕名称,主题标签,空格,数字,标点符号,网址的引用。
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]*","")
参考:( Stanton 2013)
在执行上述任何操作之前,我使用以下内容将整个字符串折叠为一个长字符。
paste(mytweets, collapse=" ")
与tm_map转换相比,这个清理过程对我很有用。
我现在剩下的就是一套正确的单词和一些不正确的单词。 现在,我只需要弄清楚如何删除不合适的英语单词。 可能我不得不从单词词典中减去我的单词集。
答案 1 :(得分:2)
要删除网址,您可以尝试以下操作:
removeURL <- function(x) gsub("http[[:alnum:]]*", "", x)
xx <- tm_map(xx, removeURL)
可能您可以定义类似的功能来进一步转换文本。
答案 2 :(得分:2)
library(tidyverse)
clean_tweets <- function(x) {
x %>%
str_remove_all(" ?(f|ht)(tp)(s?)(://)(.*)[.|/](.*)") %>%
str_replace_all("&", "and") %>%
str_remove_all("[[:punct:]]") %>%
str_remove_all("^RT:? ") %>%
str_remove_all("@[[:alnum:]]+") %>%
str_remove_all("#[[:alnum:]]+") %>%
str_replace_all("\\\n", " ") %>%
str_to_lower() %>%
str_trim("both")
}
tweets %>% clean_tweets
答案 3 :(得分:1)
对我来说,由于某些原因,此代码无效 -
# 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]*","")
删除网址
答案 4 :(得分:0)
代码进行一些基本的清理
df <- tm_map(df, tolower)
df <- tm_map(df, removePunctuation)
df <- tm_map(df, removeNumbers)
df <- tm_map(df, removeWords, stopwords('english'))
removeURL <- function(x) gsub('http[[:alnum;]]*', '', x)