[英]How to import emotion lexicon into R for data scraping of Kickstarter
我正在嘗試使用R創建一個模型來測量文本中的情感。基本上,使用帶有情感詞的詞典,我只想從大量的URL中提取“p”(段落)。 我希望通過使用詞典基於預定義的情感指示單詞的存在來找到每個URL的每個情感的單詞計數。 詞典鏈接
我使用的數據是JSON格式,來自Webrobots: Dataset Link (最新的集合)。
任何幫助將不勝感激,因為我真的很想開始這個! 即使只是知道我如何將其導入R和一個代碼來計算單詞將是非常有幫助的。
親切的問候,一個絕望的R文盲女孩。
更新:數據文件被導入到R.但是,我找不到一種方法來編寫一個代碼來測試是否存在針對數據運行的詞典指示的單詞。 我試圖創建6個新變量,其中包含六種基本情緒(快樂,悲傷,憤怒,驚訝,恐懼,厭惡)的每個競選計數,顯示這些情緒的存在。
我已經仔細觀察了文件“ p”部分。 我只需要對其內容進行分類。
http://www.saifmohammad.com/WebDocs/NRC-AffectIntensity-Lexicon.txt
然后你需要將這個列表分成4個獨立的部分,每個部分應該有一個影響。 這將導致4個.csv文件:
anger_list = w.csv
fear_list = x.csv
joy_list = y.csv
sad_list = z.csv
如果您不想手動執行此操作,則可以使用另一個詞典列表,將數據直接下載到單獨的文件中: https : //www.cs.uic.edu/~liub/FBS/sentiment-analysis.html#lexicon
由於您提到了URL的存在,我還分享了一個簡短的代碼,用於編輯或清理URL。 這將幫助您從URL中獲取干凈的文本數據:
replacePunctuation <- function(x)
{
# Lowercase all words for convenience
x <- tolower(x)
# Remove words with multiple consecutive digits in them (3 in this case)
x <- gsub("[a-zA-Z]*([0-9]{3,})[a-zA-Z0-9]* ?", " ", x)
# Remove extra punctuation
x <- gsub("[.]+[ ]"," ",x) # full stop
x <- gsub("[:]+[ ]"," ",x) # Colon
x <- gsub("[?]"," ",x) # Question Marks
x <- gsub("[!]"," ",x) # Exclamation Marks
x <- gsub("[;]"," ",x) # Semi colon
x <- gsub("[,]"," ",x) # Comma
x <- gsub("[']"," ",x) # Apostrophe
x <- gsub("[-]"," ",x) # Hyphen
x <- gsub("[#]"," ",x)
# Remove all newline characters
x <- gsub("[\r\n]", " ", x)
# Regex pattern for removing stop words
stop_pattern <- paste0("\\b(", paste0(stopwords("en"), collapse="|"), ")\\b")
x <- gsub(stop_pattern, " ", x)
# Replace whitespace longer than 1 space with a single space
x <- gsub(" {2,}", " ", x)
x
}
接下來,假設您已將數據作為文本讀取到R中。假設您已將其存儲為某些數據框df $ p的一部分 。 然后,下一步是向此數據框添加其他列:
df$p # contains text of interest
現在,針對這四個影響的每一個,在此數據框中添加其他列
df$ANGER = 0
df$FEAR = 0
df$JOY = 0
df$SADNESS = 0
然后,您只需循環遍歷df的每一行,將文本p分解為基於空格的單詞。 然后,您將從Lexicon列表中查找特定術語的出現,以查找您獲得的剝離詞。 然后,您為每種影響分配得分,如下所示:
for (i in 1:nrow(df))
{
# counter initialization
angry = 0
feared = 0
joyful = 0
sad = 0
# for df, let's say the text 'p' is at first column place
words <- strsplit(df[i,1], " ")[[1]]
for (j in 1:length(words))
{
if (words[j] %in% anger_list[,1])
angry = angry + 1
else {
if (words[j] %in% fear_list[,1])
feared = feared + 1
else {
if (words[j] %in% joy_list[,1])
joyful = joyful + 1
else
sad = sad + 1
} #else 2
} #else 1
} #for 2
df[i,2] <- angry
df[i,3] <- feared
df[i,4] <- joyful
df[i,5] <- sad
}#for 1
請注意,在上面的實現中,我假設一個單詞一次只能表示一個影響。 這意味着我認為這些影響是相互排斥的。 但是,我知道對於文本“ p”中的某些術語,可能並非如此,因此您應該修改代碼以使其合並,以使每個術語具有多種影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.