2016-08-25 13 views
1

Я хотел был бы сосчитать документы, в которых две строки отображаются на заданном расстоянии в пределах 10 слов друг от друга. Скажем, «немецкий» и «война». Я не хочу подсчитывать время, которое они отображаются в целом, но только количество документов, в которых появляется набор (если он появляется один раз, считайте его одним).Как подсчитать документы, в которых два слова появляются в непосредственной близости от R?

Я знаю, как считать документы, содержащие слово. Но я не уверен, нужно ли мне извлекать 10 граммов и посмотреть, появляются ли два слова, а затем подсчитать это на одном документе или, если есть более эффективный способ.

+0

Насколько огромны документы? Моя первая идея состоит в том, чтобы держать каждый документ в списке как одну строку, а затем grep все frase от немецкого до войны как регулярное выражение. Затем разделите результат на слова и подсчитайте их. –

+0

Они довольно большие (до 500 МБ). –

+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} ? [с | с] igaret [AZ] * | [с | с] igaret [AZ] * \ W +? (?: \ W + \ W +) {1,10} Ameri [к | с] а [AZ] *) \ b' для Amerika и сигарет –

+0

Можете ли вы разместить MWE? – JohnBee

 Смежные вопросы

  • Нет связанных вопросов^_^