2015-06-23 12 views
7

Próbuję oczyścić korpus i Użyłem typowych czynności, takich jak poniższy kod:Cytaty i myślniki nie usunięte przez funkcje pakietu tm podczas czyszczenia korpusu

docs<-Corpus(DirSource(path)) 
docs<-tm_map(docs,content_transformer(tolower)) 
docs<-tm_map(docs,content_transformer(removeNumbers)) 
docs<-tm_map(docs,content_transformer(removePunctuation)) 
docs<-tm_map(docs,removeWords,stopwords('en')) 
docs<-tm_map(docs,stripWhitespace) 
docs<-tm_map(docs,stemDocument) 
dtm<-DocumentTermMatrix(docs) 

Jednak kiedy sprawdzić matrycę istnieje kilka słów, które pochodzą z cytatami, takie jak: „my” „spółka” „kod wytycznych” -known -accelerated

wydaje się, że same słowa są wewnątrz cudzysłowów, ale gdy próbuję uruchomić, usunąć Kod interpunkcji ponownie nie działa. Poza tym istnieje kilka słów z kulami, których również nie mogę usunąć.

Każda pomoc zostanie bardzo doceniona.

+1

Czy możesz podać odtwarzalny przykład? –

+0

Przykro mi, nie rozumiem "odtwarzalnego przykładu"? – anonymous

+0

http://stackoverflow.com/help/mcve – RHertel

Odpowiedz

8

removePunctuation używa gsub('[[:punct:]]','',x) tj. Usuwa symbole: !"#$%&'()*+, \-./:;<=>[email protected][\\\]^_ {|} ~ `. Aby usunąć inne symbole, takie jak typograficznych cudzysłowów lub kulach znaków (lub dowolny inny), deklarują swoją funkcję Transformacja:

removeSpecialChars <- function(x) gsub("“•”","",x) 
docs <- tm_map(docs, removeSpecialChars) 

Albo można iść dalej i usunąć wszystko, co nie jest alfanumeryczny symbol lub miejsce:

removeSpecialChars <- function(x) gsub("[^a-zA-Z0-9 ]","",x) 
docs <- tm_map(docs, removeSpecialChars) 
+0

Użyłem powyższego kodu do dokumentu, który zawierał zdanie: "Dla celów niniejszej Umowy" Odstępstwo od daty świadczenia usług "oznacza datę odłączenia Wykonawcy od doręczenia w rozumieniu sekcji 409A (a) (2) (i) (A) Kodeksu i ustalone zgodnie z domyślnymi przepisami sekcji 409A Kodeksu ". Nadal nie działa prawidłowo. – anonymous

+0

O, widzę, to cytaty typograficzne. Nie są częścią klasy znaków interpunkcyjnych POSIX. Zmieniono moją odpowiedź. – cyberj0g

+0

Działa świetnie, dzięki – anonymous

1

Lepiej skonstruowany tokenizer poradzi sobie z tym automatycznie. Wypróbuj to:

> require(quanteda) 
> text <- c("Enjoying \"my time\".", "Single 'air quotes'.") 
> toktexts <- tokenize(toLower(text), removePunct = TRUE, removeNumbers = TRUE) 
> toktexts 
[[1]] 
[1] "enjoying" "my"  "time"  

[[2]] 
[1] "single" "air" "quotes" 

attr(,"class") 
[1] "tokenizedTexts" "list"   
> dfm(toktexts, stem = TRUE, ignoredFeatures = stopwords("english"), verbose = FALSE) 
Creating a dfm from a tokenizedTexts object ... 
    ... indexing 2 documents 
    ... shaping tokens into data.table, found 6 total tokens 
    ... stemming the tokens (english) 
    ... ignoring 174 feature types, discarding 1 total features (16.7%) 
    ... summing tokens by document 
    ... indexing 5 feature types 
    ... building sparse matrix 
    ... created a 2 x 5 sparse dfm 
    ... complete. Elapsed time: 0.016 seconds. 
Document-feature matrix of: 2 documents, 5 features. 
2 x 5 sparse Matrix of class "dfmSparse" 
     features 
docs air enjoy quot singl time 
    text1 0  1 0  0 1 
    text2 1  0 1  1 0 
Powiązane problemy