как разбить текст по возрастающей - PullRequest
0 голосов
/ 03 августа 2020

У меня небольшая проблема, по которой мне нужен совет специалистов. Мне нужно разбить текст на части разного размера. Например, один из текстов состоит из 19578 слов. то, что я хочу сделать, это поместить первые 1000 слов в первую часть, первые 2000 слов во вторую часть, первые 3000 слов в третью ... и поместить первые 19000 слов в девятнадцатую часть. Таким образом, каждый блок увеличивается на 1000 слов и должен содержать слова из предыдущих блоков. (в числовом смысле c желаемый список будет выглядеть так: [1,1000], [1,2000], [1,3000], [1,4000], ... [1,19000])

Используя пакет stringr, я поместил текст в список:

words <-str_split(as.character(text), pattern = boundary(type = "word"))

и попытался разделить список с помощью функции разделения:

split.words <-split(unlist(words), cut(seq_along(unlist(words)), 19, labels = F))

Однако, результат сильно отличается от того, что я желаю. Он производит куски одинакового размера. (если бы это был список numeri c, фрагменты выглядели бы так: [1,1000], [1001,2000], ..., [18001,19000])

Я также пытался объединить элементы списка split.word функцией c ():

combined <- c(split.words[[1]][["1"]], split.words[[1]][["2"]], split.words[[1]][["3"]], split.words[[1]][["4"]], ...)

, и снова результат - символьный элемент, который состоит из блоков по 1000 слов (один элемент, но все же есть разделы с 1000 словами в них). По сути, я просто изменил тип из списка на символьный элемент с помощью функции c ().

ТЕПЕРЬ мой вопрос в том, как я могу разбить свои тексты на куски неравного размера, которые увеличиваются на 1000 слов . Обратите внимание, что все фрагменты должны начинаться с первого слова.

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Может быть, вы можете попробовать Reduce с опцией accumulate = TRUE

Reduce(c,split.words,accumulate = TRUE)
0 голосов
/ 03 августа 2020
mkdir ./d.output

cat giant-humungous-file.txt | cut -d' ' -f1-1000 > ./d.output/file1000.txt

cat giant-humungous-file.txt | cut -d' ' -f1-2000 > ./d.output/file2000.txt

Et c.

Тогда вы можете сделать это: -

find ./d.output/*.txt -type f >> stack
cat stack | tr '\n' ' ' | sed s'@^@cat @'g | sed s'@$@ > newfile.txt@' > stack2
mv stack2 stack
chmod +x ./stack
./stack
...