Ответ 1
Я думаю, что возможность предварительной обработки данных R, т.е. от извлечения данных из своего источника и непосредственно перед шагами аналитики, значительно улучшилась за последние три года (время, которое я использовал R), Я использую python ежедневно и имею последние семь лет или около того - его возможности обработки текста превосходны - и все же я бы без колебаний на какое-то время использовал R для типа задачи, которую вы упомянули.
Несколько оговорок. Во-первых, я бы предложил очень внимательно изучить пару внешних пакетов для набора задач в вашем Q - в частности, хеш (структура данных ключевого значения типа python) и stringr (состоит в основном из оберток над менее удобными функциями манипуляции с строками в базовой библиотеке)
Оба stringr и хэш доступны на CRAN.
> library(hash)
> dx = hash(k1=453, k2=67, k3=913)
> dx$k1
[1] 453
> dx = hash(keys=letters[1:5], values=1:5)
> dx
<hash> containing 5 key-value pair(s).
a : 1
b : 2
c : 3
d : 4
e : 5
> dx[a]
<hash> containing 1 key-value pair(s).
a : 1
> library(stringr)
> astring = 'onetwothree456seveneight'
> ptn = '[0-9]{3,}'
> a = str_extract_all(astring, ptn)
> a
[[1]]
[2] "456"
Похоже, что существует большое количество пользователей R, для которых обработка текста и текстовая аналитика составляют значительную часть их повседневной работы, о чем свидетельствует CRAN Просмотр задачи обработки естественного языка (одна из примерно 20 таких неофициальных доменных пакетов). Внутри этого Task View находится пакет tm - пакет, предназначенный для функций интеллектуального анализа текста. Включенные в tm - оптимизированные функции для обработки задач, таких как упомянутые в вашем Q.
Кроме того, R имеет отличный выбор пакетов для интерактивной работы на достаточно больших наборах данных (например, > 1 ГБ) часто без необходимости создания инфраструктуры параллельной обработки (но которая, безусловно, может использовать кластер, если он доступен), Самым впечатляющим из них, на мой взгляд, является набор пакетов под рубрикой "Проект Bigmemory" (CRAN) Майкла Кейна и Джона Эмерсона в Йеле; этот Проект включает в себя большую память, бинаналитику, синхронность, bigtabulate и bigalgebra. В целом, методы, лежащие в основе этих пакетов, включают в себя: (i) распределение данных в общую память, что позволяет координировать совлокальный доступ отдельными параллельными процессами с одной копией данных; (ii) структуры данных с файловой поддержкой (которые, я считаю, но я не уверен, являются синонимами файловой структуры с отображением памяти и которые позволяют очень быстро получить доступ с диска с помощью указателей, что позволяет избежать ограничения RAM на доступный размер файла).
Тем не менее, довольно много функций и структур данных в стандартной библиотеке R упрощают интерактивную работу с данными, приближающимися к обычным пределам ОЗУ. Например,.RData, собственный двоичный формат, настолько прост, насколько это возможно (команды сохраняют и загружают), и у него отличное сжатие:
> library(ElemStatLearn)
> data(spam)
> format(object.size(spam), big.mark=',')
[1] "2,344,384" # a 2.34 MB data file
> save(spam, file='test.RData')
Этот файл "test.RData" имеет значение 176 КБ, более 10-кратное сжатие.