精华内容
下载资源
问答
  • 文本数据清洗方法
    2022-01-13 09:11:24

    在NLP工作中,为针对性的对有某些特征的文本数据进行模型训练,可以对文本数据进行一个数据清洗的预处理工作。

    0.导入工具

    import pandas as pd
    import numpy as np
    import re
    

    1.打开文本数据集

    df=pd.read_csv('.../文件名.csv')#读取文件信息
    
    
    

    2.构建规则

    d=re.compile('[\d]|[\u96f6\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07]')

    3.将匹配到规则的文本信息删除

    df = df.applymap(lambda x: x if d.search(str(x)) else np.nan)
    df.dropna()

    4.看一下结果

    print (df)

    更多相关内容
  • 文本数据清洗

    千次阅读 2021-11-24 22:24:31
    新闻文本数据中不仅包括了中文字符,还包括了数字、英文字符、标点等非常规字符,这些都是无意义,并且需要处理的数据,清洗方法使用的是正则表达式。 方法一:借助Unicode编码,16进制筛出中文字符 匹配规则为...

          新闻文本数据中不仅包括了中文字符,还包括了数字、英文字符、标点等非常规字符,这些都是无意义,并且需要处理的数据,清洗的方法使用的是正则表达式。

    方法一:借助Unicode编码,16进制筛出中文字符

    匹配规则为:[\u4e00-\u9fa5],\un匹配n,其中n是一个用四个十六进制数字表示的Unicode字符,而4e00-9fa5之间的Unicode编码表示的是20000多个中文字符。具体编码如下:

    #匹配[^\u4e00-\9fa5]
    def find_chinese(text):
        pattern=re.compile(r'[^\u4e00=\u9fa5]')
        chinese_txt=re.sub(pattern,'',text)
        return chinese_txt

    解释:[\u4e00-\u9fa5]表示匹配汉字,[^\u4e00-\u9fa5]表示匹配除汉字以外的所有字符。

    方法二:

    去除标点符号

    为方便之后分词工作,此处没有直接删掉特殊符号,而是以特殊符号用空格替换

    #创建用于匹配特殊字符的正则表达式对象
    pattern2=re.compile(r'[^\w]')
    #将特殊符号用空格替换
    text=re.split(pattern2,text)
    print(text)

     (背诵)文本中的英文,将其去除,防止后续中文词嵌入的过程中,英文、数字被误认为英文嵌入(有这种可能吗?)

    import re
    #生成正则表达式对象,用于匹配以'('开始并以')'结束的内容
    pattern=re.compile(r'\(.*?\)')
    #去除符合上述正则表达式的内容
    text=re.sub(pattern,'',text)
    text

    方法三:基于简单化正则表达式

    去除空格,并将省略号更换为句号 

    print('处理前文本:'+text)
    def process(our_data):
        contents=our_data.replace(' ','')
        print('处理后文本'+contents)
    process(text)

    去除标点和数字

    print('xxx:'+text)
    def process(data):
        content1=data.replace(' ','')
        content2=content1.replace('...',',')
        print('xxx'+context2)
    process(text)

    或者

    只保留数字、汉字、英文、标点,而去除其他的东西(比如表情)

    def is_chinese(uchar):
        if uchar>=u'\u4e00\ and uchar<='\u9fa5':  #判断一个uchar是不是汉字
            return True
        else:
            return False
    
    def allcontents(contents):
        content=''
        for i in content:
            if is_chinese(i):
                content=content+i
        print('\nxxxxx\n'+content)
    
    centents='xxxx'
    print('原句子为:\n'+centents)
    allcontents(centens)
    

    Q1:.compile()函数

    Q2:里边的正则r是如何处理的

    Q3:xx.sub()是如何处理的

     Q2.1:xx.findall()的用处,.compile()是用于匹配的

     Q3:读懂内部正则表达式的方式

     Q4:做好区分,split(),compile(),findall(),replace()

    展开全文
  • 在开始进行NLP的相关任务时,首先需要做一些预备工作,比如说数据清洗、提取等,接下来就让我们来看一下具体有哪些操作吧。 一、Linux的一些常用命令? wc -l file: 看文件一共有多少行 more file: 观察部分文件 ...


    前言

    而在开始进行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*IDF
    
    from 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,Embedding
    
    model = 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彻底说清楚.


    总结

    以上就是全部内容啦。

    展开全文
  • Python文本数据清洗速查表Python文本数据清洗速查表Python文本数据清洗速查表
  • 关于文本数据预处理的一些方法

    千次阅读 2021-09-24 14:19:03
    文章目录数据浏览一、数据整合以及体量观测二、文本数据分词三、词云四、句长统计总结 数据浏览 由于项目上运用到的情感分类数据是要用于进行5分类的情感分类,数据体量较大,本文只选取其中很小一部分进行预处理...

    最近在进行一个关于深度学习的文本情感分类的项目,从数据获取到清洗,以及文本标注这些都在准备。文本预处理是NLP中十分关键的一个流程,正所谓数据是否优质决定着神经网络的训练效果,以及后续对神经网络的调参,本文分享一些基本的文本预处理方法。


    数据浏览

    由于项目上运用到的情感分类数据是要用于进行5分类的情感分类,数据体量较大,本文只选取其中很小一部分进行预处理,大体数据集合如下:
    在这里插入图片描述

    一、数据整合以及体量观测

    这部分更多是对数据进行读取以及对各个标签数据集合进行整合,对各个标记进行整合

    import matplotlib.pyplot as plt
    import pandas as pd
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    
    one = pd.read_csv('情感-1.csv', encoding='gbk', header=None, )
    two = pd.read_csv('情感-2.csv', encoding='gbk', header=None, )
    three = pd.read_csv('情感-3.csv', encoding='gbk', header=None, )
    four = pd.read_csv('情感-4.csv', encoding='gbk', header=None, )
    five = pd.read_csv('情感-5.csv', encoding='gbk', header=None, )
    # 画图进行各个数据量观测
    def chart():
        len_list = [len(one), len(two), len(three), len(four), len(five), ]
        # plt.plot(range(1, 6), list)
        plt.bar(range(1, 6), len_list, )
        text = dict(list(zip(range(1, 6), len_list)))
        for i, j in text.items():
            plt.text(i, j, j, size = 15)
        plt.show()
    # 数据文件整合,把5个文件进行整合成一个,以便于后续分词和词向量训练
    def to_data():
        path = [one, two, three, four, five]
        data = pd.concat(path)
        data.to_csv('data.csv', header=False, index=False)
    chart()
    to_data()
    

    结果预览:
    在这里插入图片描述

    二、文本数据分词

    接下来就是对保存的文本进行一个分词操作,我们选用jieba分词,该分词有三种模式:
    精确模式(jieba.cut()):把文本精确的切分开,不存在冗余单词
    全模式(jieba.lcut()):把文本中所有可能的词语都扫描出来,有部分冗余单词
    搜索引擎模式(jieba.lcut_for_search()):在精确模式基础上,对长词再次切分

    import jieba
    import pandas as pd
    
    def cut_word():
        data = pd.read_csv('data.csv', header=None, )[0]
        # 创建新文件以构建分词文本文件	
        with open('cut_word.txt', 'w', encoding='utf-8')as fp:
            for i in data:
                fp.write(str(' '.join(jieba.lcut(i))))
                fp.write(str('\n'))
     cut_word()
    

    效果展示:
    在这里插入图片描述
    由于是运用到文本情感分析上没有对分词进行停用词以及去掉一些符串操作,在情感分析中一些停用词的由于往往具有不同的情感。

    三、词云

    对分词文本进行词云统计,以获取该语料的词频特性,在词云绘制中我们需要对用于词云绘制的语料进行去停用词操作,停用词往往是一段话、一篇文章出现最多的,如果不去除我们生成的词云将会难以判断出语料的词频特性。

    import numpy as np
    import wordcloud
    from PIL import Image
    import matplotlib.pyplot as plt
    
    def cloud(Save = False):
        text = 'cut_word.txt'
        with open(text, encoding='utf-8') as f:
            text = f.read()
        stopwords = set()
        word = [line.strip() for line in open('Stopword.txt', 'r', encoding='utf-8').readlines()]
        stopwords.update(word)
        mask = np.array(Image.open('t01d0ea9f758acc4ce1.jpg'))
        # 运用WordCloud自带的stopwords进行筛选
        w = wordcloud.WordCloud(width=800,height=600,
        background_color='white', font_path='SIMLI.TTF', 
        mask=mask, stopwords=stopwords)
        w.generate(text)
        plt.imshow(w)
        plt.show()
        if Save:
            save_path = 'wordCloud.png'        #保存词云图
            w.to_file(save_path)
    
    cloud(Save=True)
    

    词云图片展示:通过这个图片我们就能直观得展示出语料得核心词,以及语料是什么性质的。
    在这里插入图片描述

    四、句长统计

    在我们进行词嵌入以及需要设定的句子序列长短时,就要考虑文本数据的句子长度信息,这就使得对句子长短的统计显得更加重要。

    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    
    data = pd.read_csv('data.csv', header=None)[0]
    data_len = []
    for j in data:
        data_len.append(len(j))
    print(data_len)
    print('总句子数:', len(data))
    print('最长句子:',np.max(data_len))
    print('最小值:', np.min(data_len))
    print('中位数:', int(np.median(data_len)))
    print('平均值:', int(np.mean(data_len)))
    data_list = {
                5: 0, 10: 0, 15: 0, 20: 0, 25: 0, 30: 0, 35: 0, 40: 0,
                45: 0, 50: 0, 55: 0, 60: 0, 65: 0, 70: 0, 75: 0,
                80:0
                }
    for i in data:
        if len(i) < 5:
            data_list[5] += 1
        elif len(i) < 10:
            data_list[10] += 1
        elif len(i) < 15:
            data_list[15] += 1
        elif len(i) < 20:
            data_list[20] += 1
        elif len(i) < 25:
            data_list[25] += 1
        elif len(i) < 30:
            data_list[30] += 1
        elif len(i) < 35:
            data_list[35] += 1
        elif len(i) < 40:
            data_list[40] += 1
        elif len(i) < 45:
            data_list[45] += 1
        elif len(i) < 50:
            data_list[50] += 1
        elif len(i) < 55:
            data_list[55] += 1
        elif len(i) < 60:
            data_list[60] += 1
        elif len(i) < 65:
            data_list[65] += 1
        elif len(i) < 70:
            data_list[70] += 1
        elif len(i) < 75:
            data_list[75] += 1
        elif len(i) > 75:
             data_list[80] += 1
    
    print(data_list)
    x = []
    y = []
    for key, index in data_list.items():
        x.append(key)
        y.append(index)
    print(x)
    print(y)
    
    plt.plot(x, y ,color='b', marker='o',
                 markerfacecolor='red', markersize=7)
    plt.title("数据集句子长度统计图")
    plt.xlabel('句子长度')
    plt.ylabel('统计量')
    
    # 设置数字标签
    for a, b in data_list.items():
        print(a, b)
        plt.text(a, b, b, size=15)
    plt.text(77, 30, '句长>80', size=10, color="b")
    plt.text(62, 75, "统计总数量:%d" % len(data), size=10, color="r")
    plt.text(62, 70, "句长最大值:%d" % np.max(data_len), size=10, color="r")
    plt.text(62, 65, "句长最小值:%d" % np.min(data_len), size=10, color="r")
    plt.text(62, 60, "句长中位数:%d" % int(np.median(data_len)), size=10, color="r")
    plt.text(62, 55, "句长平均数:%d" % int(np.mean(data_len)), size=10, color="r")
    plt.show()
    

    在这里插入图片描述


    总结

    本文介绍了一些基础方法对文本数据预处理的方法,这些方法虽然简单但是很大程度上有利于后续我们对于情感分类的进行,以及神经网络的构建。其中有一些代码或者其他的可能是我借鉴其他大佬博主的,如有雷同十分抱歉!如果对您产生影响希望能告知我一下。谢谢!~ 。~

    展开全文
  • 使用Python清洗文本数据

    千次阅读 2020-10-18 22:17:00
    点击关注我哦一篇文章带你了解使用Python清洗文本数据数据格式并不总是表格格式。随着我们进入大数据时代,数据具有相当多样化的格式,包括图像,文本,图形等。由于格式非常多样,从一种数据到...
  • 该小程序主要适用于大量excel导入ORACLE数据库时,批量将excel转换为TXT文本文档并同时完成数据清洗,特定分隔符转换,以及数据质量检查。适用于大数据分析者。内含使用说明文档。
  • [1] 为什么要清洗文本   这里涉及到文本分类任务中:词典、词向量两个概念。   首先明确我们做的是“英文文本分类”,所以是不需要像中文那样分词的,只用按照空格截取英文单词就行。   假设训练集train.csv...
  • 作者 | Matt Przybyla 编译 | VK 来源 | Towards Data Science目录介绍清除文本数据总结参考引用介绍数据在大多数情况下都是杂乱无章、杂乱无章...
  • 基于文本内容的垃圾短信识别,对数据进行了数据清洗,分词等,进行 了模型训练及评价
  • HTML数据清洗

    2019-02-21 17:40:31
    可以对网络上爬取的文本数据进行一个处理,对里面数据用||||的形式进行一个划分,一目了然,没有一堆HTML标签的干扰,处理后的数据更方便数据库对数据的应用,请忽略文件名字
  • 数据清洗【一】中文文本预处理

    千次阅读 2021-04-14 09:19:35
    一、文本数据准备 使用已经有的语料库,按照Python读取文本内容的方法读取文本文件内容。此处为了一步步演示过程,所以先使用句子,最后再整合。 二、去除指定无用的符号  我们爬取到的文本有时候会有很多空格...
  • MapReduce--->实现简单的数据清洗需要的数据文件
  • "\n": f_r_list.remove(sentence) f_w.writelines(f_r_list) 将文本的每一行读取为一个列表,然后用set集合去重再转化为列表 for循环判断列表是否有"\n"字符,如果有则去除该字符 将列表中的内容写入目标文件 去除...
  • 下面小编就为大家分享一篇python读取文本数据并转化为DataFrame的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 清华大学出品的大数据-数据清洗课程学习课件,非常适合大学生和职场认识学习,也适合老鸟复习回顾,完全可用于自学入门,很经典好用的PPT课件哦~
  • 本文是刊载于《经济学(季刊)》2019年第4期《文本数据分析在经济学和金融学中的应用:一个文献综述》和《经济学动态》2020年第4期《金融学文本数据挖掘方法与研究进展》的阅读笔记 在金融学领域的传统实证研究...
  • 如何用Python清理文本数据

    千次阅读 2020-12-18 05:49:13
    不是所有数据格式都会...在本文中,将展示如何使用Python预处理文本数据,我们需要用到 NLTK 和 re-library 库。过程1.文本小写在我们开始处理文本之前,最好先将所有字符都小写。我们这样做的原因是为了避免区分...
  • Pandas数据分析:文本数据分析Object vs String字符串处理方法大小写转换Strip方法Split方法Cat方法Startswith and endswith方法Get dummies方法Len方法 文本数据是我们经常分析的数据,但是,文本通常不会以良好和...
  • 数据挖掘:数据清洗——数据不平衡处理 一、什么是数据不平衡? 不平衡数据集指的是数据集各个类别的样本数目相差巨大,也叫数据倾斜。以二分类问题为例,即正类的样本数量远大于负类的样本数量。严格地讲,任何...
  • 大数据-算法-数据清洗技术在文本挖掘中的应用.pdf
  • Textpipe:文本清洗与元数据提取
  • 1. FIND 位置查找函数 2. SEARCH 字符查找函数 3. LEFT/ RIGHT/ MID 字符截取函数 4. CONCATENATE 文本串联函数 5. LEN 计算字符长度函数 ...②其他文本清洗方法:利用记事本 11.用查找和替换的注意点
  • 【数据分析】5大SQL数据清洗方法

    千次阅读 2020-10-26 11:00:00
    name end from Table_Name 03 替换字符串空格、清洗*%@等垃圾字符、字符串拼接、分隔等字符串处理 场景:理解用户行为的重要一项是去假设用户的心理,这会用到用户的反馈意见或一些用研的文本数据,这些文本数据...
  • 基于多文本数据的联通工单系统辅助研判技术.pdf
  • 功能:对查找的文本进行定位,以确定其位置 语法格式:=FIND(“k”,字符串位置,开始位置) 区分大小写 Left函数 功能:对单元格内容截取,截取指定的长度,从左边第一个字符开始 语法格式:=LEFT(字符串...
  • 对于自然语言的文本数据,处理过程一般包括文本清洗、分词等,其中每个步骤在中英文处理时都有些不同,如中文分词的难度远大于英文,而英文需要转换大小写、词形还原等步骤。 接下来将会分别介绍中英文预处理中的重点...
  • 本文将详细讲解数据预处理、Jieba分词和文本聚类知识,这篇文章可以说是文本挖掘和自然语言处理的入门文章。两万字基础文章,希望对您有所帮助。欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列...
  • 文本数据挖掘一般步骤

    千次阅读 2020-01-24 11:06:52
    转载自潇一:简要的谈谈文本数据挖掘的一般步骤 原文 一、获取文本 一般来说网络文本的获取,主要是网页的形式。我们要把网络中的文本获取形成一个文本数据库(数据集)。利用一个爬虫(这是另外一个知识点),...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,149
精华内容 12,059
关键字:

文本数据清洗方法