精华内容
下载资源
问答
  • NLP笔记–keras文本数据预处理 前言 在把数据喂入模型前,我们必须要把文本处理成计算机认识的数据。所以文本的预处理是必不可少的,也是固定流程;keras处理数据、搭建模型都是相对简单的,一般只需要Tokenizer、...

    NLP笔记–keras文本数据预处理

    前言

    在把数据喂入模型前,我们必须要把文本处理成计算机认识的数据。所以文本的预处理是必不可少的,也是固定流程;keras处理数据、搭建模型都是相对简单的,一般只需要Tokenizer、pad_sequences。本文将介绍keras对文本进行预处理的流程,并举出实例来探究其中详细过程。

    数据

    本文实验数据来源于苏剑林收集分享的两万多条中文标注语料,涉及六个领域的评论数据。分为neg、pos两个excel文件。由于本文只介绍文本预处理流程,所以在这里只使用了neg数据(且只使用了前500条)。部分数据如下:
    neg部分数据内容

    预处理流程

    1.数据读入

    根据数据特点,进行读入

    data = pd.read_excel(input_path, names=['data'])
    data = data.iloc[:500]     #只使用了前500条数据
    

    2.分词处理

    中文数据需要分词处理,分词后才可以进行下一步处理

    def cut_word(sentence):
        sentence_ = jieba.cut(sentence)
        result = ' '.join(list(sentence_))
        return result
    data['cut_result'] = data['data'].apply(cut_word)
    

    3.Tokenizer

    Tokenizer是一个用于向量化文本,或将文本转换为序列(即单词在字典中的下标构成的列表,从1算起)的类。官方文档有详细解释。

    keras.preprocessing.text.Tokenizer(num_words=None,
    filters=’!"#$%&()*+,-./:;<=>?@[]^_`{|}~\t\n’,
    lower=True,
    split=" ",
    char_level=False)

    对分词后的数据进行处理,代码很简单,直接使用其中的类方法fit_on_texts(texts)即可,对文本进行训练。

    tokenizer = Tokenizer()
    tokenizer.fit_on_texts(data['cut_result'])
    
    vocab = tokenizer.word_index    #训练后得到的字典   
    

    在训练后,我们可以查看得到的字典。
    在官方文档中,word_index: 字典,将单词(字符串)映射为它们的排名或者索引。仅在调用fit_on_texts之后设置。如下图,字典中key和所对应的value。

    在这里插入图片描述
    之后进行texts_to_sequences(texts),将文本列表转换为序列的列表,列表中每个序列对应于一段输入文本。

    data_processing = tokenizer.texts_to_sequences(data['cut_result'])
    

    转换后的内容如下,
    在这里插入图片描述

    4.pad_sequences

    pad_sequences将长为nb_samples的序列(标量序列)转化为形如(nb_samples,nb_timesteps)2D numpy array。官方文档
    实际上,pad_sequences就是将上面序列列表不足maxlen的文本补0,超过maxlen的进行截断。

    keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype=‘int32’,
    padding=‘pre’, truncating=‘pre’, value=0.)

    sentence_result = pad_sequences(data_processing, maxlen = 200, padding='post')    #取200覆盖百分之95
    

    在这里maxlen长度的选取是根据句子长度的统计值来选取,一般情况下,选取的maxlen能够覆盖所有句子的百分之95即,统计代码如下。

    def sent_count(x):                #统计句子长度
        length = []
        for i in range(len(x)):
            length.append(len(x[i]))
            
        min_ = sorted(length)[0]
        max_ = sorted(length)[len(x)-1]
        ave = math.ceil(reduce(lambda x,y:x+y,length)/len(x))
        
        return length, min_, max_,ave
    

    pad_sequences后的结果如下图,

    在这里插入图片描述
    到这里,文本数据预处理的过程基本完成,从最初的文本转化为处理好的矩阵结果,之后便可以将其喂入搭建好的模型。

    完整代码

    import pandas as pd
    import jieba
    import math
    from keras.preprocessing.text import Tokenizer
    from keras.preprocessing.sequence import pad_sequences
    from functools import reduce
    from keras.layers import Embedding, Dense, Flatten, Input
    from keras.models import Model
    
    data = pd.read_excel('input_path', names=['data'])
    data = data.iloc[:500]
    
    def cut_word(sentence):
        sentence_ = jieba.cut(sentence)
        result = ' '.join(list(sentence_))
        return result
    
    def sent_count(x):                #统计句子长度
        length = []
        for i in range(len(x)):
            length.append(len(x[i]))
            
        min_ = sorted(length)[0]
        max_ = sorted(length)[len(x)-1]
        ave = math.ceil(reduce(lambda x,y:x+y,length)/len(x))
        
        return length, min_, max_,ave
        
    
    data['cut_result'] = data['data'].apply(cut_word)           #分词
    sent_length,min_,max_,ave = sent_count(data['cut_result'])  #统计句子长度 
    
    tokenizer = Tokenizer()
    tokenizer.fit_on_texts(data['cut_result'])
    vocab = tokenizer.word_index    #训练后得到的字典
    
    data_processing = tokenizer.texts_to_sequences(data['cut_result'])
    sentence_result = pad_sequences(data_processing, maxlen = 200, padding='post')    #取maxlen覆盖百分之95
    
    #进入模型
    sentence_input =  Input(shape=(200,), name='sentence_input')
    emd = Embedding(output_dim=50, input_dim=len(vocab)+1, input_length=200)(sentence_input)
    

    参考

    https://blog.csdn.net/churximi/article/details/61210129

    展开全文
  • 本文爬取了十款热销手机的文本评论数据后,首先对文本评论数据做文本预处理,文本评论数据中存在大量的无价值信息,引入无用的文本数据...1 文本去重1.1文本去重的原因文本数据预处理时,首先应去除文本评论数据中反...

    c082c8f652c49b3abadf2343aaceaa3f.png

    本文爬取了十款热销手机的文本评论数据后,首先对文本评论数据做文本预处理,文本评论数据中存在大量的无价值信息,引入无用的文本数据,对其作情感分析,显然没有价值,得出的文本挖掘结果也不尽人意。所以对于文本评论数据先进行文本预处理是必不可少的一步,把大量的、冗余的、无价值的信息去除,可以极大提高文本数据的质量,精确文本分析结果。

    1 文本去重

    1.1文本去重的原因

    文本数据预处理时,首先应去除文本评论数据中反复出现的语句部分,当消费者长时间无评论时,系统会默认好评,分析这类重复内容无意义,且大量重复出现这种无价值的评论,应该去除。在商品评论中,有时还会出现人为的复制粘贴别人的评论,显然,这种复制粘贴的评论信息会对于我们的文本处理产生影响,若不处理,会对于评论结果产生影响,影响结果的准确性。

    1.2文本去重算法的缺陷

    Simhash算法、编辑距离去重算法等常用于文本去重中,通过计算文本相似度来文本去重存在问题。比如,编辑距离算法就存在着很大缺陷,计算两条语句编辑距离的阈值,当阈值小于某个范围则去重,这种方法对于文本数据不能完全去重,而只是去除接近重复语句段落的评论数据。

    1.3文本去重选用的方法及原因

    编辑距离算法会去除有用的评论数据,此时需要提出一些其他的文本去重方法,用来改进该算法。语料相近也会存在一些有价值的信息,不能完全去除这部分信息,所以,处理完全重复的语料以保留更多有用的信息。比较删除法通过比较两两重复的语句来去除完全重复的语句,实现文本去重,保留更多有用信息的目的。

    a02a29eccb9b3f3916b3c01bd9903b97.png

    本文使用比较删除法对文本评论数据做去除重复文本的处理,比较删除法可以有效的对于文本重复部分进行处理,这种方法的文本去重效果明显,并且,在实际应用中,操作简单,常用于自然语言处理过程中,针对两种完全相同的文本评论数据,通过比较删除法,可以保留更多相似的文本数据,去重效果鲜明,通过比较删除法,处理无效的文本评论数据如下表所示:

    b1ccd32ba4feeff0ab93aadcb7504e85.png

    2 机械压缩去词

    2.1机械压缩去词思想

    比较删除法去除了完全重复、无意义的文本数据。但是不同品牌的手机有不同的评价内容,很多评论信息都是冗余的、无实际意义的,文本去重的初步处理不能完全去重,评论数据中有些语句显得重复、啰嗦,例如:

    “挺好挺好挺好挺好挺好挺好挺好”

    这是一类重复、连续毫无意义的文本评论数据,虽然这一类语料无语料重复,但是需要用机械压缩去词的方法处理这类评论数据,例如:

    把“挺好挺好挺好挺好挺好挺好挺好”缩成“挺好”

    2.2机械压缩去词处理

    机械压缩去词处理以建立两个列表存放国际字符为前提,制定出严格的压缩规则,判断两个列表中的语料是否重复、连续,首先,放置第一个列表,再放置第二个列表,按照不同情况依次读取国际字符,将其放入到第一个或者第二个列表来,触发压缩判断是否重复、连续,如果得出重复的规则,那么考虑用压缩去除的办法,需要提前设置压缩规则,以及放置的判断。在设置压缩规则,以及放置判断的时候,需要考虑词法结构所带来的影响。

    本文依据机械压缩去词原理处理文本前后数据对比如下表所示。

    77ce72bb60f5e9609fa9362090bd5341.png

    3 短句删除

    3.1短句删除的原因

    根据语言的特点,如果一条语料所包含的字数越少,那么这条语料所表达的含义越少,内容越不丰富,如果在文本评论中要表达更多的含义和内容,需要增加更多的语料词数,过少文本评论字数,没有实际的表达含义,常见的短句有三个字或者两个字,比如“还不错”“都挺好”“很好”“不错”等等。为了提高文本处理结果的精度,删除短句,可以提高文本数据质量。

    3.2文本评论字数确定

    保持文本数据中评论字数的下限是确定删除短句的关键步骤。通常认为4~8个国际字符是一个合理的字数下限。根据具体的语料库情况和文本语料库的特征,设置适当的文本字数下限。

    70074659b437e84ea18a294304695127.png

    本文首先统计每一条文本评论数据的长度,通过计算每一条文本评论数据的长度,筛选长度大于4的文本评论数据,实现短文本评论数据的删除,短句删除无效的评论数据如下表所示:

    c121da8772c58f22ac2dd2e5c864a4f6.png

    4 中文文本评论分词

    在中文的语料结构中,“词”与“词组”无严格的分界符将他们两进行划分。在挖掘和分析中文文本数据时,应根据特定的规则重新组合中文分词序列。

    良好的分词结果可以使得文本挖掘结果更加精确,若分词结果模糊,将直接影响到词语在文本处理中的带来的效果,影响到主题的提取,不同的分词结果,会呈现出不同的特征选取效果。

    4.1中文分词方法

    最大概率法和最大匹配法在中文分词处理中最常用。衍生出双向匹配方法、逆向最大匹配方法、最佳匹配方法,这三种方法同样适用于中文分词处理中,其中,逆向最大匹配方法有着与正向最大匹配方方法方向不同的特征,在中文分词处理过程中,与正向最大匹配法的中文分词处理相比,很明显,逆向最大匹配法更适合中文分词处理。而双向匹配法比较了正向和逆向两者的中文分词结果,从而确定最优的中文分词结果;最佳匹配法可以有效的提高匹配效率,这种匹配方法按照顺序将词典中频度高的单词排在前,频度低的单词排在后。

    4.2文本评论分词方法

    在文本评论分词处理中,常用Python中文分词库和snownlp文本处理库对于文本数据进行文本分词处理。

    jieba(结巴)分词包是Python中一个强大的分词库,用于语料分词处理,可以实现高效的扫描词图,根据前缀字典生成不同的中文分词结果。通过搜索最大概率路径,可以对有向无环图进行动态规划。对于未登录的语料库,基于维特比算法模型和HMM模型,中文分词会处理未登录的语料库。

    473064db731d8060cac47d40d2a4b5da.png

    Snownlp库可以做文本分析,例如文本分类,中文分词,情感分析和文本关键字的提取。受TextBlob的启发,Snownlp是Python编程语言中的类库。它可以简单地处理中文文本内容,对于中文的自然语言处理问题,编写一个类库来处理中文语料库,并且自带一些受过训练的词典来方便分词。

    本文借助Python的jieba分词包,对小米手机商品评论数据做中文分词处理。研究表明,使用Python的jieba分词包,其分词精度达到97%以上,分词效果明显,本文文本分词前后对比如下表所示。

    9662f82e384207671d6fe7ef4f112191.png

    PS:由于PS:由于本例编写的python代码过长,将本专辑所有的代码封装在后台保存,附加爬取的京东商品评论数据,公众号后台回复京东商品评论,获取封装代码和文本数据。

    展开全文
  • 本篇教程介绍了大数据分析之文本数据预处理的方法,希望阅读本篇文章以后大家有所收获,帮助大家对大数据云计算大数据分析的理解更加深入。在文本数据分析基本框架中,我们涉及到了六个步骤:数据收集数据预处理数据...

    本篇教程介绍了大数据分析之文本数据预处理的方法,希望阅读本篇文章以后大家有所收获,帮助大家对大数据云计算大数据分析的理解更加深入。

    在文本数据分析基本框架中,我们涉及到了六个步骤:

    数据收集

    数据预处理

    数据挖掘和可视化

    模型构建

    模型评估

    虽然框架需要迭代,但是我们先将其看作是一个线性的过程:

    修正过的文本数据处理框架(依然很简单……)

    很显然,文本数据预处理位于框架的第二步,这一步所包含的详细步骤有以下两个:

    在原始文本语料上进行预处理,为文本挖掘或NLP任务做准备

    数据预处理分为好几步,其中有些步骤可能适用于给定的任务,也可能不适用。但通常都是标记化、归一化和替代的其中一种(tokenization, normalization, substitution)。

    通常,我们会选取一段预先准备好的文本,对其进行基本的分析和变换,遗留下更有用的文本数据,方便之后更深入、更有意义的分析任务。接下来将是文本挖掘或自然语言处理工作的核心工作。

    所以再次重复以便,文本预处理的三个主要组成部分:

    标记化(tokenization)

    归一化(normalization)

    替换(substitution)

    在下面介绍预处理方法的过程中,我们需要时刻牢记这三个概念。

    文本预处理框架

    接下来,我们将介绍这个框架的概念,而不涉及工具。在下一篇文章中我们会降到这些步骤的安装过程,看看它们是如何在Python中实现的。

    文本数据预处理框架

    1.标记化(Tokenization)

    标记化是将文本中的长字符串分割成小的片段或者tokens的过程。大段文字可以被分割成句子,句子又可以被分割成单词等等。只有经过了tokenization,才能对文本进行进一步的处理。Tokenization同样被称作文本分割或者词法分析。有时,分割(segmentation)用来表示大段文字编程小片段的过程(例如段落或句子)。而tokenization指的是将文本变为只用单词表示的过程。

    这一过程听起来很直接,但事实并非如此。在较大的文本中如何识别句子?你的第一反应一定是“用标点符号”。

    的确,下面的句子用传统的分割方法很容易理解:

    The quick brown fox jumps over the lazy dog.

    但是下面这句呢:

    Dr. Ford did not ask Col. Mustard the name of Mr. Smith’s dog.

    还有这个:

    “What is all the fuss about?” Asked Mr. Peters.

    上面的都只是简单的句子,那么单词又怎样呢?

    This full-time student isn’t living in on-campus housing, and she’s not wanting to visit Hawai’i.

    我们应该意识到,许多策略不只是针对句子分割,而是针对分割的边界确定之后应该做什么。例如,我们可能会采用一种分割策略,它能够(正确地)将单词“she’s”的tokens之间特定边界标识识别为撇号(单独用空格标记的策略不足以识别这一点)。但是我们可以从多种策略中选择,例如是将标点符号保留在单词的某一部分中或是一同舍弃。其中一种方法似乎是正确的,并且似乎不会构成实际的问题。但是仔细想想,在英语中我们还需要考虑其他特殊情况。

    即,当我们将文本分割成句子时,是否应该保留句末分隔符?我们是否在意句子在哪里结束?

    2.归一化(Normalization)

    再进一步处理之前,文本需要进行归一化。归一化指的是一系列相关的任务,能够将所有文本放在同一水平区域上:将所有文本转化成同样的实例,删除标点,将数字转换成相应的文字等等。对文本进行归一化可以执行多种任务,但是对于我们的框架,归一化有3个特殊的步骤:

    词干提取(stemming)

    词形还原(lemmatizatiion)

    其他

    词干提取

    词干提取是删除词缀的过程(包括前缀、后缀、中缀、环缀),从而得到单词的词干。

    词形还原

    词形还原与词干提取相关,不同的是,词形还原能够捕捉基于词根的规范单词形式。

    例如,对“better”一词进行词干提取,可能无法生成另一个词根的词。然而对其进行词形还原,就得到:

    其他

    词形还原和词干提取是文本预处理的主要部分,所以这两项一定要认真对待。他们不是简单地文本操作,而要依赖语法规则和对规则细致的理解。

    然而,还有许多其他步骤可以帮助处理文本,让它们变成平等的地位,其中有一些只是简单地替换或删除。其他重要的方法包括:

    将所有字母变成小写

    删除数字(或者将数字换成对应的文字)

    删除标点(者通常是tokenization的一部分,但是仍然需要在这一步做)

    删除空白格

    删除默认停止词

    停止词是那些在对文本进一步与处理之前需要过滤掉的单词,因为这些单词并不影响整体意义。例如“the”、“and”、“a”这些词。下面的例子就表明,即使删除停止词,句子的意思也很容易理解。

    删除特定的停止词

    删除稀疏的特定词语(尽管不是必须的)

    在这里,我们应该清除文本预处理很大程度上依赖于预先建立的词典、数据库和规则。在我们下一篇用Python进行预处理的文章中,你会发现这些支持工具会非常有用。

    3.噪声清除

    噪声消除延续了框架的替代任务。虽然框架的前两个主要步骤(标记化和归一化)通常适用于几乎任何的文本或项目,噪声去除是预处理框架中一个更加具体的部分。

    再次记住,我们的处理过程并不是线性的,其中的过程必须以特定的顺序进行,视具体情况而定。因此,噪声消除可以发生在上述步骤之前或之后,或者是某个时刻。

    具体来说,假设我们从网上获取了一个语料库,并且以原始的web格式存储,那么我们可以认为文本很大程度上可能有HTML或XML标签。尽管这种对元数据的思考可以作为文本收集或组装的过程中的一部分,但它取决于数据是如何获取和收集的。在上一篇文章中,我简单讲述了如何从维基百科中获取原始数据并搭建语料库。由于我们控制了数据收集的过程,因此在这时处理噪声也是可行的。

    但情况并非总是如此。如果你正在使用的语料库很嘈杂,你必须处理它。数据分析的效果80%都在于数据的准备。

    好消息是,此时可以用到模式匹配:

    删除文件标题、页脚

    删除HTML、XML等标记和元数据

    从其他格式(如JSON)或数据库中提取有价值的数据

    如果你害怕正则表达式,这可能会成为文本预处理的一部分

    噪声消除和数据收集之间的界限很模糊,因此噪声消除必须在其他步骤之前进行。例如,从JSON结构中获取的文本显然要在tokenization之前消除噪音。

    本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据分析频道!

    展开全文
  • nltk文本数据预处理

    2017-07-08 20:33:57
    nltk文本数据预处理库 在情感分析、文本匹配、文本分类等任务中,都需要预先处理原始文本。将一段文本分割成比较有用的词,将词用数值或者向量进行有效表示,从而得到表示该文本的向量或者矩阵。 情感分析,最初...
    在情感分析、文本匹配、文本分类等任务中,都需要预先处理原始文本。将一段文本分割成比较有用的词,将词用数值或者向量进行有效表示,从而得到表示该文本的向量或者矩阵。
    

    情感分析

    最初使用关键词打分机制,比如AFINN-111,给每个单词标上分数,例如“good 1;bad -2”,计算每段文本的分数,来判断句子情感正负。

    文本匹配

    最初使用的是tf-idf来表示每个单词。之后选取所有单词tf-idf值排序前n个单词,来表达文本向量。然后通过求余弦来判断文本匹配度。(目前已经被淘汰了)

    文本分类

    过去采用词袋模型,目前基本上都采用神经神经网络方法。文本表示采用word2vec来表示。

    主要有以下几步:
    - 分词tokenize
    - 词性标注pos_tag
    - 词干提取stem
    - 去除停用词stopwords

    目前textBlob包装了nltk,更方便用户使用。

    展开全文
  • 床头笔记之文本数据预处理 中文分词 def seg_words(contents): contents_segs = list() for content in contents: segs = jieba.lcut(content) contents_segs.append(&quot; &quot;.join(segs)) ...
  • 文本数据预处理的第一步通常是进行分词,分词后会进行向量化的操作。在介绍向量化之前,我们先来了解下词袋模型。   1.词袋模型(Bag of words,简称 BoW )    词袋模型假设我们不考虑文本中词与词之间的上...
  • 本文爬取了十款热销手机的文本评论数据后,首先对文本评论数据做文本预处理,文本评论数据中存在大量的无价值信息,引入无用的文本数据...1 文本去重1.1文本去重的原因文本数据预处理时,首先应去除文本评论数据中反...
  • 在进行数据分析与可视化之前,得先处理好数据,而很多时候需要处理的都是文本数据,本文总结了一些文本预处理的方法。将文本中出现的字母转化为小写input_str=""...
  • 文本数据预处理系统软件 2.软件简称:文本数据预处理系统软件 3.版本号:v1.0 4.分类号:67500-9100 5.首次发表地点:西安 6.硬件环境: vs.net在windows环境下开发的,硬件是1G的内存,...
  • NLP的文本预处理需要经过分词,建立词典,单词转索引值,转tensor,AllenNLP定义了若干类处理这一过程,因此我用图的方式记录这些类的关系,将重要的几点标红,这样看着清楚。 参考allennlp/tutorials/notebooks/中...
  • 本文为 AI 研习社编译的技术博客,...翻译 | nick李 校对 | 付腾 整理 | 令双除了数据清洗和数据探索的主题外,许多有效的NLP(自然语言处理)分析都是依赖于对文本数据预处理。因此,我决定手把手展现一个对来自苹...
  • #顺序错了 应该先导入数据,对数据进行处理,在用loadCSV csvdata = loadCSV(r'F:\研一\NLP\数据集\ag_news_csv\train.csv') csvdata1=tokenizer(str(csvdata)) 通过初步的分词,可以看到还是有许多标点符号,...
  • 经典的文本数据预处理流程

    千次阅读 2018-01-15 11:00:38
    首先对文本进行分词,因为可以直接用NLTK的分词器,中文的可以用结巴分词 在英文中,往往还需要对单词进行词干提取和词形归一化。在词形归一的过程中如果结合POS Tag可以更好的进行词形归一。 去除停用词,得到最终...
  • 在深度学习运用在自然处理语言前,文本预处理是必不可少的步骤,一些常用的工具如句子句子分割,one-hot 编码,分词器都已经集成在keras预处理工具中,用户无需自己重新造轮子。下面我们将分别讲解这些功能。 1、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,871
精华内容 1,148
关键字:

文本数据预处理