今天总结

第一个大坑 – word2vec

在使用现成的API或者package,一定要先弄清楚其属性。不然就会像最近两天,跌进大坑,爬都爬不出来。
这里写图片描述

import gensim
sentences = word2vec.Text8Corpus(u'corpus.txt')  # 加载语料
model = word2vec.Word2Vec(sentences, min_count=8)  # 训练skip-gram模型,默认window=5
model.save(u'txt.model')#训练好了存起来,之后可以直接加载
print(model.wv.vocab)#获取训练的词

我测试的时候,总是会报错:
这里写图片描述
错误提示,在训练模型之前,要先构建词库(you must first build vocabulary before using the model)。

查看corpus.txt,里面有词呀。
是我的词不够多?可是一句话也能用啊。
是我的数据没有用nltk处理?直接处理一个string也行啊。
到底发生了什么?这里面有啥问题?
这里写图片描述

女大学生退学未遂,原因竟然是它!

model = word2vec.Word2Vec(sentences, min_count=8)  # 训练skip-gram模型,默认

最开始我的语料是用nltk处理的,在去停用词、分词、取词干之后的字符串,作为了训练语料,这是没问题的。后来我将进一步处理后(删掉了低频词)的字符串,作为输入,就报错了。
前者的字符串,有重复的字符串,后者的字符串,没有重复的字符串,相当于每一个词的词频都是1了,所以,全都被过滤掉了。
是的,就是这样愚蠢的错误。
这里写图片描述

Keng 2–nltk

相信很多盆友都用过nltk做数据预处理。

disease_List = nltk.word_tokenize(str(all_words).lower())#转为小写,分词
filtered_txt = [w for w in disease_List if (w not in english_stopwords)]#去停用词
filtered_txt = [w for w in filtered_txt if (w not in english_punctuations)]  #del punctuations去标点符号和一些特殊字符
stemmed_txt = [stemmer.stem(w) for w in filtered_txt]#取词干
all_words_freq = collections.Counter(stemmed_txt).most_common()#统计词频

最后的输出里会有

'occasionally\\\\controversi'
'\\\\which'
'dwindling\\\\band'
'29'
'2005'

是的,你没有看错,就这样阵容强大的预处理,也无法阻挡花样百出的文本。
后来查才知道原来python里有可以判断是不是字符,是不是数字,是不是数字字母组合的函数

stemmed_txt = [w for w in stemmed_txt if (w.isalpha())]#判断是不是字符

加上这一句就可以完全过滤上述的文本了。

另外值得注意的是

stemmed_txt = [w for w in stemmed_txt if (w.isalpha())]

nltk.stem.PorterStemmer() 取词干之后,不是普通那种wanted 变成want的形式,而是service变成servic,以及company变为compan。

Keng 3

sklearn 对数据预处理很有帮助
比如:sklearn.model_selection 里的 train_test_split,可以分数据集。(妈妈再也不用担心我手动分数据集啦)
(之后有空再详说)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值