seo网站地图怎么做,安卓软件定制开发,网络运维工程师面试常见问题,网站开发前后端配比文章目录 词袋模型TF-IDF模型词汇表模型 词袋模型 文本特征提取有两个非常重要的模型#xff1a; 词集模型#xff1a;单词构成的集合#xff0c;集合自然每个元素都只有一个#xff0c;也即词集中的每个单词都只有一个。 词袋模型#xff1a;在词集的基础上如果一个单词… 文章目录 词袋模型TF-IDF模型词汇表模型 词袋模型 文本特征提取有两个非常重要的模型 词集模型单词构成的集合集合自然每个元素都只有一个也即词集中的每个单词都只有一个。 词袋模型在词集的基础上如果一个单词在文档中出现不止一次统计其出现的次数频数。 两者本质上的区别词袋是在词集的基础上增加了频率的维度词集只关注有和没有词袋还要关注有几个。 假设我们要对一篇文章进行特征化最常见的方式就是词袋。 导入相关的函数库
from sklearn.feature_extraction.text import CountVectorizer实例化分词对象
vectorizer CountVectorizer(min_df1)vectorizer CountVectorizer(analyzer...word, binaryFalse, decode_error...strict,dtype... numpy.int64, encoding...utf-8, input...content,lowercaseTrue, max_df1.0, max_featuresNone, min_df1,ngram_range(1, 1), preprocessorNone, stop_wordsNone,strip_accentsNone, token_pattern...(?u)\\b\\w\\w\\b,tokenizerNone, vocabularyNone)将文本进行词袋处理
import jieba
from sklearn.feature_extraction.text import CountVectorizertxt
变压器停、送电操作时应先将该变压器中性点接地对于调度要求不接地的变压器在投入系统后应拉开中性点接地刀闸。在中性点直接接地系统中运行中的变压器中性点接地闸刀需倒换时应先合上另一台主变压器的中性点接地闸刀再拉开原来变压器的中性点接地闸刀。运行中的变压器中性点接地方式、中性点倒换操作的原则是保证该网络不失去接地点采用先合后拉的操作方法。
变压器中性点的接地方式变化后其保护应相应调整即是变压器中性点接地运行时投入中性点零序过流保护停用中性点零序过压保护及间隔零序过流保护变压器中性点不接地运行时投入中性点零序过压保护及间隔零序保护停用中性点零序过流保护否则有可能造成保护误动作。words jieba.lcut(txt) # 使用精确模式对文本进行分词
vectorizer CountVectorizer(min_df1)#min_df 默认为1int,表示“忽略少于1个文档中出现的术语”因此默认设置不会忽略任何术语该参数不起作用X vectorizer.fit_transform(words)#获取对应的特征名称
print(vectorizer.get_feature_names())#feature_names可能不等于words
#词袋化
print(X.toarray())词袋类似array([[0, 1, 1, 1, 0, 0, 1, 0, 1], [0, 1, 0, 1, 0, 2, 1, 0, 1], [1, 0, 0, 0, 1, 0, 1, 1, 0], [0, 1, 1, 1, 0, 0, 1, 0, 1]]…) 但是如何可以使用现有的词袋的特征对其他文本进行特征提取呢我们定义词袋的特征空间叫做词汇表vocabulary
vocabularyvectorizer.vocabulary_针对其他文本进行词袋处理时可以直接使用现有的词汇表
new_vectorizer CountVectorizer(min_df1, vocabularyvocabulary)CountVectorize函数比较重要的几个参数为
decode_error处理解码失败的方式分为‘strict’、‘ignore’、‘replace’三种方式。strip_accents在预处理步骤中移除重音的方式。max_features词袋特征个数的最大值。stop_words判断word结束的方式。max_dfdf最大值。min_dfdf最小值 。binary默认为False当与TF-IDF结合使用时需要设置为True。 本例中处理的数据集均为英文所以针对解码失败直接忽略使用ignore方式stop_words的方式使用englishstrip_accents方式为ascii方式。
TF-IDF模型 文本处理领域还有一种特征提取方法叫做TF-IDF模型term frequency–inverse document frequency词频与逆向文件频率。TF-IDF是一种统计方法用以评估某一字词对于一个文件集或一个语料库的重要程度。字词的重要性随着它在文件中出现的次数成正比增加但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用作为文件与用户查询之间相关程度的度量或评级。 TF-IDF的主要思想是如果某个词或短语在一篇文章中出现的频率TF(Term Frequency词频)词频高并且在其他文章中很少出现则认为此词或者短语具有很好的类别区分能力适合用来分类。TF-IDF实际上是TF * IDF。TF表示词条在文档d中出现的频率。IDFinverse document frequency逆向文件频率的主要思想是如果包含词条t的文档越少也就是n越小IDF越大则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m而其他类包含t的文档总数为k显然所有包含t的文档数nmk当m大的时候n也大按照IDF公式得到的IDF的值会小就说明该词条t类别区分能力不强。但是实际上如果一个词条在一个类的文档中频繁出现则说明该词条能够很好代表这个类的文本的特征这样的词条应该给它们赋予较高的权重并选来作为该类文本的特征词以区别与其他类文档。
示例 文档
中文停用词见 停用词
import jieba
import pandas as pd
import re
from sklearn.feature_extraction.text import CountVectorizer#词袋
from sklearn.feature_extraction.text import TfidfTransformer#tfidffilepd.read_excel(文档.xls)# 定义删除除字母,数字汉字以外的所有符号的函数
def remove_punctuation(line):line str(line)if line.strip() :return rule re.compile(u[^a-zA-Z0-9\u4E00-\u9FA5])line rule.sub(, line)return line#停用词
def stopwordslist(filepath):try:stopwords [line.strip() for line in open(filepath, r, encodingutf-8).readlines()]except:stopwords [line.strip() for line in open(filepath, r, encodinggbk).readlines()]return stopwords# 加载停用词
stopwords stopwordslist(停用词.txt)#去除标点符号
file[clean_review]file[文档].apply(remove_punctuation)
# 去除停用词
file[cut_review] file[clean_review].apply(lambda x: .join([w for w in list(jieba.cut(x)) if w not in stopwords]))#词袋计数
count_vect CountVectorizer()
X_train_counts count_vect.fit_transform(file[cut_review])#tf-idf
tfidf_transformer TfidfTransformer()
X_train_tfidf tfidf_transformer.fit_transform(X_train_counts)X_train_tfidf (0, 123) 0.08779682150216786 表示第1篇文档词袋中第123个单词的tdidf为0.087 X_train_tfidf.toarray()
词汇表模型
词袋模型可以很好的表现文本由哪些单词组成但是却无法表达出单词之间的前后关系于是人们借鉴了词袋模型的思想使用生成的词汇表对原有句子按照单词逐个进行编码。TensorFlow默认支持了这种模型
tf.contrib.learn.preprocessing.VocabularyProcessor (max_document_length, min_frequency0,vocabularyNone,tokenizer_fnNone)其中各个参数的含义为
max_document_length:文档的最大长度。如果文本的长度大于最大长度那么它会被剪切反之则用0填充。min_frequency词频的最小值出现次数小于最小词频则不会被收录到词表中。vocabularyCategoricalVocabulary 对象。tokenizer_fn分词函数。
假设有如下句子需要处理
x_text [i love you,me too
]基于以上句子生成词汇表并对’i me too’这句话进行编码 vocab_processor learn.preprocessing.VocabularyProcessor(max_document_length)vocab_processor.fit(x_text)print next(vocab_processor.transform([i me too])).tolist()x np.array(list(vocab_processor.fit_transform(x_text)))print x运行程序x_text使用词汇表编码后的数据为 [[1 2 3 0] [4 5 0 0]] i me too’这句话编码的结果为 [1, 4, 5, 0]