我想對兩個字符串出現在設定距離內的文檔進行計數,在彼此的10個字內。我們說'德國*'和'戰爭'。 我不想統計它們總共出現的次數,但只計算出現集合的文檔數量(如果出現一次,則將其計爲一次)。如何統計兩個詞在R中靠近的文檔?
我知道如何計算包含單詞的文檔。但是我不確定是否需要提取10克並查看這兩個單詞是否出現,然後對每個文檔計數,或者是否有更有效的方法。
我想對兩個字符串出現在設定距離內的文檔進行計數,在彼此的10個字內。我們說'德國*'和'戰爭'。 我不想統計它們總共出現的次數,但只計算出現集合的文檔數量(如果出現一次,則將其計爲一次)。如何統計兩個詞在R中靠近的文檔?
我知道如何計算包含單詞的文檔。但是我不確定是否需要提取10克並查看這兩個單詞是否出現,然後對每個文檔計數,或者是否有更有效的方法。
此後是一個小函數,用於測試文本中兩個單詞是否接近100個字符。
isclose = function(text){
test <- FALSE
limit <- 100 # Interval in char counts
match1 <- gregexpr('war', text)[[1]]
match2 <- gregexpr('German', text)[[1]]
for(i in 1:length(match1)){
for(j in 1:length(match2)){
if(abs(match1[i]-match2[j]) < limit) test <- TRUE
}
}
return(test)
}
它工作正常,但應改進以計算字數而不是字符數。
我現在正在使用正則表達式來找到它,並且這個工作很好,例如: '\ b?:ameri [k | c] a [az] * \ W +(?:\ w + \ W +){1,10} ?[S | C] igaret [AZ] * | [S | C] igaret [AZ] * \ W +?(?:\ W + \ W +){1,10} AMERI [K | C]一[AZ] *) \ b' for Amerika and cigarettes –
你可以發佈MWE嗎? – JohnBee
文件有多大?我的第一個想法是將每個文檔作爲一個單獨的字符串保存在列表中,然後將所有從德語到格式的擦除作爲正則表達式進行grep。然後將結果分爲單詞和數字。 –
它們相當大(高達500MB)。 –
所以我猜不同的字符串文件的每一行?然後grep你的關鍵詞。那麼我想你的數據會小很多。在此之後,如果字符串彼此接近,則可以加入它們並計算德語和戰爭之間的單詞。 –