目录

  • 前言
  • 一、Linux的一些常用命令?
  • 二、Python的一些常用操作
  • 三、常用的一些自然语言处理工具包
    • 3-1、nltk工具包
      • 3-1-1、安装
      • 3-1-2、nltk的使用
    • 3-2、jieba工具包‘
      • 3-2-1、jieba工具包安装
      • 3-2-2、jieba使用
      • 3-2-3、常见词性分类
  • 四、常用的一些分词模型
    • 4-1、朴素贝叶斯
    • 4-2、N-gram模型
  • 五、可视化工具
    • 5-1、Seaborn
    • 5-2、Word
  • 六、文本特征提取
    • 6-1、CountVectorizer
    • 6-2、TFidfVectorizer
    • 6-3、Keras.Embedding层
  • 总结

前言

而在开始进行NLP的相关任务时,首先需要做一些预备工作,比如说数据清洗、提取等,接下来就让我们来看一下具体有哪些操作吧。

一、Linux的一些常用命令?

wc -l file: 看文件一共有多少行
more file: 观察部分文件
head -10 file: 查看文件的前10行内容
更多Linux命令请查看我的另一篇文章.

二、Python的一些常用操作

strip(): 去掉开始和结尾的空格
upper(): 将字符串转化为大写
index(s): 寻找字符串中s字符出现的位置
find(s): 寻找字符串中s字符出现的位置
注意:它们的区别在于find()如果在指定字符中没有找到则返回-1;而index则会抛出ValueError异常。
[::-1]: 反转字符串。
split(s): 以字符s分割字符串,默认的话是以空格来分割字符串。
s.join(list): 将列表中的每个元素用字符s连接起来。参数是要连接的元素序列。
Counter(): 对字符串\列表\元祖\字典进行计数,返回一个字典类型的数据,键是元素,值是元素出现的次数

# 举例
s = "hello-python-hello-world"
a = Counter(s)
print(a)
# 结果
Counter({'-': 3, 'd': 1, 'e': 2, 'h': 3, 'l': 5, 'n': 1, 'o': 4, 'p': 1, 'r': 1, 't': 1, 'w': 1, 'y': 1})

re.findall(): 找到 RE 匹配的所有子串,并把它们作为一个列表返回

# re模块是使用正则表达式时主要使用到的模块
import re
str = 'abc!A_xyz'
# 下面语句的作用时去掉字母以外的相关字符
re.findall('[a-zA-Z]', str)

map(function, iterable, …): 会根据提供的函数对指定序列做映射,第一个参数时所要使用的功能(可以是自己定义的函数,也可以是匿名函数),第二个参数时迭代器,列表、字符串等。

>>> def square(x) :            # 计算平方数
...     return x ** 2
...
>>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]

三、常用的一些自然语言处理工具包

使用工具包来对文档进行分词、词性标注、分类、指标评测等,可以使自然语言处理任务事半功倍。

3-1、nltk工具包

nltk可以用来干什么?
1、单词搜索
2、相似词搜索
3、相似关键词识别
4、词汇分布图
5、生成文本等等任务。
主要是用来英文分词的。

3-1-1、安装

1、使用命令安装:pip install nltk
2、下载数据包
github上的安装包地址.
nltk官方文档.
nltk官网的数据包下载地址(分散的数据).
看看就行了,在GitHub下载数据包需要梯子,巧了,恰好我没有。托好兄弟给我下载了,分享给在座的各位。
链接:https://pan.baidu.com/s/1vq-06QvknDYoo5uDKyAU-w
提取码:ilq8
解压后复制其中的packages文件夹,放在下列位置中的任意一个地方。

安装完成!!

3-1-2、nltk的使用

import nltk
import matplotlib
from nltk.book import *
from nltk.util import bigrams# 单词搜索
# concordance(word)函数,搜索word及其上下文
print('单词搜索')
text1.concordance('boy')
text2.concordance('friends')# 相似词搜索
# similar(word),搜索word及其相关的词语
print('相似词搜索')
text3.similar('time')# 共同上下文搜索
# common_contexts([word1, word2...]): 搜索多个单词的上下文
print('共同上下文搜索')
text2.common_contexts(['monstrous','very'])# 词汇分布表
# dispersion_plot([word1,word2,word3...]):画出词在文本中的位置,从文本开始的位置开始计算
print('词汇分布表')
text4.dispersion_plot(['citizens', 'American', 'freedom', 'duties'])# 词汇计数
print('词汇计数')
print(len(text5))
sorted(set(text5))
print(len(set(text5)))# 重复词密度
print('重复词密度')
print(len(text8) / len(set(text8)))# 关键词密度
print('关键词密度')
print(text9.count('girl'))
print(text9.count('girl') * 100 / len(text9))# 频率分布
# FreqDist(text)函数,返回text文本中每个词出现的次数的元组列表
fdist = FreqDist(text1)
vocabulary = fdist.keys()
for i in vocabulary:print(i)# 高频前20
# plot(): 绘制出来top多少的词汇累计频率图
fdist.plot(20, cumulative = True)# 低频词
# hapaxes(): 返回低频词
print('低频词:')
print(fdist.hapaxes())# 词语搭配
# bigrams([word1, word2, word3])生成双连词,返回列表嵌套元组的形式。
print('词语搭配')
words = list(bigrams(['louder', 'words', 'speak']))
print(words)

3-2、jieba工具包‘

jieba分词是国内程序员用Python开发的一个中文分词模块,并且jieba分词包运用到了数据结构里的字典树对词语进行高效的分类,便于查找,支持三种分词模式:
1、精确模式,试图将句子精确的切开,适合文本分析
2、全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。
3、搜索引擎模式,在精确模式的基础上,对长词再进行切分,提高召回率,适合用于引擎分词。

3-2-1、jieba工具包安装

# 在anaconda环境下
conda install jieba
# 也可以使用pip
pip install jieba

3-2-2、jieba使用

注意: jieba.cut返回的是一个可以迭代的generator,可以使用for循环来获取每一个词语,而jieba.lcut直接返回的是一个list,他们的作用以及使用方式是相同的。

jieba分词方式

import jieba
# 以下是三种分词方式# jieba.lcut('安徽理工大学的大学生')
# 精确模式: ['安徽', '理工大学', '的', '大学生']
# 增加专有名词 add_word()
# lcut返回的是一个列表
jieba.add_word('安徽理工大学')
jieba.lcut('安徽理工大学的大学生')
# 增加专有名词之后: ['安徽理工大学', '的', '大学生']# cut_all: 是否采用全模式
# jieba.lcut('安徽理工大学的大学生',cut_all=True)
# 全模式: ['安徽', '安徽理工', '理工', '理工大', '理工大学', '工大', '大学', '的', '大学', '大学生', '学生']jieba.lcut_for_search('安徽理工大学的大学生')
# #搜索引擎模式: ['安徽', '理工', '工大', '大学', '理工大', '理工大学', '的', '大学', '学生', '大学生']# jieba.cut直接得到generator形式的分词结果
# notice:需要用join函数连接成一个字符串,结果的话和使用lcut是一样的,只是形式不一样。
seg = jieba.cut("征战四海只为今日一胜,我不会再败了。")
print(' '.join(seg))
# 征战 四海 只 为 今日 一胜 , 我 不会 再败 了 。

使用命令进行分词

python -m jieba input.txt > output.txt

词性标注

# 词性标注包
import jieba.posseg as pseg
# 使用词性标注切词后返回的是单词和词性组成的元组
text = '安徽理工大学的大学生'
import jieba.posseg as pseg
for i in pseg.cut(text):print(i.word, '/', i.flag, end=' ')
# 安徽 / ns 理工大学 / nt 的 / uj 大学生 / n

关键词抽取

# 基于TF-IDF算法的关键词提取
# jieba.analyse.extract_tags(sentence, topK=20, withWeight=False,allowPOS=())
# sentence:待提取的文本,topK:返回几个tf/idf权重最大的关键词,默认是20,allowPOS:仅包含指定词性的词,默认值为空,withWeight:是否一并返回关键词权重值,默认值为False。
import jieba.analyse
tags = jieba.analyse.extract_tags(text,topK=1)# 基于TextRank
tags = jieba.analyse.textrank(text,topK=1)# 关键词提取所使用的停用词文本语料库可以切换成自定义语料库的路径
# file_name为自定义语料库的路径
jieba.analyse.set_stop_words(file_name) # 更多内容请详见参考链接文章:倒数第一篇和第二篇

3-2-3、常见词性分类

名词
n 名词
nr 人名
nr1 汉语姓氏
nr2 汉语名字
nrj 日语人名
nrf 音译人名
ns 地名
nsf 音译地名
nt 机构团体名
nz 其它专名
nl 名词性惯用语
ng 名词性语素

时间词
t 时间词
tg 时间词性语素

处所词
s 处所词 (在公司,在学校)

方位词
f 方位词

动词
v 动词
vd 副动词
vn 名动词
vshi 动词“是”
vyou 动词“有”
vf 趋向动词
vx 形式动词
vi 不及物动词(内动词)
vl 动词性惯用语
vg 动词性语素

形容词
a 形容词
ad 副形词
an 名形词
ag 形容词性语素
al 形容词性惯用语

区别词
b 区别词
bl 区别词性惯用语

状态词
z 状态词

代词
r 代词
rr 人称代词
rz 指示代词
rzt 时间指示代词
rzs 处所指示代词
rzv 谓词性指示代词
ry 疑问代词
ryt 时间疑问代词
rys 处所疑问代词
ryv 谓词性疑问代词
rg 代词性语素

数词
m 数词
mq 数量词

量词
q 量词
qv 动量词
qt 时量词

副词
d 副词

介词
p 介词
pba 介词“把”
pbei 介词“被”

连词
c 连词
cc 并列连词

参考链接:
【Python+中文NLP】(二) 中文分词工具包:jieba.
中文分词工具—Jieba.
python jieba 中文分词工具包.
自然语言处理工具包jieba的使用.
基于python中jieba包的中文分词中详细使用(一).
基于python中jieba包的中文分词中详细使用(二).

四、常用的一些分词模型

利用统计机器学习模型学习模型学习词语的切分规律,从而实现对未知文本的切分,主要的一些统计机器学习模型有:N元文法模型(N-gram)、隐马尔可夫模型(HMM)、最大熵模型(ME),条件随机场模型(CRF)等。

4-1、朴素贝叶斯

4-2、N-gram模型

五、可视化工具

5-1、Seaborn

5-2、Word

六、文本特征提取

6-1、CountVectorizer

# 对于每一个训练文本,它只是考虑每种词汇在该训练文本出现的频率
# 它会将文本中的词语转换为词频矩阵,通过fit_transform函数来计算每个词语出现的次数。
# CountVectorizer是在sklearn的feature_extraction里
from sklearn.feature_extraction.text import CountVectorizer
corpus = ['This is the first document.','This document is the second document.','And this is the third one.','Is this the first document?',
]
vectorizer = CountVectorizer()# fit: 根据CountVectorizer参数规则进行操作,比如说过滤停用词,拟合原始数据,生成文档中有价值的词汇表
# transform: 使用符合fit的词汇表或者是提供给构造函数的词汇表,从原始文本文档中提取词频,转换成词频矩阵。
# fit_transform: 拟合模型,并且返回一个文本矩阵。
X = vectorizer.fit_transform(corpus)
print(type(X))# get_feature_names: 得到所有文本的词汇,是一个列表。
print(vectorizer.get_feature_names())
# ['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']# vocabulary_: 所有文本组成的一个词汇表,是一个字典类型
print(vectorizer.vocabulary_)# 返回停用词列表,默认的话是空的
print(vectorizer.stop_words_)# toarray(): 将结果转化为稀疏矩阵的表达方式。
print(X.toarray())


其它:ContVectorizer的参数解释见参考链接第一篇文章。

6-2、TFidfVectorizer

# TF-IDF是一种统计方法,用于评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
# 字词的重要性会随着它在文件中出现的次数成正比增加,但是同时会随着它在语料库中出现的频率成反比下降。
# 某一个词对于文章的重要性越高,那么它的tf-idf的值就越大。
# TF:词频,表现词条在文本中出现的频率,被归一化,防止偏向长的文件。
# tf = 词条w在文档中出现的总次数/文档的词总数
# IDF:逆文件频率
# idf = log(文档总数/(包含该词的文档数+1)
# 某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。
# 公式: TF*IDFfrom sklearn.feature_extraction.text import TfidfVectorizer
train_document = ["The flowers are beautiful.","The name of these flowers is rose, they are very beautiful.","Rose is beautiful","Are you like these flowers?"]
test_document = ["The flowers are mine.", "My flowers are beautiful"]               #利用函数获取文档的TFIDF值
print("计算TF-IDF权重")
transformer = TfidfVectorizer()
# fit(): 根据训练集生成词典和逆文档词频
# transform():使用fit学习的词汇和文档频率,将文档转化为文档-词矩阵,即对文本做向量化表示。
X_train = transformer.fit_transform(train_document)
X_test = transformer.transform(test_document)#观察各个值
#(1)统计词列表
word_list = transformer.get_feature_names()  # 所有统计的词
print("统计词列表")
print(word_list)#(2)统计词字典形式
print("统计词字典形式")
print(transformer.fit(test_document).vocabulary_)#(3)TFIDF权重
weight_train = X_train.toarray()
weight_test = X_test.toarray()
print("train TFIDF权重")
print(weight_train)
print("test TFIDF权重")
print(weight_test)    #(4)查看逆文档率(IDF)
print("train idf")
print(transformer.fit(train_document).idf_) # (5)查看生成的词语与列的对应关系,即词汇表,我们在fit的时候建立了一个词汇表。
print('词语与列的对应关系')
print(transformer.vocabulary_)# (6)参数详解:
token_pattern:用来分词,使用正则表达式,注意,默认参数为r"(?u)\b\w\w+\b",该默认参数决定了其匹配至少长度为2的单词,如果想要匹配长度为1的单词,则只需要修改一下参数token_pattern=r"(?u)\b\w+\b")
stop_words:设置停用词表。
max_df/min_df:设置过滤值,过滤高于或低于该比例的词语。
max_feature: 设置使用多少词语,默认是都使用。

注意:在上边的代码中,第一次使用fit之后,根据训练集生成词典,这个词典里只是包含训练集的所有单词,下一步直接对测试集transform的话,使用的还是这个词典,但是测试集里有训练集没有的单词mine,即mine在用测试集生成的tf-idf权重里没有体现。

6-3、Keras.Embedding层

# 适合深度学习
# one-hot编码得到的向量是二进制的、稀疏的。
# 而词嵌入是低维的浮点数向量(密集向量)
# 从数据学习中得到,可以很好的反映词与词之间的关系。
import tensorflow as tf
from tensorflow import keras
from keras.datasets import imdb
# 作为特征的单词个数为10000
max_features = 10000
# 评论长度限制为20个单词
maxlen = 20
(x_train, y_train),(x_test, y_test)=imdb.load_data(num_words=max_features)
x_train = keras.preprocessing.sequence.pad_sequences(x_train,maxlen=maxlen)
x_test = keras.preprocessing.sequence.pad_sequences(x_test,maxlen=maxlen)from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten,Dense,Embeddingmodel = Sequential()
# 指定Embedding层的最大输入长度,Embedding层的激活激活形状为(samples,maxlen, 8)
model.add(Embedding(10000, 8, input_length=maxlen))
# 将三维的嵌入张量展平成形状为(samples, maxlen*8)的二维张量。
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
model.summary()history = model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.2)

参考链接:
sklearn——CountVectorizer详解.
python 文本特征提取 CountVectorizer, TfidfVectorizer.
sklearn.feature_extraction.text 中的 TfidfVectorizer 实现过程.
fit_transform,fit,transform区别和作用详解!!!!!!.
【NLP】Python NLTK获取文本语料和词汇资源.
python机器学习——NLTK及分析文本数据(自然语言处理基础).
jieba分词详解.
Pandas数据分析②——数据清洗(重复值/缺失值/异常值).
sklearn-TfidfVectorizer彻底说清楚.


总结

以上就是全部内容啦。

文本处理技能与文本数据清洗、提取、分词与统计相关推荐

  1. 【英文文本分类实战】之四——词典提取与词向量提取

    ·请参考本系列目录:[英文文本分类实战]之一--实战项目总览 ·下载本实战项目资源:神经网络实现英文文本分类.zip(pytorch) [1] 提取词典   在这一步,我们需要把训练集train.cs ...

  2. 【英文文本分类实战】之三——数据清洗

    ·请参考本系列目录:[英文文本分类实战]之一--实战项目总览 ·下载本实战项目资源:神经网络实现英文文本分类.zip(pytorch) [1] 为什么要清洗文本   这里涉及到文本分类任务中:词典.词 ...

  3. 2.文本预处理(分词,命名实体识别和词性标注,one-hot,word2vec,word embedding,文本数据分析,文本特征处理,文本数据增强)

    文章目录 1.1 认识文本预处理 文本预处理及其作用 文本预处理中包含的主要环节 文本处理的基本方法 文本张量表示方法 文本语料的数据分析 文本特征处理 数据增强方法 重要说明 1.2 文本处理的基本 ...

  4. NLP:基于textrank4zh库对文本实现提取文本关键词、文本关键短语和文本摘要

    NLP:基于textrank4zh库对文本实现提取文本关键词.文本关键短语和文本摘要 目录 输出结果 设计思路 核心代码 输出结果 关键词: 故宫 0.030737773083470445 镜头 0. ...

  5. Python批量提取docx格式Word文档中所有文本框内的文本

    功能描述: 批量提取指定Word文档(docx格式)中所有文本框中的文本. 测试文件: 参考代码: 执行结果:

  6. PHP开发小技巧①⑥—提取富文本字符串中的文本内容

    综述 富文本在我们平常的项目中应用已经很广泛了,并逐渐发展成了一个行业.最近在项目中遇到需要提取富文本字符串中的文本内容,本篇博文就是记述如何重富文本字符串中提取出文本内容,欢迎大家相互学习. 富文本 ...

  7. 用python统计王者荣耀里所有英雄的技能描述文本量并排序

    目标 对于我来说,学习新英雄的第一件事便是查看其技能描述.因此,我相信技能描述的文本量对于一个英雄的上手难度有着不小的影响. 因此,我希望能统计出王者荣耀里所有英雄的技能描述文本量,并对其排序,这样也 ...

  8. 深度学习技巧应用18-OFD格式文件与人工智能结合的技巧应用,实现OFD转文本、OFD自动分类与内容提取

    大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用18-OFD格式文件与人工智能结合的技巧应用,实现OFD转文本.OFD自动分类与内容提取.OFD格式文件被称为"中国版PDF" ...

  9. python docx提取word中的目录及文本框中的文本

    问题描述 同标题 解决方案 因未在docx库找到直接识别word中目录及文本框中文本的方法,所以采用了一个"笨"方法,docx库可以把word文档解析成xml格式,以解析xml的方 ...

  10. 文本挖掘(超详细:数据获取 - 数据清洗 - 中文分词 - 去除停用词 - 词频统计 - 词云图 - 情感分析)

    文本挖掘(超详细) 朋友们好,文本挖掘这篇文章写了也有一段时间了,承蒙朋友们的厚爱,作者后面有做过一个升级版的文本挖掘,但苦于没有时间一直没有更新,现在在抽时间把后面写的这个也发布出来,两篇文章的步骤 ...

最新文章

  1. linux 进程等待 wait 、 waitpid
  2. java 循环展开_Java在Debug的时候,有些变量能无限展开(循环了)?
  3. 两台笔记本如何不走路由而是通过无线网卡互联
  4. Ajax/JavaScript脚本大全,JS脚本大全
  5. 设计模式---桥接模式
  6. 你已经是一个成熟的码农了,这些思维习惯你要有!
  7. leetcode sql
  8. java 虚拟机 分析_Java 虚拟机中的运行时数据区分析
  9. 高性能MySQL(第3版) 中文PDF带目录清晰版
  10. office2007每次打开都配置进度_office2007 每次打开word,excel等显示正在配置Office Professional Plus 2007的解决方...
  11. 2020神舟几号发射_今年将发射神舟十一号载人飞船 2020年将建成载人空间站
  12. 网络爬虫案例——前程无忧网java岗位
  13. 前端实现对象数组的关键字搜索
  14. 赛尔号无限宇宙服务器,赛尔号无限宇宙
  15. 刘雅琴等 | 基于“一张表”平台推动面向高校教师的数据治理实践
  16. 微软最完善,百度最小气 看微软阿里百度三大物联网云平台对比
  17. Linux内核完全注释 阅读笔记:2.4、控制器和控制卡
  18. 如何使用Google Ads跑联盟Offer – Keywords
  19. 吉大20计算机组成原理大作业,吉大20年9月课程计算机组成原理答案假期吖在线...
  20. 利用BP神经网络进行公路客运货运量的预测

热门文章

  1. 常用八大数据结构总结及应用场景-附示例截图
  2. phpnow mysql升级_PHPNOW如何升级PHP
  3. 电脑的脉搏---时钟频率的来龙去脉
  4. C++哈利波特代码(下)
  5. Unity Kinect添加自定义姿势识别
  6. canvas lineWidth为1时线条粗细和颜色
  7. 三坐标测量软件DMIS语句解释
  8. 国内B2C 26个经典购物网站商城收集
  9. 综述:如何研究植物基因组DNA羟甲基化(5hmC)?|易基因
  10. Zigbee应用之搭建开发环境