精华内容
参与话题
问答
  • Linux搜索文件名和搜索文本内容命令

    万次阅读 2019-06-19 17:23:49
    1.搜索文件名:find命令 a.桌面系统如何搜索某个文件名? Windows或Linux系统自带搜索文件名可视化功能 ...举例说明:在整个系统中查找所有bin文件命令: sudo find / -name bin ...2.搜索文本内容:grep命令 ...

    1.搜索文件名:find命令

    a.桌面系统如何搜索某个文件名?

    Windows或Linux系统自带搜索文件名可视化功能

     

    b.Linux终端如何搜索某个文件名?

    举例说明:在整个系统中查找所有bin文件命令: sudo find / -name bin

    c.IDE如Pycharm将整个项目打开,连按2次shift键可打开文件搜索功能

    2.搜索文本内容:grep命令

    a.IDE如Pycharm将整个项目打开,Ctrl+H可打开整个项目文本内容搜索功能

    Edit-->Find-->Find in Path

    b.Linux终端如何搜索文本内容?

    举例说明:

    在整个系统中查找所有文件内容含 'hello world' 字符串的文件:sudo grep -rin 'hello world' /

    在当前目录下查找所有文件内容含 'hello world' 字符串的文件:sudo grep -rin 'hello world' *

    解释:

    r:递归查找

    i:忽略大小写

    n:显示查找到的行号

    'hello world':需要查找的文本字符串

    / 从根目录(整个系统查找),也可以写文件名,多个用空格分隔,或*代表当前目录所有文件中查找

    展开全文
  • python读取、写入txt文本内容

    万次阅读 多人点赞 2019-08-22 21:54:28
    读取txt文本 python常用的读取文件函数有三种read()、readline()、readlines() 以读取上述txt为例,看一下三者的区别 read() 一次性读全部内容 一次性读取文本中全部的内容,以字符串的形式返回结果 with open...

    读取txt文本

    python常用的读取文件函数有三种read()、readline()、readlines() 
    这里写图片描述 
    以读取上述txt为例,看一下三者的区别

    read()    一次性读全部内容

    一次性读取文本中全部的内容,以字符串的形式返回结果

    with open("test.txt", "r") as f:  # 打开文件
        data = f.read()  # 读取文件
        print(data)

    è¿éåå¾çæè¿°

    readline()    读取第一行内容

    只读取文本第一行的内容,以字符串的形式返回结果

    with open("test.txt", "r") as f:
        data = f.readline()
        print(data)

    readlines()     列表

    读取文本所有内容,并且以数列的格式返回结果,一般配合for in使用

    with open("test.txt", "r") as f:
        data = f.readlines()
        print(data)

    readlines会读到换行符,可用如下方法去除:

    with open("test.txt", "r") as f:
        for line in f.readlines():
            line = line.strip('\n')  #去掉列表中每一个元素的换行符
            print(line)

     

    写入txt文本

    with open("test.txt","w") as f:
        f.write("这是个测试!")  # 自带文件关闭功能,不需要再写f.close()

     

    读写模式

    要了解文件读写模式,需要了解几种模式的区别,以及对应指针

    r :   读取文件,若文件不存在则会报错

    w:   写入文件,若文件不存在则会先创建再写入,会覆盖原文件

    a :   写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾

    rb,wb:  分别于r,w类似,但是用于读写二进制文件

    r+ :   可读、可写,文件不存在也会报错,写操作时会覆盖

    w+ :   可读,可写,文件不存在先创建,会覆盖

    a+ :  可读、可写,文件不存在先创建,不会覆盖,追加在末尾

    展开全文
  • 文本编辑器  富文本编辑器(Rich Text Editor,RTE)是一种可内嵌于浏览器,所见即所得的文本编辑器。它提供类似于Office Word 的编辑功能,方便那些不太懂HTML用户使用,富文本编辑器的应用非常广泛,它的历史...

    富文本编辑器

     富文本编辑器(Rich Text Editor,RTE)是一种可内嵌于浏览器,所见即所得的文本编辑器。它提供类似于Office Word 的编辑功能,方便那些不太懂HTML用户使用,富文本编辑器的应用非常广泛,它的历史与图文网页诞生的历史几乎一样长。

     作为一个技术人员,手上备上两款富文本编辑器还是很有用的,指不定那个项目就要集成一个进去。到时候现找现用那可就费功夫了,毕竟从开发上讲,每个富文本编辑器的用法都是有区别的。

     下面是我收集的一些业界比较受欢迎的富文本编辑器,喜欢的朋友、用过的朋友可以一起看看,一起探讨。

    1、TinyMCE

     TinyMCE是一个开源的所见即所得的HTML编辑器,界面相当清新,界面模拟本地软件的风格,顶部有菜单栏。支持图片在线处理,插件多,功能非常强大,易于集成,并且拥有可定制的主题。支持目前流行的各种浏览器,它可以达到微软Word类似的编辑体验。

     而且这么好的东西还是开源免费的,目前一直有人维护,这款编辑器使用的人非常多。

     更多介绍及下载:https://www.tiny.cloud/docs/demo/full-featured/

     

    2、CKEditor

     Ckeditor也是一款非常经典的富文本编辑器,官方下载量过千万。它是在非常著名的FCkEditor基础上开发的新版本,FckEditor的用户现在基本都转移到Ckeditor了。

     Ckeditor有高性能的实时预览,它特有行内编辑功能,使得编辑内容更加直观,仿佛是在编辑网页一样,有很强的可扩展性,被各大网站广泛运用。

     更多介绍及下载:https://ckeditor.com/

     

    3、UEditor

     UEditor 是由百度出品的富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源免费。这款编辑器用过的人也非常多,功能非常全面,插件很多,还可以很方便插入百度地图,接入十分简单。

     16年之后百度没有怎么更新了,不过现有的功能也足够用了。UEditor分为UE版(全功能版)和UM版(精简版),大家可以根据自己使用环境选择不同的版本。

     更多介绍及下载:http://ueditor.baidu.com/website/

     

    4、wangEditor

     wangEditor轻量级,小巧实用,配置方便,使用简单。可以自定义皮肤功能,免费开源。用户数量也很多,尤其是用在一些轻型环境,比如论坛社区回帖。wangEditor是国人出品的开源项目。

     更多介绍及下载:http://www.wangeditor.com/

     

    5、kindeditor

     KindEditor历史也很长了,用户数也不少,国内某公司出品。免费开源。界面类似于office word,界面和功能中规中矩,文档齐全,使用还算方便。

     更多介绍及下载:http://kindeditor.net/demo.php

     

    6、simditor

     simditor是Tower平台使用的富文本编辑器,是一款轻量化的编辑器,界面简约,功能实用,插件不是很多,功能要求不高的可以使用。

     虽然是国内出品,但文档是英文的。开源免费。

     更多介绍及下载:https://simditor.tower.im/

     

    7、bootstrap-wysiwyg

     bootstrap-wysiwyg是基于Bootstrap的轻型、免费开源的富文本编辑器,界面简洁大方。使用需要先引入bootstrap。

     个人觉得bootstrap-wysiwyg这一长串像乱码一样的名字影响了它的推广和使用~ ~毕竟轻型使用环境还是很多的。

     更多介绍及下载:http://mindmup.github.io/bootstrap-wysiwyg/

     

    8、summernote

     summernote是一款轻量级的富文本编辑器,比较容易上手,使用体验流畅,支持各种主流浏览器。summernote开源免费,该项目一直比较活跃,一直都有人在维护。

     summernote同样依赖于jquery和bootstrap,使用前先引入这两项。

     更多介绍及下载:https://summernote.org/

     

    9、Froala

     Froala是一款功能丰富的富文本编辑器,界面分类清晰,容易集成,容易升级,支持主流浏览器,具有行内编辑功能。Froala代码示例很多,可以集成在很多js框架里如React.js,Aurelia,Angular,Ionic,Django等。插件很多,易于扩充功能。

     Froala是收费的,不过前端是开源的,如果要使用后台是要交费的(如果你使用国人强大的crack技能那就是另外一回事了~ ~)。目前有三个定价方式:基础版(239美元)、专业版(1199美元)和企业版(1999美元)。

     更多介绍及下载:https://www.froala.com/wysiwyg-editor

     

    10、Quill

     Quill是轻型的编辑器,样式一般(黑白风),功能中等,它的代码高亮功能比较强,同样支持行内编辑模式,工具条可自定义。

     开源免费,项目活跃,一直有人维护。

     更多介绍及下载:https://quilljs.com/

     

    11、FreeTextBox

     FreeTextBox功能强大,前端支持主流浏览器,但后台只支持.NET。它的外观和使用风格都和微软 Word很类似。工具条可以定制,运行速度一般。FreeTextBox分为免费版和pro收费版,一般情况免费版本功能已经足够用了。

     更多介绍及下载:http://freetextbox.com/

     

    12、dhtmlxEditor

     DHTMLX组件是一整套基于JS的UI库,功能强大,其中包含编辑器dhtmlxEditor。该编辑器可以直接集成到Angular,React和Vue.js框架中,该编辑器还同时支持Markdown和富文本。

     支持普通视图和类似word一样的页面视图,支持全屏幕,工具支持自定义,包括工具条颜色和样式等。

     dhtmlxEditor分为免费版和收费版,免费版具有绝大多数功能,而且免费版是开源的你可以在代码级别随便扩充。

     更多介绍及下载:https://dhtmlx.com/docs/products/dhtmlxRichText/

     

    13、eWebEditor

     eWebEditor外观和使用风格都和微软 Word很类似,功能很多。工具条可以定制,运行速度很快。导入文件接口很多,支持word、excel、pdf、ppt直接导入,目前版本不支持代码高亮,不适合纯技术平台使用,适合内容编辑人员使用。

     eWebEditor有很长的历史了,是典型的传统富文本编辑器,不论是界面,还是功能都比较传统。

     eWebEditor是收费的,但也有免费的精简版,精简版没有后台功能。

     更多介绍及下载:http://www.ewebeditor.net/demo/

     

    最后

     富文本编辑器产品真的非常多,以上只是本人接触过的一些,相信还有很多很好的富文本存在,其实也没必要全都试一遍,只有最适合自己的,才是最好的。

     如果你用过其中的一种,或者你用过其他好用的富文本编辑器,欢迎交流分享。

     如果你还喜欢现在流行的markdown编辑器,请看我的另一篇文章《几款主流好用的markdown编辑器介绍》

     如果想了解markdown编辑器和富文本编辑器的区别,请参考《markdown编辑器与富文本编辑器优缺点比较,哪个更好用》

     

    转载请注明原文地址:https://blog.csdn.net/davidhzq/article/details/100842866

     

     

    展开全文
  • TextCNN文本分类(keras实现)

    万次阅读 多人点赞 2019-03-26 19:23:46
    二、Keras文本预处理 1、读取数据集 2、将文字转换成数字特征 3、将每条文本转换为数字列表 4、将每条文本设置为相同长度 5、将每个词编码转换为词向量 6、Keras文本预处理代码实现 三、基于keras的TextCNN...

    目录

    前言:

    一、论文笔记

    二、Keras文本预处理

    1、读取数据集

    2、将文字转换成数字特征

    3、将每条文本转换为数字列表

    4、将每条文本设置为相同长度

    5、将每个词编码转换为词向量

    6、Keras文本预处理代码实现

    三、基于keras的TextCNN模型的构建、训练与测试

    1、基础版CNN(模仿LeNet-5)

    2、简单版TextCNN

    3、使用Word2Vec词向量的TextCNN

    四、绘制TextCNN模型结构图

    1、环境配置

    2、绘制模型图

    五、keras模型的保存与加载


    前言:

    深度学习模型在计算机视觉语音识别方面取得了卓越的成就,在 NLP 领域也是可以的。将卷积神经网络CNN应用到文本分类任务,利用多个不同size的kernel来提取句子中的关键信息(类似 n-gram 的关键信息,从而能够更好地捕捉局部相关性。

    文本分类是自然语言处理领域最活跃的研究方向之一,目前文本分类在工业界的应用场景非常普遍,从新闻的分类、商品评论信息的情感分类到微博信息打标签辅助推荐系统,了解文本分类技术是NLP初学者比较好的切入点,较简单且应用场景高频。

    一、论文笔记

    1、Yoon Kim在2014年 “Convolutional Neural Networks for Sentence Classification” 论文中提出TextCNN(利用卷积神经网络对文本进行分类的算法)(该论文翻译)。

    上图很好地诠释了模型的框架。假设我们有一些句子需要对其进行分类。句子中每个词是由n维词向量组成的,也就是说输入矩阵大小为m*n,其中m为句子长度。CNN需要对输入样本进行卷积操作,对于文本数据,filter不再横向滑动,仅仅是向下移动,有点类似于N-gram在提取词与词间的局部相关性。图中共有三种步长策略,分别是2,3,4,每个步长都有两个filter(实际训练时filter数量会很多)。在不同词窗上应用不同filter,最终得到6个卷积后的向量。然后对每一个向量进行最大化池化操作并拼接各个池化值,最终得到这个句子的特征表示,将这个句子向量丢给分类器进行分类,至此完成整个流程。

    (1)嵌入层(Embedding Layer)

    通过一个隐藏层, 将 one-hot 编码的词投影到一个低维空间中,本质上是特征提取器,在指定维度中编码语义特征。 这样, 语义相近的词, 它们的欧氏距离或余弦距离也比较近。(作者使用的单词向量是预训练的,方法为fasttext得到的单词向量,当然也可以使用word2vec和GloVe方法训练得到的单词向量)。

    (2)卷积层(Convolution Laye)

    在处理图像数据时,CNN使用的卷积核的宽度和高度的一样的,但是在text-CNN中,卷积核的宽度是与词向量的维度一致!这是因为我们输入的每一行向量代表一个词,在抽取特征的过程中,词做为文本的最小粒度。而高度和CNN一样,可以自行设置(通常取值2,3,4,5),高度就类似于n-gram了。由于我们的输入是一个句子,句子中相邻的词之间关联性很高,因此,当我们用卷积核进行卷积时,不仅考虑了词义而且考虑了词序及其上下文(类似于skip-gram和CBOW模型的思想)。

    (3)池化层(Pooling Layer)

    因为在卷积层过程中我们使用了不同高度的卷积核,使得我们通过卷积层后得到的向量维度会不一致,所以在池化层中,我们使用1-Max-pooling对每个特征向量池化成一个值,即抽取每个特征向量的最大值表示该特征,而且认为这个最大值表示的是最重要的特征。当我们对所有特征向量进行1-Max-Pooling之后,还需要将每个值给拼接起来。得到池化层最终的特征向量。在池化层到全连接层之前可以加上dropout防止过拟合。

    (4)全连接层(Fully connected layer)

    全连接层跟其他模型一样,假设有两层全连接层,第一层可以加上’relu’作为激活函数,第二层则使用softmax激活函数得到属于每个类的概率。

    (5)TextCNN的小变种

    在词向量构造方面可以有以下不同的方式: CNN-rand: 随机初始化每个单词的词向量通过后续的训练去调整。 CNN-static: 使用预先训练好的词向量,如word2vec训练出来的词向量,在训练过程中不再调整该词向量。 CNN-non-static: 使用预先训练好的词向量,并在训练过程进一步进行调整。 CNN-multichannel: 将static与non-static作为两通道的词向量。

    (6)参数与超参数

    • sequence_length (Q: 对于CNN, 输入与输出都是固定的,可每个句子长短不一, 怎么处理? A: 需要做定长处理, 比如定为n, 超过的截断, 不足的补0. 注意补充的0对后面的结果没有影响,因为后面的max-pooling只会输出最大值,补零的项会被过滤掉)
    • num_classes (多分类, 分为几类)
    • vocabulary_size (语料库的词典大小, 记为|D|)
    • embedding_size (将词向量的维度, 由原始的 |D| 降维到 embedding_size)
    • filter_size_arr (多个不同size的filter)

    2、2015年“A Sensitivity Analysis of (and Practitioners' Guide to) Convolutional Neural Networks for Sentence Classification”论文详细地阐述了关于TextCNN模型的调参心得。

    (1)TextCNN详细过程:

    • Embedding:第一层是图中最左边的7乘5的句子矩阵,每行是词向量,维度=5,这个可以类比为图像中的原始像素点。
    • Convolution:然后经过 kernel_sizes=(2,3,4) 的一维卷积层,每个kernel_size 有两个输出 channel。
    • MaxPolling:第三层是一个1-max pooling层,这样不同长度句子经过pooling层之后都能变成定长的表示。
    • FullConnection and Softmax:最后接一层全连接的 softmax 层,输出每个类别的概率。

    (2)论文调参结论:

    • 使用预训练的word2vec 、 GloVe初始化效果会更好。一般不直接使用One-hot。
    • 卷积核的大小影响较大,一般取1~10,对于句子较长的文本,则应选择大一些。
    • 卷积核的数量也有较大的影响,一般取100~600 ,同时一般使用Dropout(0~0.5)。
    • 激活函数一般选用ReLU 和 tanh。
    • 池化使用1-max pooling。
    • 随着feature map数量增加,性能减少时,试着尝试大于0.5的Dropout。
    • 评估模型性能时,记得使用交叉验证。

    二、Keras文本预处理

    1、读取数据集

    2、将文字转换成数字特征

    使用Tokenizer将文字转换成数字特征

    使用Keras的Tokenizer模块实现转换。当我们创建了一个Tokenizer对象后,使用该对象的fit_on_texts()函数,可以将输入的文本中的每个词编号,编号是根据词频的,词频越大,编号越小。使用word_index属性可以看到每次词对应的编码。

    3、将每条文本转换为数字列表

    将数据集中的每条文本转换为数字列表,使用每个词的编号进行编号

    使用该对象的texts_to_sequences()函数,将每条文本转变成一个向量。 

    4、将每条文本设置为相同长度

    使用pad_sequences()让每句数字影评长度相同

    由于每句话的长度不唯一,需要将每句话的长度设置一个固定值。将超过固定值的部分截掉,不足的在最前面用0填充。

    5、将每个词编码转换为词向量

    使用Embedding层将每个词编码转换为词向量

    Embedding层基于上文所得的词编码,对每个词进行one-hot编码,每个词都会是一个vocabulary_size维的向量;然后通过神经网络的训练迭代更新得到一个合适的权重矩阵(具体实现过程可以参考skip-gram模型),行大小为vocabulary_size,列大小为词向量的维度,将本来以one-hot编码的词向量映射到低维空间,得到低维词向量。需要声明一点的是Embedding层是作为模型的第一层,在训练模型的同时,得到该语料库的词向量。当然,也可以使用已经预训练好的词向量表示现有语料库中的词。

    文本预处理目的:将每个样本转换为一个数字矩阵,矩阵的每一行表示一个词向量。

    6、Keras文本预处理代码实现

    from sklearn.model_selection import train_test_split
    import pandas as pd
    import jieba
    from keras.preprocessing.text import Tokenizer
    from keras.preprocessing.sequence import pad_sequences
    
    if __name__=='__main__':
        dataset = pd.read_csv('sentiment_analysis/data_train.csv', sep='\t',names=['ID', 'type', 'review', 'label']).astype(str)
        cw = lambda x: list(jieba.cut(x))
        dataset['words'] = dataset['review'].apply(cw)
        tokenizer=Tokenizer()  #创建一个Tokenizer对象
        #fit_on_texts函数可以将输入的文本中的每个词编号,编号是根据词频的,词频越大,编号越小
        tokenizer.fit_on_texts(dataset['words'])
        vocab=tokenizer.word_index #得到每个词的编号
        x_train, x_test, y_train, y_test = train_test_split(dataset['words'], dataset['label'], test_size=0.1)
        # 将每个样本中的每个词转换为数字列表,使用每个词的编号进行编号
        x_train_word_ids=tokenizer.texts_to_sequences(x_train)
        x_test_word_ids = tokenizer.texts_to_sequences(x_test)
        #序列模式
        # 每条样本长度不唯一,将每条样本的长度设置一个固定值
        x_train_padded_seqs=pad_sequences(x_train_word_ids,maxlen=50) #将超过固定值的部分截掉,不足的在最前面用0填充
        x_test_padded_seqs=pad_sequences(x_test_word_ids, maxlen=50)
    

    三、基于keras的TextCNN模型的构建、训练与测试

    1、基础版CNN(模仿LeNet-5)

    LeNet-5是卷积神经网络的作者Yann LeCun用于MNIST识别任务提出的模型。模型很简单,就是卷积池化层的堆叠,最后加上几层全连接层。将其运用在文本分类任务中。

    #构建CNN分类模型(LeNet-5)
    #模型结构:嵌入-卷积池化*2-dropout-BN-全连接-dropout-全连接
    def CNN_model(x_train_padded_seqs, y_train, x_test_padded_seqs, y_test):
        model = Sequential()
        model.add(Embedding(len(vocab) + 1, 300, input_length=50)) #使用Embeeding层将每个词编码转换为词向量
        model.add(Conv1D(256, 5, padding='same'))
        model.add(MaxPooling1D(3, 3, padding='same'))
        model.add(Conv1D(128, 5, padding='same'))
        model.add(MaxPooling1D(3, 3, padding='same'))
        model.add(Conv1D(64, 3, padding='same'))
        model.add(Flatten())
        model.add(Dropout(0.1))
        model.add(BatchNormalization())  # (批)规范化层
        model.add(Dense(256, activation='relu'))
        model.add(Dropout(0.1))
        model.add(Dense(3, activation='softmax'))
        model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
        one_hot_labels = keras.utils.to_categorical(y_train, num_classes=3)  # 将标签转换为one-hot编码
        model.fit(x_train_padded_seqs, one_hot_labels,epochs=5, batch_size=800)
        y_predict = model.predict_classes(x_test_padded_seqs)  # 预测的是类别,结果就是类别号
        y_predict = list(map(str, y_predict))
        print('准确率', metrics.accuracy_score(y_test, y_predict))
        print('平均f1-score:', metrics.f1_score(y_test, y_predict, average='weighted'))

    2、简单版TextCNN

    #构建TextCNN模型
    #模型结构:词嵌入-卷积池化*3-拼接-全连接-dropout-全连接
    def TextCNN_model_1(x_train_padded_seqs,y_train,x_test_padded_seqs,y_test):
        main_input = Input(shape=(50,), dtype='float64')
        # 词嵌入(使用预训练的词向量)
        embedder = Embedding(len(vocab) + 1, 300, input_length=50, trainable=False)
        embed = embedder(main_input)
        # 词窗大小分别为3,4,5
        cnn1 = Conv1D(256, 3, padding='same', strides=1, activation='relu')(embed)
        cnn1 = MaxPooling1D(pool_size=48)(cnn1)
        cnn2 = Conv1D(256, 4, padding='same', strides=1, activation='relu')(embed)
        cnn2 = MaxPooling1D(pool_size=47)(cnn2)
        cnn3 = Conv1D(256, 5, padding='same', strides=1, activation='relu')(embed)
        cnn3 = MaxPooling1D(pool_size=46)(cnn3)
        # 合并三个模型的输出向量
        cnn = concatenate([cnn1, cnn2, cnn3], axis=-1)
        flat = Flatten()(cnn)
        drop = Dropout(0.2)(flat)
        main_output = Dense(3, activation='softmax')(drop)
        model = Model(inputs=main_input, outputs=main_output)
        model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    
        one_hot_labels = keras.utils.to_categorical(y_train, num_classes=3)  # 将标签转换为one-hot编码
        model.fit(x_train_padded_seqs, one_hot_labels, batch_size=800, epochs=10)
        #y_test_onehot = keras.utils.to_categorical(y_test, num_classes=3)  # 将标签转换为one-hot编码
        result = model.predict(x_test_padded_seqs)  # 预测样本属于每个类别的概率
        result_labels = np.argmax(result, axis=1)  # 获得最大概率对应的标签
        y_predict = list(map(str, result_labels))
        print('准确率', metrics.accuracy_score(y_test, y_predict))
        print('平均f1-score:', metrics.f1_score(y_test, y_predict, average='weighted'))

    3、使用Word2Vec词向量的TextCNN

    w2v_model=Word2Vec.load('sentiment_analysis/w2v_model.pkl')
    # 预训练的词向量中没有出现的词用0向量表示
    embedding_matrix = np.zeros((len(vocab) + 1, 300))
    for word, i in vocab.items():
        try:
            embedding_vector = w2v_model[str(word)]
            embedding_matrix[i] = embedding_vector
        except KeyError:
            continue
    
    #构建TextCNN模型
    def TextCNN_model_2(x_train_padded_seqs,y_train,x_test_padded_seqs,y_test,embedding_matrix):
        # 模型结构:词嵌入-卷积池化*3-拼接-全连接-dropout-全连接
        main_input = Input(shape=(50,), dtype='float64')
        # 词嵌入(使用预训练的词向量)
        embedder = Embedding(len(vocab) + 1, 300, input_length=50, weights=[embedding_matrix], trainable=False)
        #embedder = Embedding(len(vocab) + 1, 300, input_length=50, trainable=False)
        embed = embedder(main_input)
        # 词窗大小分别为3,4,5
        cnn1 = Conv1D(256, 3, padding='same', strides=1, activation='relu')(embed)
        cnn1 = MaxPooling1D(pool_size=38)(cnn1)
        cnn2 = Conv1D(256, 4, padding='same', strides=1, activation='relu')(embed)
        cnn2 = MaxPooling1D(pool_size=37)(cnn2)
        cnn3 = Conv1D(256, 5, padding='same', strides=1, activation='relu')(embed)
        cnn3 = MaxPooling1D(pool_size=36)(cnn3)
        # 合并三个模型的输出向量
        cnn = concatenate([cnn1, cnn2, cnn3], axis=-1)
        flat = Flatten()(cnn)
        drop = Dropout(0.2)(flat)
        main_output = Dense(3, activation='softmax')(drop)
        model = Model(inputs=main_input, outputs=main_output)
        model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    
        one_hot_labels = keras.utils.to_categorical(y_train, num_classes=3)  # 将标签转换为one-hot编码
        model.fit(x_train_padded_seqs, one_hot_labels, batch_size=800, epochs=20)
        #y_test_onehot = keras.utils.to_categorical(y_test, num_classes=3)  # 将标签转换为one-hot编码
        result = model.predict(x_test_padded_seqs)  # 预测样本属于每个类别的概率
        result_labels = np.argmax(result, axis=1)  # 获得最大概率对应的标签
        y_predict = list(map(str, result_labels))
        print('准确率', metrics.accuracy_score(y_test, y_predict))
        print('平均f1-score:', metrics.f1_score(y_test, y_predict, average='weighted'))

    四、绘制TextCNN模型结构图

    使用keras的plot_model()画出的TextCNN模型结构图

    1、环境配置

    (1)安装graphviz模块

    首先,命令行pip install graphviz;其次,安装graphviz软件,官网下载:graphviz-2.38.msi ;最后,将安装目录中的graphviz-2.38\release\bin添加进Path环境变量

    (2)安装pydot模块

    命令行pip install pydot

    (3)在运行程序中加入下面两行代码

    import os
    os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

    2、绘制模型图

    使用plot_model()画出模型图

    from keras.utils import plot_model
        #生成一个模型图,第一个参数为模型,第二个参数为要生成图片的路径及文件名,还可以指定两个参数:
        #show_shapes:指定是否显示输出数据的形状,默认为False
        #show_layer_names:指定是否显示层名称,默认为True
        plot_model(model,to_file='sentiment_analysis/model.png',show_shapes=True,show_layer_names=False)

    模型图如下:

    五、keras模型的保存与加载

    from keras.models import load_model
    
    #模型的保存
    model.save('model.h5')
    
    #模型的加载
    model=load_model('model.h5')

     

    参考学习资料:

    (1)Keras之文本分类实现

    (2)使用Keras进行深度学习

    (3)NLP论文

    (4)卷积神经网络(CNN)在句子建模上的应用

    (5)用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    (6)深度学习在文本分类中的应用

    (7)深度学习与文本分类总结第一篇--常用模型总结

    (8)基于 word2vec 和 CNN 的文本分类 :综述 & 实践

     

    交流学习资料共享欢迎入QQ群:955817470

     

    展开全文
  • 很简单的一个工具类: 工具类功能:会递归查找所有子文件夹...//统计指定文件夹.java,.js文件的代码行数,各候后缀的文本数量 HowManyLine lineCounter = new HowManyLine(); List<String> fileSuffixList =...
  • 推荐几个非常不错的富文本编辑器

    万次阅读 多人点赞 2019-08-29 07:35:42
    1、wangEditor——基于javascript和css开发的 Web富文本编辑器, 轻量、简洁、界面美观、易用、开源免费。 界面截图:官网地址 2、TinyMCE——TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,由JavaScript...
  • Qt文本文件的读写操作

    万次阅读 2017-12-28 11:34:06
    Qt文本的读写
  • 【Python3】常见文本相似度计算方式及代码

    万次阅读 多人点赞 2019-04-19 23:02:54
    常见文本相似度计算方式及代码 文本相似度的计算广泛的运用在信息检索,搜索引擎, 文档复制等处: 因此在各种不同的情况与任务中,有不同的文本相似度计算。 近期在处理搜索引擎的相关项目 下面介绍一下我们主要使用...
  • NLP:基于textrank4zh库对文本实现提取文本关键词、文本关键短语和文本摘要 目录 输出结果 设计思路 核心代码 输出结果 关键词: 故宫 0.030737773083470445 镜头 0.026154204788274925 ...
  • NLP:基于snownlp库对文本实现提取文本关键词和文本摘要 目录 输出结果 1、测试文本 设计思路 核心代码 输出结果 1、测试文本 今天一大早,两位男子在故宫抽烟对镜头炫耀的视频在网络上...
  • 文本与纯文本

    千次阅读 2019-03-08 12:31:03
    文本与纯文本 引言 你是否曾经话费大量时间在写Word文档上,同时Word上的很多功能我们平常并用不上。写Word时,内容往往不是难点,难住我们的总是排版问题,行间距,首行缩进以及该选用什么字体。 若你费尽心思写...
  • 511遇见易语言文本处理寻找文本

    千次阅读 2020-06-27 17:20:50
    本课讲解了寻找文本和寻找字节集来实现对单字节和双字节多次寻找文本的方法。 视频链接: 511遇见易语言教程 教程源码 .版本 2 .程序集 窗口程序集_启动窗口 .子程序 _按钮1_被单击, , , 寻找文本 .局部...
  • 在Mac电脑上面打开txt文件,有些时候由于格式不一样或者其他原因,会打不开txt文件,这样就需要我们对文本编辑的偏好设置里面进行修改即可。这里我只说两种打不开的情况,这两种情况就是标题说的这两种情况。 一、...
  • 这实际上就是我们前面说的删除数组重复成员的的一种方法,我们在加入数组前,先删除重复文本,在把一些文本加入数组或者数据库时,不想加入重复相同的文本,那么我们可以封装一个子程序来过滤一下文本, 易语言删除...
  • 第六章 文本编辑框QTextEdit和文本浏览框QTextBrowser 6.1同步显示文本 6.2小结 6.1同步显示文本 相信通过这两个控件的中文名大家应该也知道这两个控件的功能是什么了,前者用来编辑文本,后者无法编辑,只用于...
  • 文本超出隐藏

    千次阅读 2019-10-26 13:37:54
    文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本 文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本 文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本 </div&g...
  • markdown怎么居中文本

    万次阅读 多人点赞 2018-10-07 13:51:56
    刚开始时我也不知道如何居中Makedown的文本,感觉居中文本对makedown来说貌似很麻烦,但我用久了网页文本后,我就理解了一点,在网页上显示的文本都是以HTML格式显示的,如果显示纯文本,那必须利用特殊的函数去除...
  • 关于将Markdown格式文本转换成纯文本的这么一个需求 笔者始终找不到直接转换的解决方案 用Java转换的更是少之又少 有的只有将纯文本转换为Markdown格式???? 突然 笔者想到了一个关键点 将Markdown格式文本转换为纯...
  • 文本挖掘系列之文本分类

    千次阅读 2017-06-18 17:40:07
    文本分类介绍文本分类问题是根据文本的特征将其分到预先设定好的类别中,类别可以是两类,也可以是更多的类别。文本分类是机器学习领域里监督学习的一种重要应用问题。不过需要指出的是,第一,文本分类问题中用于...
  • markdown与富文本在线转换

    万次阅读 2020-10-24 10:28:53
    背景:工作中已经习惯markdown,但是有的网站还是使用富文本编辑,就需要将原本的markdown修改为富文本; 1,按照google插件 在谷歌商店应用商店搜索“Markdown Here”并下载安装,如下图 2,在线转换 在富文本...
  • C语言读取每一行文本

    万次阅读 2018-07-20 15:55:15
    C语言读取每一行文本方法:C语言读取每一行文本
  • 本课讲解了文本替换()和子文本替换()的区别和使用技巧,并且自己封装了另一个高级文本替换,解决了一些BUG. 视频链接: 511遇见易语言教程 视频课程源码 .版本 2 .程序集 窗口程序集_启动窗口 .子...
  • 文本分类(1)-文本预处理

    万次阅读 2019-05-05 20:56:03
    在进行文本分类之前,需要对文本进行预处理。文本预处理过程大致分为以下几点: 1、英文缩写替换 预处理过程中需要把英文缩写进行替换,如it’s和it is是等价的,won’t和will not也是等价的,等等。 text = "The ...
  • Python实现jieba对文本分词并写入新的文本文件,然后提取出文本中的关键词 思想 先对文本进行读写操作,利用jieba分词对待分词的文本进行分词,然后将分开的词之间用空格隔断;然后调用extract_tags()函数提取文本...
  • 如何提取以下文本中的“开车之后…踩了刹车” 如何提取以下文本中的“开车之后.......踩了刹车” <div class="zh-summary summary clearfix"> 开车之后明白了一个道理:你能横穿马路跑过去,不是因为你跑得快...
  • 免费的文本分析 文本挖掘软件工具(第一部分)

    千次阅读 热门讨论 2020-02-18 13:29:08
    这里针对非编程人员,介绍几个免费文本分析和文本挖掘软件,可以直接导入中文文本,得出一些统计和可视化信息。另外如果是编程人员,推荐使用一下文本挖掘的工具包。下面是两个可选的工具。 KH Coder 链接为:...
  • 文本分类

    千次阅读 2018-09-07 16:56:06
    一、传统文本分类方法  文本分类问题算是自然语言处理领域中一个非常经典的问题了,相关研究最早可以追溯到上世纪50年代,当时是通过专家规则(Pattern)进行分类,甚至在80年代初一度发展到利用知识工程建立专家...
  • 用富文本解析html文本

    千次阅读 2018-07-18 22:43:10
    //html文本处理函数,输入html文本内容 - (NSAttributedString *)attributedStringWithHTMLString:(NSString *)htmlString { //转换参数 NSDictionary *options = @{ NSDocumentTypeDocumentAttribute : ...
  • 文本挖掘系列之文本信息抽取

    万次阅读 2017-06-07 12:52:31
    文本数据挖掘的定义文本数据挖掘是一种利用计算机处理技术从文本数据中抽取有价值的信息和知识的应用驱动型学科。文本数据挖掘处理的数据类型是文本数据,属于数据挖据的一个分支,与机器学习、自然语言处理、数理...
  • python 实现中文文本分类

    万次阅读 多人点赞 2019-02-01 16:20:14
    python 实现中文文本分类 本文基于 Python 采用 scikit-learn 模块实现中文文本分类。 文本分类 一、预处理 1. 获取语料库 语料库数据选用搜狗语料库的搜狐新闻数据精简版:...

空空如也

1 2 3 4 5 ... 20
收藏数 640,705
精华内容 256,282
关键字:

文本