Có vẻ như khó khăn để có được những điều giống hệt nhau giữa nltk
và tm
về các bước tiền xử lý, vì vậy tôi nghĩ rằng cách tiếp cận tốt nhất là sử dụng rpy2
để chạy tiền xử lý trong R và kéo kết quả vào python:
import rpy2.robjects as ro
preproc = [x[0] for x in ro.r('''
tweets = read.csv("tweets.csv", stringsAsFactors=FALSE)
library(tm)
library(SnowballC)
corpus = Corpus(VectorSource(tweets$Tweet))
corpus = tm_map(corpus, tolower)
corpus = tm_map(corpus, removePunctuation)
corpus = tm_map(corpus, removeWords, c("apple", stopwords("english")))
corpus = tm_map(corpus, stemDocument)''')]
Sau đó, bạn có thể tải nó vào scikit-learn
- điều duy nhất bạn sẽ cần phải làm gì để có được những điều để phù hợp giữa CountVectorizer
và DocumentTermMatrix
là để loại bỏ các điều khoản có độ dài ít hơn 3:
from sklearn.feature_extraction.text import CountVectorizer
def mytokenizer(x):
return [y for y in x.split() if len(y) > 2]
# Full document-term matrix
cv = CountVectorizer(tokenizer=mytokenizer)
X = cv.fit_transform(preproc)
X
# <1181x3289 sparse matrix of type '<type 'numpy.int64'>'
# with 8980 stored elements in Compressed Sparse Column format>
# Sparse terms removed
cv2 = CountVectorizer(tokenizer=mytokenizer, min_df=0.005)
X2 = cv2.fit_transform(preproc)
X2
# <1181x309 sparse matrix of type '<type 'numpy.int64'>'
# with 4669 stored elements in Compressed Sparse Column format>
Hãy xác minh điều này khớp với R:
tweets = read.csv("tweets.csv", stringsAsFactors=FALSE)
library(tm)
library(SnowballC)
corpus = Corpus(VectorSource(tweets$Tweet))
corpus = tm_map(corpus, tolower)
corpus = tm_map(corpus, removePunctuation)
corpus = tm_map(corpus, removeWords, c("apple", stopwords("english")))
corpus = tm_map(corpus, stemDocument)
dtm = DocumentTermMatrix(corpus)
dtm
# A document-term matrix (1181 documents, 3289 terms)
#
# Non-/sparse entries: 8980/3875329
# Sparsity : 100%
# Maximal term length: 115
# Weighting : term frequency (tf)
sparse = removeSparseTerms(dtm, 0.995)
sparse
# A document-term matrix (1181 documents, 309 terms)
#
# Non-/sparse entries: 4669/360260
# Sparsity : 99%
# Maximal term length: 20
# Weighting : term frequency (tf)
Như bạn có thể thấy, số lượng phần tử và cụm từ được lưu khớp chính xác giữa hai phương pháp hiện tại.
Sử dụng NLTK cho xử lý ngôn ngữ tự nhiên bằng Python. – ramcdougal
@ramcdougal: Tôi đã tập hợp nhiều, nhưng tôi đang phải vật lộn với tài liệu. – orome
Xem [hướng dẫn] này (http://nbviewer.ipython.org/urls/gist.githubusercontent.com/kljensen/9662971/raw/4628ed3a1d27b84a3c56e46d87146c1d08267893/NewHaven.io+NLP+tutorial.ipynb?create=1). Nó bao gồm tokenization, ngừng từ, và bắt nguồn. – ramcdougal