2013-06-07 4 views
6

У меня есть корпус из 26 текстовых файлов, каждый между 12 - 148kb, всего 1.2Mb. Я использую R на ноутбуке Windows 7.Максимальный разумный размер для стволовых запасов в тм?

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

exchanger <- function(x) stemCompletion(x, budget.orig) 
budget <- tm_map(budget, exchanger) 

Он работает со вчерашнего дня в 16:00! В R Studio при диагностике в журнале запросов отображаются новые запросы с разными номерами запросов. Диспетчер задач показывает это, используя некоторую память, но не сумасшедшую сумму. Я не хочу останавливать его, потому что, если он почти там? Любые другие идеи о том, как проверить прогресс - это неустойчивый корпус, к сожалению? Идеи о том, как долго это займет? Я подумал об использовании вектора имен dtm в качестве словаря, отрезанного с наиболее частой (или высокой tf-idf), но я не хочу убивать этот процесс.

Это обычный ноутбук с Windows 7 с большим количеством других вещей.

Является ли этот корпус слишком большим для stemCompletion? Не доходя до Python, есть ли лучший способ сделать stemCompletion или lemmatize vice stem - мой поиск в Интернете не дал никаких ответов.

ответ

1

Я не могу дать вам однозначный ответ без данных, воспроизводящих вашей проблемы, но я предполагаю, что узкое место приходит от folllowing линии от stemCompletion исходного кода:

possibleCompletions <- lapply(x, function(w) grep(sprintf("^%s", w), dictionary, value = TRUE)) 

После чего дала вам» ве держал завершающие эвристики по умолчанию «превалирует», это происходит:

possibleCompletions <- lapply(possibleCompletions, function(x) sort(table(x), decreasing = TRUE)) 
structure(names(sapply(possibleCompletions, "[", 1)), names = x) 

это первая линия петли через каждое слово в вашем корпусе и проверяет его против словаря возможных доработок. Я предполагаю, что у вас много слов, которые появляются много раз в вашем корпусе. Это означает, что функция вызывается много раз только для того, чтобы дать тот же ответ. Возможно, более быстрая версия (в зависимости от того, сколько слов были повторами и как часто они повторялись) будет выглядеть примерно так:

y <- unique(x) 

possibleCompletions <- lapply(y, function(w) grep(sprintf("^%s", w), dictionary, value = TRUE)) 

possibleCompletions <- lapply(possibleCompletions, function(x) sort(table(x), decreasing = TRUE)) 

z <- structure(names(sapply(possibleCompletions, "[", 1)), names = y) 

z[match(x, names(z))] 

Так что петли только через уникальные значения x, а не каждое значение x. Чтобы создать эту пересмотренную версию кода, вам необходимо загрузить источник из CRAN и изменить функцию (я нашел ее в файле завершения.R в папке R).

Или вы можете просто использовать Python для этого.

+0

спасибо за этот ответ - не удобно с messing с источником ... но могу ли я поместить эти команды в скрипт в окне сценария RStudio? Думаю, только если я поставлю полный источник, что по существу похоже на редактирование источника и сохранение? – ChristinaP

+0

Ты совершенно прав. Скопируйте полную функцию из источника в отдельный скрипт, а затем внесите изменения. Каждый раз, когда вам нужно его использовать, загрузите пакет, затем загрузите свою настраиваемую функцию, чтобы заменить загруженную из пакета. – SchaunW

0

Кристина, следуя Шауну, я рекомендую вам использовать только уникальное слово для применения стволовых комплектов. Я имею в виду, что для вашего ПК легко выполнить свои уникальные слова, которые они выполняют во всех ваших корпусах (со всеми повторениями).

  1. Прежде всего, возьмите уникальные слова из своего корпуса.Для exemplo:

    уникальный $ текст < - уникальный (бюджет)

  2. Их, вы можете получить уникальные слова из оригинального текста

    < unique_budget.orig - уникальный (budget.orig)

  3. Теперь вы можете применить stemcomplection для unieque слов

    уникальный $ < сдачи - бюджет%>% stemCompletion (словарь = unique_ budget.orig)

  4. Теперь у вас есть объект со всеми словами из вашего корпуса и их завершением. вам просто нужно применить соединение между вашим корпусом и уникальным объектом. Убедитесь, что оба объекта имеют одно и то же имя переменной для слов без завершения: этот gonne будет ключом.

Это позволит сократить количество операций, которые должен выполнять ваш ПК.