为了在文本文档中执行机器学习,我们首先需要将文本内容转换为数字特征向量。
词袋模型
简单有效,通过以下步骤将文本转化为数值向量 -> (分词,计数,规范化和加权)
局限性:
- 不能涵盖词语间的关联关系
- 不能正确捕捉否定关系
- 不能捕捉短语和多词表达
- 忽略了词序
- 不能解释潜在的拼写错误或单词派生
N-grams
代替构建简单的unigrams集合(n=1),可以使用bigrams(n=2),这样就考虑了连续单词的出现次数。词序
character n-grams
能够表示拼写错误和派生词的情况
from sklearn.feature_extraction.text import CountVectorizer
ngram_vectorizer = CountVectorizer(analyzer='char_wb', ngram_range=(2, 2))
counts = ngram_vectorizer.fit_transform(['words', 'wprds'])
ngram_vectorizer.get_feature_names()
Out: [' w', 'ds', 'or', 'pr', 'rd', 's ', 'wo', 'wp']
分词、去停用词
from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer(min_df=1, stop_words='english')
X_train_counts = count_vect.fit_transform(twenty_train.data)
tfidf
applying the Euclidean (L2) norm:
# without normalization
import numpy as np
import scipy as sp
def tfidf(term, doc, docset):
tf = float(doc.count(term)) / sum(doc.count(term) for doc in docset)
idf = np.log(float(len(docset)) / (1 + len([doc for doc