程序清单4-1 词表到向量的转换函数
import bayes
from numpy import *
def loadDataSet():
"""
描述:创建一些实验样本
输出:第一个变量,进行词条切分后的文档集合;
第二个变量,类别标签的集合
"""
postingList = [['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],
['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],
['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'],
['stop', 'posting', 'stupid', 'worthless', 'garbage'],
['mr', 'licks', 'ate', 'my', 'steak',
'how', 'to', 'stop', 'him'],
['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]
classVec = [0, 1, 0, 1, 0, 1] # 1 代表侮辱性文字, 0 代表正常言论
return postingList, classVec
def createVocabList(dataSet):
"""
创建一个包含在所有文档中出现的不重复词的列表
输出:返回一个不重复的词表
"""
vocabSet = set([]) # 创建一个空集
for document in dataSet:
vocabSet = vocabSet | set(document) # 求两个集合的并集
return list(vocabSet)
def setOfWords2Vec(vocabList, inputSet):
"""
输入:词汇表、某个文档
输出:文档向量,向量中的每一元素为0或1,代表词汇表中的单词在输入文档中是否出现
"""
returnVec = [0]*len(vocabList) # 创建一个其中所含元素都为0的向量
for word in inputSet:
if word in vocabList:
returnVec[vocabList.index(word)] = 1
else:
print("the word: %s is not in my Vocabulary!" % word)
return returnVec
# 测试
# listOPosts, listClasses = bayes.loadDataSet()
# myVocabList = bayes.createVocabList(listOPosts)
# myVocabList
# bayes.setOfWords2Vec(myVocabList,listOPosts[0])
# bayes.setOfWords2Vec(myVocabList,listOPosts[3])



