2013-06-07 16 views
6

Mam korpus 26 plików tekstowych, każdy od 12 do 148 KB, łącznie 1,2 MB. Używam R na laptopie Windows 7.Maksymalny rozsądny rozmiar dla wykorzenia w tm?

Zrobiłem wszystkie normalne rzeczy porządkowe (stopwords, niestandardowe stopwords, małe litery, cyfry) i chcę wykonać uzupełnianie łodygi. Używam oryginalnego korpusu jako słownika, jak pokazano w przykładach. Wypróbowałem kilka prostych wektorów, aby upewnić się, że to zadziała w ogóle (z około 5 terminami) i zrobiło to bardzo szybko.

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

Działa od wczoraj o 16.00! W R Studio w diagnostyce, dziennik żądań pokazuje nowe żądania z różnymi numerami zgłoszeń. Menedżer zadań pokazuje go za pomocą pamięci, ale nie za szaloną sumę. Nie chcę tego przestać, bo co, jeśli już prawie tam jest? Jakieś inne pomysły, jak sprawdzić postęp - czy to niestety zmienny korpus? Pomysły na temat tego, jak długo powinno to potrwać? Zastanawiałem się nad użyciem wektora nazw dtm jako słownika, odciętego w najczęstszym (lub wysokim tf-idf), ale niechętnie zabijam ten proces.

Jest to zwykły laptop z systemem Windows 7 z wieloma innymi funkcjami.

Czy ten korpus jest zbyt duży, aby można go było ukończyć? Skoro nie ma mowy o przejściu do Pythona, czy istnieje lepszy sposób na wykorzenienie lub lematyzacja wszy - moje wyszukiwanie w sieci nie przyniosło żadnych odpowiedzi.

Odpowiedz

1

nie mogę dać jednoznacznej odpowiedzi bez danych, który odtwarza swój problem, ale myślę, że wąskim gardłem pochodzi z folllowing linii z kodem stemCompletion źródło:

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

Po co ci dał” ve przechowywane heurystyki zakończenia na niewypłacalności „powszechne”, tak się dzieje:

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

to pierwsza linia pętli przez każdego słowa w swoim korpusie i sprawdza je przed słownika ewentualnych uzupełnień. Zgaduję, że masz wiele słów, które pojawiają się wiele razy w twoim ciele. Oznacza to, że funkcja jest wywoływana wiele razy tylko po to, aby dać taką samą odpowiedź. A mogą szybsza wersja (w zależności od tego, jak wiele słów było powtórzeń i jak często były one powtarzane) będzie wyglądać mniej więcej tak:

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))] 

więc pętle tylko przez unikalnych wartościach x zamiast każdej wartości x. Aby utworzyć tę poprawioną wersję kodu, musisz pobrać źródło z CRAN i zmodyfikować funkcję (znalazłem ją w zakończeniu.R w folderze R).

Albo może po prostu chcesz użyć Python do tego.

+0

dziękuję za tę odpowiedź - nie jest to wygodne ze złą rozmową ze źródłem ... ale czy mogę umieścić te polecenia w skrypcie w oknie skryptowym RStudio? Zgaduję, że tylko wtedy, gdy umieszczę pełne źródło, co w istocie przypomina edycję źródła i zapisywanie? – ChristinaP

+0

Masz całkowitą rację. Skopiuj pełną funkcję ze źródła do osobnego skryptu, a następnie wprowadź zmiany. Za każdym razem, gdy trzeba z niego korzystać, należy załadować pakiet, a następnie załadować niestandardową funkcję, aby zastąpić to, co zostało załadowane z paczki. – SchaunW

0

Cristina, po Schaun Polecam użyć tylko jedno słowo do zastosowania stemcompletion. Chodzi mi o to, że twój PC jest łatwy do wykonania w twoich unikalnych słowach, robi to dokończenie we wszystkich twoich korpusach (ze wszystkimi powtórzeniami).

  1. Po pierwsze, weź unikalne słowa z korpusu.Dla Exemplo:

    wyjątkowy $ tekst < - unikatowe (budżet)

  2. nich można uzyskać niepowtarzalne słowa z oryginalnego tekstu

    unique_budget.orig < - unikatowe (budget.orig)

  3. teraz można zastosować stemcomplection dla unieque słowy

    wyjątkowy $ completition < - budżet%>% stemCompletion (Słownik = unique_ budget.orig)

  4. Teraz masz obiekt ze wszystkimi słowami z korpusu i ich wypełnieniem. wystarczy zastosować połączenie pomiędzy twoim ciałem a obiektem unikalnym. Upewnij się, że oba obiekty mają taką samą nazwę zmiennej dla słów bez ukończenia: to musi być klucz.

Spowoduje to zmniejszenie liczby operacji, które musi wykonać komputer.

Powiązane problemy