2016-08-25 68 views
1

我想對兩個字符串出現在設定距離內的文檔進行計數,在彼此的10個字內。我們說'德國*'和'戰爭'。 我不想統計它們總共出現的次數,但只計算出現集合的文檔數量(如果出現一次,則將其計爲一次)。如何統計兩個詞在R中靠近的文檔?

我知道如何計算包含單詞的文檔。但是我不確定是否需要提取10克並查看這兩個單詞是否出現,然後對每個文檔計數,或者是否有更有效的方法。

+0

文件有多大?我的第一個想法是將每個文檔作爲一個單獨的字符串保存在列表中,然後將所有從德語到格式的擦除作爲正則表達式進行grep。然後將結果分爲單詞和數字。 –

+0

它們相當大(高達500MB)。 –

+0

所以我猜不同的字符串文件的每一行?然後grep你的關鍵詞。那麼我想你的數據會小很多。在此之後,如果字符串彼此接近,則可以加入它們並計算德語和戰爭之間的單詞。 –

回答

0

此後是一個小函數,用於測試文本中兩個單詞是否接近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) 
} 

它工作正常,但應改進以計算字數而不是字符數。

+0

我現在正在使用正則表達式來找到它,並且這個工作很好,例如: '\ 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 –

+0

你可以發佈MWE嗎? – JohnBee

相關問題