2017-08-06 4 views
1

私はPythonを初めて使用しました。 Rを使用して1つの用語ドキュメントマトリックスを作成しました。Pythonを使用してコーパスを作成する

私は、データフレームRes_Desc_Trainで利用可能な説明列からテキストデータを読み込んでいます。しかし、どのように私はPythonでドキュメントの用語の行列を作成する機能を使用することができますかどうかは、任意の文書が学ぶのに役立つ場合に役立つだろうか分からない。以下は

私はあなたがpythonでテキストに対処する必要がある場合通常、最適なツールがNLTKであるR.

docs <- Corpus(VectorSource(Res_Desc_Train$Description)) 
docs <-tm_map(docs,content_transformer(tolower)) 

#remove potentially problematic symbols 
toSpace <- content_transformer(function(x, pattern) { return (gsub(pattern, " ", x))}) 
removeSpecialChars <- function(x) gsub("[^a-zA-Z0-9 ]","",x) 
docs <- tm_map(docs, toSpace, "/") 
docs <- tm_map(docs, toSpace, "-") 
docs <- tm_map(docs, toSpace, ":") 
docs <- tm_map(docs, toSpace, ";") 
docs <- tm_map(docs, toSpace, "@") 
docs <- tm_map(docs, toSpace, "\\(") 
docs <- tm_map(docs, toSpace, ")") 
docs <- tm_map(docs, toSpace, ",") 
docs <- tm_map(docs, toSpace, "_") 
docs <- tm_map(docs, content_transformer(removeSpecialChars)) 
docs <- tm_map(docs, content_transformer(tolower)) 
docs <- tm_map(docs, removeWords, stopwords("en")) 
docs <- tm_map(docs, removePunctuation) 
docs <- tm_map(docs, stripWhitespace) 
docs <- tm_map(docs, removeNumbers) 

#inspect(docs[440]) 
dataframe<-data.frame(text=unlist(sapply(docs, `[`, "content")), stringsAsFactors=F) 

BigramTokenizer <- 
    function(x) 
    unlist(lapply(ngrams(words(x), 2), paste, collapse = " "), use.names = FALSE) 

dtm <- DocumentTermMatrix(docs,control=list(stopwords=FALSE,wordLengths =c(2,Inf),tokenize = BigramTokenizer)) 

Weighteddtm <- weightTfIdf(dtm,normalize=TRUE) 
mat.df <- as.data.frame(data.matrix(Weighteddtm), stringsAsfactors = FALSE) 
mat.df <- cbind(mat.df, Res_Desc_Train$Group) 
colnames(mat.df)[ncol(mat.df)] <- "Group" 
Assignment.Distribution <- table(mat.df$Group) 

Res_Desc_Train_Assign <- mat.df$Group 

Assignment.Distribution <- table(mat.df$Group) 

### Feature has different ranges, normalizing to bring ranges from 0 to 1 
### Another way to standardize using z-scores 

normalize <- function(x) { 
    y <- min(x) 
    z <- max(x) 
    temp <- x - y 
    temp1 <- (z - y) 
    temp2 <- temp/temp1 
    return(temp2) 
} 
#normalize(c(1,2,3,4,5)) 

num_col <- ncol(mat.df)-1 
mat.df_normalize <- as.data.frame(lapply(mat.df[,1:num_col], normalize)) 
mat.df_normalize <- cbind(mat.df_normalize, Res_Desc_Train_Assign) 
colnames(mat.df_normalize)[ncol(mat.df_normalize)] <- "Group" 

答えて

1

を使用するコードです。特定のケースでは、term-document-matrixを作成する特定のpythonパッケージがあります。このパッケージはTextminingと呼ばれます。

また、regexを使用する必要がある場合は、re pythonパッケージを使用できます。それ以外の場合は、トークナイザを使用して直接NLTKを作成できます。

+1

NLTKとTextminingのドキュメントを共有していただきありがとうございます。必要なテキストドキュメントを準備します。 – user3734568

関連する問題