Waiting~G

一起走过的日子

Archive for 十一月, 2017

自然语言处理基础-词向量化

without comments

自然语言处理是机器学习的入门基础;作为特征工程的重要手段;必须要了解该知识,下面就从文本提取到出关键词(IFTDF),并对关键特征工程向量化详细描述整个过程;

 

首要条件:

两段文本信息:aitext.txt,aitest_bak.txt

停止词文档:stop_word.txt,该文档在百度上可以下载

 

第一步:对要处理的文本进行分词

原理:

import jieba

df = open(“aitext.txt”, encoding=‘utf8’, errors=‘ignore’)
df1 = df.read()  # openread放在一起,read只能用一次
df_test = df1[0:10]

df.close()
# print(df_test)

cf = open(“aitext_bak.txt”, encoding=‘utf8’, errors=‘ignore’)
cf1 = cf.read()
cf_test = cf1[0:10]

cf.close()
# print(cf_test)

df_ceshi = jieba.lcut(df_test)
cf_ceshi = jieba.lcut(cf_test)
cf_r = ” “.join(cf_ceshi)
df_r = ” “.join(df_ceshi)
print(cf_r)
print(df_r)

stop_words = open(“stop_word.txt”, encoding=‘utf8’, errors=‘ignore’)
stop_content = stop_words.read()  # 现实内容
stop_list = stop_content.splitlines()  # 将停用词表转化为list
stop_words.close()
# print(stop_list)

 

第二步: 使用scikit-learn工具处理 方案一,原理:使用scikit-learn向量化

 

from sklearn.feature_extraction.text import TfidfVectorizer

corpus = [cf_r, df_r]
print(‘—-corpus—-‘, corpus)
vector = TfidfVectorizer(stop_words=stop_list)  # 将停词引入模型
print(‘—-vector—-‘, vector)
tfidf = vector.fit_transform(corpus)  # 模型向量化
###每次词和TF-IDF的对应关系
wordlist = vector.get_feature_names()  # 获取词带模型中的所有词
print(‘—wordlist—‘, wordlist)
weightlist = tfidf.toarray()  # 将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重
print(‘—weightlist—‘, weightlist)

 

方案二,原理:用scikit-learn的CountVectorizer类完成词频统计和向量化

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer(stop_words=stop_list)  # 该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频
transformer = TfidfTransformer()  # 该类会统计每个词语的tf-idf权值
tfidf = transformer.fit_transform(
vectorizer.fit_transform(corpus))  # 第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵
word = vectorizer.get_feature_names()  # 获取词袋模型中的所有词语
weight = tfidf.toarray()  # 将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重

for i in range(len(weight)):
print(“…….第 %s 段文本的词语ti-idf权重………” % i)
for j in range(len(word)):
print(wordlist[j], weightlist[i][j])

 

结果如下格式:

 

—wordlist— [‘分类’, ‘标签’, ‘混蛋’, ‘第一种’]
—weightlist— [[ 0.50154891 0. 0.70490949 0.50154891]
[ 0.50154891 0.70490949 0. 0.50154891]]
…….第 0 段文本的词语ti-idf权重………
分类 0.501548907094
标签 0.0
混蛋 0.704909488931
第一种 0.501548907094
…….第 1 段文本的词语ti-idf权重………
分类 0.501548907094
标签 0.704909488931
混蛋 0.0
第一种 0.501548907094

 

 

Written by Skyma

十一月 12th, 2017 at 1:51 下午

Posted in 学.机器学习