python之NLP数据清洗
1、知识点
"""
安装模块:bs4 nltk gensim
nltk:处理英文
1、安装
2、nltk.download() 下载相应的模块 英文数据处理:
1、去掉html标签 example = BeautifulSoup(df['review'][1000],'html.parser').get_text()
2、移除标点 example_letter = re.sub(r'[^a-zA-Z]',' ',example)
3、切分成词/token words = example_letter.lower().split()
4、去掉停用词 例如:the a an it's
stopwords = {}.fromkeys([line.rstrip() for line in open('./stopwords.txt')])
words_nostop = [w for w in words if w not in stopwords]
5、重组为新的句子 词向量解决方案:
1、one-hot编码
缺点:这种方案浪费存储空间还是次要的,更重要的是词与词(向量与向量)之间没有相关性,计算机完全无法进行哪怕一丁点的理解和处理
2、基于奇异值分解(SVD)的方法
步骤:a)第一步是通过大量已有文档统计形成词空间矩阵X,有两种办法。
一种是统计出某篇文档中各个词出现的次数,假设词的数目是W、文档篇数是M,则此时X的维度是W*M;
第二种方法是针对某个特定词,统计其前后文中其它词的出现频次,从而形成W*W的X矩阵。
b)第二步是针对X矩阵进行SVD分解,得到特征值,根据需要截取前k个特征值及对应的前k个特征向量,
那么前k个特征向量构成的矩阵维度是W*k,这就构成了所有W个词的k维表示向量
缺点:
1、需要维护一个极大的词空间稀疏矩阵X,而且随着新词的出现还会经常发生变化;
2、SVD运算量大,而且每增减一个词或文档之后,都需要重新计算
3、构建一个word2vec模型:通过大量文档迭代学习其中的参数及已有词的编码结果,这样每新来一篇文档都不用修改已有模型,只需要再次迭代计算参数和词向量即可
举例:我爱python和java
a)CBOW算法: 输入:我爱, 目标值:python和java
CBOW算法使用上下文窗口内词向量作为输入,将这些向量求和(或取均值)后,求得与输出词空间的相关性分布,
进而使用softmax函数得到在整个输出词空间上的命中概率,与目标词one-hot编码的交叉熵即为loss值,
通过loss针对输入和输出词向量的梯度,即可使用梯度下降(gradient descent)法得到一次针对输入和输出词向量的迭代调整。 b)Skip-Gram算法: 输入:python和java, 目标值:我爱
Skip-Gram算法使用目标词向量作为输入,求得其与输出词空间的相关性分布,
进而使用softmax函数得到在整个输出词空间上的命中概率,与one-hot编码的上下文词逐一计算交叉熵,
求和后即为loss值,通过loss针对输入和输出词向量的梯度,
即可使用梯度下降(gradient descent)法得到一次针对输入和输出词向量的迭代调整
"""
2、中文数据清洗(使用停用词)
import os
import re
import numpy as np
import pandas as pd
from bs4 import BeautifulSoup
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix
from sklearn.linear_model import LogisticRegression
import nltk
from nltk.corpus import stopwords
import jieba
def clean_chineses_text(text):
"""
中文数据清洗 stopwords_chineses.txt存放在博客园文件中
:param text:
:return:
"""
text = BeautifulSoup(text, 'html.parser').get_text() #去掉html标签
text =jieba.lcut(text);
stopwords = {}.fromkeys([line.rstrip() for line in open('./stopwords_chineses.txt')]) #加载停用词(中文)
eng_stopwords = set(stopwords) #去掉重复的词
words = [w for w in text if w not in eng_stopwords] #去除文本中的停用词
return ' '.join(words)
3、英文数据清洗(使用停用词)
import os
import re
import numpy as np
import pandas as pd
from bs4 import BeautifulSoup
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix
from sklearn.linear_model import LogisticRegression
import nltk
from nltk.corpus import stopwords
import jieba
def clean_english_text(text):
"""
英文数据清洗 stopwords_english.txt存放在博客园文件中
:param text:
:return:
"""
text = BeautifulSoup(text, 'html.parser').get_text() #去掉html标签
text = re.sub(r'[^a-zA-Z]', ' ', text) #只保留英文字母
words = text.lower().split() #全部小写
stopwords = {}.fromkeys([line.rstrip() for line in open('./stopwords_english.txt')]) #加载停用词(中文)
eng_stopwords = set(stopwords) #去掉重复的词
words = [w for w in words if w not in eng_stopwords] #去除文本中的停用词
print(words)
return ' '.join(words) if __name__ == '__main__':
text = "ni hao ma ,hello ! my name is haha'. ,<br/> "
a = clean_english_text(text)
print(a) test1 = "你在干嘛啊,怎么不回复我消息!,对了“你妈在找你”。"
b = clean_chineses_text(test1)
print(b)
4、nltk的停用词进行数据清洗
def clean_english_text_from_nltk(text):
"""
使用nltk的停用词对英文数据进行清洗
:param text:
:return:
"""
text = BeautifulSoup(text,'html.parser').get_text() #去掉html标签
text = re.sub(r'[^a-zA-Z]',' ',text) #除去标点符号
words = text.lower().split() #转为小写并切分
stopwords = nltk.corpus.stopwords.words('english') #使用nltk的停用词
wordList =[word for word in words if word not in stopwords]
return ' '.join(wordList)
python之NLP数据清洗的更多相关文章
- python--数据清洗
1.数据错误: 错误类型– 脏数据或错误数据• 比如, Age = -2003– 数据不正确• '0' 代表真实的0,还是代表缺失– 数据不一致• 比如收入单位是万元,利润单位是元,或者一个单位是美元 ...
- python之ETL数据清洗案例源代码
#python语言 import pandas as pd import time data = pd.read_excel('ETL_数据清洗挑战.xlsx','测试数据',dtype=str)#读 ...
- 利用python进行数据分析—数据清洗记录3,map,apply,
社会心态调查报告 导语: 时代决定心态,心态映照时代.社会心态产生于社会个体心理,又以整体的形态存在,进而影响着每个社会成员的社会价值取向和行为方式,影响着国家经济政治和社会发展大局.良好的社会心 ...
- 使用python脚本进行数据清洗(1)
1. 原始表 CREATE TABLE ml_100k (userid INT, movieid INT, rating INT, unixtime STRING) ROW FORMAT DELIMI ...
- Viterbi 算法 Python实现 [NLP学习一]
最近思考了一下未来,结合老师的意见,还是决定挑一个方向开始研究了,虽然个人更喜欢鼓捣.深思熟虑后,结合自己的兴趣点,选择了NLP方向,感觉比纯粹的人工智能.大数据之类的方向有趣多了,个人还是不适合纯粹 ...
- Python 基于 NLP 的文本分类
这是前一段时间在做的事情,有些python库需要python3.5以上,所以mac请先升级 brew安装以下就好,然后Preference(comm+',')->Project: Text-Cl ...
- Python 爬虫 大量数据清洗 ---- sql语句优化
. 问题描述 在做爬虫的时候,数据量很大,大约有五百百万条数据,假设有个字段是conmany_name(拍卖公司名称),我们现在需要从五百万条数据里面查找出来五十家拍卖公司, 并且要求字段 time( ...
- python简单的数据清洗,数据筛选方法归类
创建数组有两种方式,1.直接赋值 2.随机变量生成随机生成包括4种:np.arange(20),np.linspace(0,10,5),np.logspace(0,2,5),np.random.ran ...
- python之NLP词性标注
1.知识点 包括中文和英文的词性标注主要使用的库是nltk和jiaba 2.代码 # coding = utf-8 import nltk from nltk.corpus import stopwo ...
随机推荐
- RobHess的SIFT代码解析步骤一
平台:win10 x64 +VS 2015专业版 +opencv-2.4.11 + gtk_-bundle_2.24.10_win32 主要参考:1.代码:RobHess的SIFT源码:SIFT+KD ...
- webstorm 注册服务器
之前都是使用2017.2.27的方法,版本是2017.1.1,还没提示过期,但是根据评论说这个链接已经失效了,评论也给出了个新地址:http://idea.iteblog.com/key.php
- 2.6. 案例:使用BeautifuSoup4的爬虫
案例:使用BeautifuSoup4的爬虫 我们以腾讯社招页面来做演示:http://hr.tencent.com/position.php?&start=10#a 使用BeautifuSou ...
- 07_Redis_Sorted Set命令
一:Redis 有序集合(sorted set):有序set集合,专门用来做排行榜 Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员 ------- (有序不重复) 不 ...
- ndk学习之C语言基础复习----基本数据类型、数组
关于NDK这个分类在N年前就已经创建了,但是一直木有系统的记录其学习过程,当然也没真正学会NDK的技术真谛,所以一直也是自己的一个遗憾,而如今对于Android程序员的要求也是越来越高,对于NDK也是 ...
- 【CF598 Div3 F】Equalizing Two Strings
一道通篇结论的傻逼题,被 lh 随手秒了 别告诉我你不会 Div3 的题,你肯定在 fake 没看过题解,以下做法纯属口胡,应该没问题 Description https://www.luogu.or ...
- 学习elasticsearch(一)linux环境搭建(3)——head插件安装
对于5.x的es,head插件不支持 ./elasticearch-plugin install [plugin_name]方式安装. 进入正文 1.首先确保你的机器安装了python,如果没有,请看 ...
- docker修改数据库密码
运行mysql(--name 容器名称 -e MYSQL_ROOT_PASSWORD设置初始密码 -p 3307:3306 端口映射,主机端口3307) docker run --name my ...
- 串口+RS485驱动
其实RS485不算什么协议,只是物理层做了差分传输,AB两线的电压差来表示0,1,0,1,可靠性和距离更加好,因此,一个串口外设只能作为半双工使用,而RS232是可以全双工的. max485模块可以直 ...
- C# 通过Process.Start() 打开程序 置顶方法
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { try { foreach ...