精华内容
下载资源
问答
  • 文本嵌入

    千次阅读 2019-03-25 22:05:28
    除了这两种文本嵌入外,还有许多最近开发的高级模型,包括FastText,Poincare嵌入,sense2vec,Skip-Thought,Adaptive Skip-Gram,我强烈建议你学习一下。 原文转于: 七月在线 上边的面试题

    什么是NLP?
    自然语言处理(NLP) 是计算机科学,人工智能和语言学的交叉领域。目标是让计算机处理或“理解”自然语言,以执行语言翻译和问题回答等任务。

    随着语音接口和聊天机器人的兴起,NLP正在成为信息时代最重要的技术之一,同时它也是人工智能的关键部分。充分理解和表达语言的含义是一个非常困难的目标。为什么?因为人类的语言很特别。

    人类语言有什么特别之处?
    1.人类语言是专门为传达说话人的意图而构建的系统。这不仅仅是一个环境信号,更是一个有意识的交流。
    2.人类语言大多是离散/符号的/分类的信号系统,大概是因为信号可靠性更高。
    3.一种语言的分类符号可以用几种方式编码为通信信号:声音,手势,写作,图像等。人类语言只是其中的一种。
    4.人类语言是不明确的(与编程和其他正式语言不同)。 因此,在表达、学习和使用语言/情境/情境/文字/视觉知识对人类语言方面存在高度复杂性。

    NLP应用到哪里?
    从NLP研究领域衍生出了一批快速增长的应用程序。以下是其中几个:
    1.拼写检查,关键字搜索,查找同义词;
    2.从网站提取信息,例如:产品价格,日期,地点,人员或公司名称;
    3.分类:长文档的积极/消极情绪;
    4.机器翻译;
    5.口语对话系统;
    6.复杂的问答系统;

    事实上,这些应用程序已经在现实中大量使用,从搜索到在线广告匹配 ; 从自动/辅助翻译到营销或财务/交易的情绪分析 ; 从语音识别到chatbots /对话代理(自动化客户支持,控制设备,订购商品)。
    在这里插入图片描述

    深度学习
    大部分NLP技术都是由深度学习提供技术支持。近几年,深度学习才开始发挥作用,主要是因为:
    ·大量的训练数据;
    ·更快的机器和多核CPU / GPU;
    ·性能高的新模型和算法:有效的端到端联合系统学习、有效的使用上下文和任务间转换的学习方法,以及正则化优化方法。

    在深度学习中,表示学习试图自动学习来自原始输入的良好特征或表示。而在机器学习中手动设计的特征通常过多且不完整,需要花费很长时间进行设计和验证。而且深度学习提供了一个非常灵活、通用且可学习的框架,用于呈现视觉和语言信息的世界。

    最初,它在语音识别和计算机视觉等领域取得突破。最近,深度学习方法在许多不同的NLP任务中表现出了非常高的性能。这些模型通常可以通过单一的端到端模型进行训练,并且不需要传统的,特定于任务的特征工程。

    下面简单介绍下文本嵌入(Text Embeddings)。

    在传统的NLP中,我们将单词视为离散符号,然后可以用one-hot向量表示。向量的维度是整个词汇表中单词的数量。单词作为离散符号的问题在于,对于one-hot向量来说,没有自然的相似性概念。

    因此,另一种方法是学习在向量本身中编码相似性。核心思想是一个词的含义是由经常出现在其旁边的单词给出的。

    文本嵌入是字符串的实值向量表示。我们为每个单词建立一个密集的向量,选择它以便类似于类似上下文中出现的单词的向量。对于大多数NLP任务而言,词嵌入被认为是一个很好的起点。它们允许深度学习在较小的数据集上也是有效的,因为它们通常是深度学习体系的第一批输入,也是NLP中最流行的迁移学习方式。

    在词嵌入中最流行的应该是Word2vec,它是由谷歌(Mikolov)开发的模型,另外一个是由斯坦福大学(彭宁顿,Socher和曼宁)开发的GloVe。

    接着我们重点介绍这两种模型:
    在这里插入图片描述

    在Word2vec中,我们有一个庞大的文本语料库,其中固定词汇表中的每个词都由一个向量表示。然后,我们通过文本中的每个位置t,其中有一个中心词c和上下文词o。

    接下来,我们使用字向量的相似性Ç和Ò计算的概率ø给出Ç(或反之亦然)。我们不断调整单词向量来最大化这个概率。为了有效地训练Word2vec,我们可以从数据集中去除无意义的单词。这有助于提高模型的准确性。

    Word2vec有两个变体值得一提:

    在这里插入图片描述
    1.Skip-Gram:我们考虑一个包含k个连续项的上下文窗口。
    然后,我们跳过其中一个单词,尝试学习一个神经网络,该网络可以获得除跳过的所有术语外的所有术语,并预测跳过的术语。
    因此,如果两个单词在大语料库中反复共享相似的上下文,那么这些术语的嵌入向量将具有相似的向量。

    2.Continuous Bag of Words:我们在一个大的语料库中获取大量的句子,每当我们看到一个词,我们就会联想到周围的词。
    然后,我们将上下文单词输入到神经网络,并预测该上下文中心的单词。
    当我们有数千个这样的上下文单词和中心单词时,我们就有了一个神经网络数据集的实例。我们训练神经网络,最后编码的隐藏层输出表示一个特定的词嵌入。

    当我们通过大量的句子进行训练时,类似上下文中的单词会得到相似的向量。

    在这里插入图片描述
    对Skip-Gram和CBOW的一个吐槽就是它们都是基于窗口的模型,这意味着语料库的共现统计不能被有效使用,导致次优的嵌入(suboptimal embeddings)。

    GloVe模型旨在通过捕捉一个字与整个观测语料库的结构嵌入的含义来解决这个问题。为此,该模型训练单词的全局共现次数,并通过最小化最小二乘误差来充分利用统计量,从而产生具有有意义子结构的单词向量空间。这样的做法足以保留单词与向量距离的相似性。

    除了这两种文本嵌入外,还有许多最近开发的高级模型,包括FastText,Poincare嵌入,sense2vec,Skip-Thought,Adaptive Skip-Gram,我强烈建议你学习一下。

    原文转于:七月在线 上边的面试题

    展开全文
  • 做微信公众号开发时,有时为了通过文本消息就能简单的进入链接的网站,需要在文本消息插入超链接。html中文本嵌入超链接格式如下 $contentStr = "\n\n回复百度或回复“搜索” 了解详情\n其他文字"; ...

    做微信公众号开发时,有时为了通过文本消息就能简单的进入链接的网站,需要在文本消息中插入超链接。html中文本嵌入超链接格式如下

    $contentStr = "\n\n回复<a href="http://www.baidu.com/">百度</a>或回复“搜索” 了解详情\n其他文字";                                                                   
    
               					
    其中引用网址的双引号,可以用单引号。但是在微信公众平台里不行,必须要使用双引号,单引号的在IOS上可以正常显示,但是在安卓手机上没有超链的效果,将网址也以文本消息呈现出来了。

    另外在用PHP开发时,引用网址的双引号必须转义一下"\"",否则就会被看成字符串的双引号,而非引用网址的格式的引号,字符串里面的引号必须转义。正确的超链如下

    $contentStr = "\n\n回复<a href=\"http://www.baidu.com/\">百度</a>或回复“搜索” 了解详情\n其他文字";                                                                   
    
    
     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, time(), $msgType, $contentStr);
     
    
                    
    echo $resultStr;
               					




    展开全文
  • 下面没有讲述a w k的全部特性,也不涉及a w k的深层次编程,仅讲述使用a w k执行操作及怎样文本文件和字符串抽取信息。 引用: 内容有: • 抽取域。 • 匹配正则表达式。 • 比较域。 • 向a w k传递参数。 ...
    下面没有讲述a w k的全部特性,也不涉及a w k的深层次编程,仅讲述使用a w k执行行操作及怎样从文本文件和字符串中抽取信息。 
      引用:
      内容有:
      • 抽取域。
      • 匹配正则表达式。
      • 比较域。
      • 向a w k传递参数。
      • 基本的a w k行操作和脚本。
      a w k语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息。a w k抽取信息后,才能进行其他文本操作。完整的a w k脚本通常用来格式化文本文件中的信息。
      下面没有讲述a w k的全部特性,也不涉及a w k的深层次编程,仅讲述使用a w k执行行操作及怎样从文本文件和字符串中抽取信息。
      引用:
      内容有:
      • 抽取域。
      • 匹配正则表达式。
      • 比较域。
      • 向a w k传递参数。
      • 基本的a w k行操作和脚本。
      a w k语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息。a w k抽取信息后,才能进行其他文本操作。完整的a w k脚本通常用来格式化文本文件中的信息。
      1 调用awk
      有三种方式调用a w k,第一种是命令行方式,如:
      代码:
      awk [-F fild-separator] ’commands’ input-file(s)
      这里,c o m m a n d s是真正的a w k命令。
      上面例子中, [ - F域分隔符]是可选的,因为a w k使用空格作为缺省的域分隔符,因此如果要浏览域间有空格的文本,不必指定这个选项,但如果要浏览诸如p a s s w d文件,此文件各域以冒号作为分隔符,则必须指明- F选项,如:
      代码:
      awk -F: ’commands’ input-file(s)
      第二种方法是将所有a w k命令插入一个文件,并使a w k程序可执行,然后用a w k命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。
      第三种方式是将所有的a w k命令插入一个单独文件,然后调用:
      代码:
      awk -f awk-script-file input-files(s)
      - f选项指明在文件a w k _ s c r i p t _ f i l e中的a w k脚本, i n p u t _ f i l e ( s )是使用a w k进行浏览的文件名。
      2 awk脚本
      在命令中调用a w k时,a w k脚本由各种操作和模式组成。
       如果设置了- F选项,则a w k每次读一条记录或一行,并使用指定的分隔符分隔指定域,但如果未设置- F选项,a w k假定空格为域分隔符,并保持这个设置直到发现一新行。当新行出现时,a w k命令获悉已读完整条记录,然后在下一个记录启动读命令,这个读进程将持续到文件尾或文件不再存在。
      参照表,a w k每次在文件中读一行,找到域分隔符(这里是符号#),设置其为域n,直至一新行(这里是缺省记录分隔符),然后,划分这一行作为一条记录,接着a w k再次启动下一行读进程。
      awk读文件记录的方式
      引用:
      域1 分隔符 域2 分隔符 域3 分隔符 域4及换行
      P. B u n n y (记录1 ) # 0 2 / 9 9 # 4 8 # Yellow /n
      J . Tr o l l (记录2 ) # 0 7 / 9 9 # 4 8 4 2 # Brown-3 /n
      2.1 模式和动作
      任何a w k语句都由模式和动作组成。在一个a w k脚本中可能有许多语句。模式部分决定动作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式部分,动作将时刻保持执行状态。
       模式可以是任何条件语句或复合语句或正则表达式。模式包括两个特殊字段B E G I N和E N D。使用B E G I N语句设置计数和打印头。B E G I N语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行。E N D语句用来在a w k完成文本浏览动作后打印输出文本总数和结尾状态标志。如果不特别指明模式, a w k总是匹配或打印行数。
      实际动作在大括号{ }内指明。动作大多数用来打印,但是还有些更长的代码诸如i f和循环(l o o p i n g)语句及循环退出结构。如果不指明采取动作, a w k将打印出所有浏览出来的记录。
      2. 域和记录
      a w k执行时,其浏览域标记为$ 1,$ 2 . . . $ n。这种方法称为域标识。使用这些域标识将更容易对域进行进一步处理。
       使用$ 1 , $ 3表示参照第1和第3域,注意这里用逗号做域分隔。如果希望打印一个有5个域的记录的所有域,不必指明$ 1 , $ 2 , $ 3 , $ 4 , $ 5,可使用$ 0,意即所有域。Aw k浏览时,到达一新行,即假定到达包含域的记录末尾,然后执行新记录下一行的读动作,并重新设置域分隔。
      注意执行时不要混淆符号$和s h e l l提示符$,它们是不同的。
      为打印一个域或所有域,使用p r i n t命令。这是一个a w k动作(动作语法用圆括号括起来)。
      1. 抽取域
      真正执行前看几个例子,现有一文本文件g r a d e . t x t,记录了一个称为柔道数据库的行信息。
      代码:
      $ cat grade.txt
      M.Tans 5/99 48311 Green 8 40 44
      J.Lulu 06/99 48317 green 9 24 26
      P.Bunny 02/99 48 Yellow 12 35 28
      J.Troll 07/99 4842 Brown-3 12 26 26
      L.Tansl 05/99 4712 Brown-2 12 30 28
      此文本文件有7个域,即(1)名字、(2)升段日期、(3)学生序号、(4)腰带级别、(5)年龄、(6)目前比赛积分、(7)比赛最高分。
      因为域间使用空格作为域分隔符,故不必用- F选项划分域,现浏览文件并导出一些数据。在例子中为了利于显示,将空格加宽使各域看得更清晰。
      2. 保存a w k输出
      有两种方式保存s h e l l提示符下a w k脚本的输出。最简单的方式是使用输出重定向符号>文件名,下面的例子重定向输出到文件w o w。
      代码:
      $ awk ’{print }’ grade.txt >wow
      $ cat grade.txt
      使用这种方法要注意,显示屏上不会显示输出结果。因为它直接输出到文件。只有在保证输出结果正确时才会使用这种方法。它也会重写硬盘上同名数据。
       第二种方法是使用t e e命令,在输出到文件的同时输出到屏幕。在测试输出结果正确与否时多使用这种方法。例如输出重定向到文件d e l e t e _ m e _ a n d _ d i e,同时输出到屏幕。使用这种方法,在a w k命令结尾写入| tee delete_me_and_die。
      代码:
      $ awk ’{print }’ grade.txt | tee delete_me_and_die
      3. 使用标准输入
      在深入讲解这一章之前,先对a w k脚本的输入方法简要介绍一下。实际上任何脚本都是从标准输入中接受输入的。为运行本章脚本,使用a w k脚本输入文件格式,例如:
      引用:
      belts.awk grade_student.txt
      也可替代使用下述格式:
      使用重定向方法:
      belts.awk < grade2.txt
      或管道方法:
      grade2.txt | belts.awk
      这里我怎么看不明白,汗
      4. 打印所有记录
      代码:
      $ awk ’{print }’ grade.txt
      a w k读每一条记录。因为没有模式部分,只有动作部分{print }(打印所有记录),这个动作必须用花括号括起来。上述命令打印整个文件。
      5. 打印单独记录
      假定只打印学生名字和腰带级别,通过查看域所在列,可知为f i e l d - 1和f i e l d - 4,因此可以使用$ 1和$ 4,但不要忘了加逗号以分隔域。
      代码:
      $ awk ’{print ,}’ grade.txt
      M.Tans Green
      J.Lulu green
      P.Bunny Yellow
      J.Troll Brown-3
      L.Tansl Brown-2
      6. 打印报告头
       上述命令输出在名字和腰带级别之间用一些空格使之更容易划分,也可以在域间使用t a b键加以划分。为加入t a b键,使用t a b键速记引用符/ t,后面将对速记引用加以详细讨论。也可以为输出文本加入信息头。本例中加入n a m e和b e l t及下划线。下划线使用/ n,强迫启动新行,并在/ n下一行启动打印文本操作。打印信息头放置在B E G I N模式部分,因为打印信息头被界定为一个动作,必须用大括号括起来。在a w k查看第一条记录前,信息头被打印。
      代码:
      $ awk ’BEGIN {print "Name Belt/n-----------------------------------"}{print "/t",}’ grade.txt
      Name Belt
      -----------------------------------
      M.Tans Green
      J.Lulu green
      P.Bunny Yellow
      J.Troll Brown-3
      L.Tansl Brown-2
      7. 打印信息尾
      如果在末行加入end of report信息,可使用E N D语句。E N D语句在所有文本处理动作执行完之后才被执行。E N D语句在脚本中的位置放置在主要动作之后。下面简单打印头信息并告之查询动作完成。
      代码:
      $ awk ’BEGIN {print "Name/n--------"}{print } END ’ grade.txt
      Name
      --------
      M.Tans
      J.Lulu
      P.Bunny
      J.Troll
      L.Tansl
      8. awk错误信息提示
      几乎可以肯定,在使用a w k时,将会在命令中碰到一些错误。a w k将试图打印错误行,但由于大部分命令都只在一行,因此帮助不大。
      系统给出的显示错误信息提示可读性不好。使用上述例子,如果丢了一个双引号, a w k将返回:
      代码:
      $ awk ’BEGIN {print "Name/n--------}{print } END ’ grade.txt
      awk: cmd. line:1: BEGIN {print "Name/n--------}{print } END
      awk: cmd. line:1: ^ unterminated string
      当第一次使用a w k时,可能被错误信息搅得不知所措,但通过长时间和不断的学习,可总结出以下规则。在碰到a w k错误时,可相应查找:
      引用:
      • 确保整个a w k命令用单引号括起来。
      • 确保命令内所有引号成对出现。
      • 确保用花括号括起动作语句,用圆括号括起条件语句。
      • 可能忘记使用花括号,也许你认为没有必要,但a w k不这样认为,将按之解释语法
      。
      如果查询文件不存在,将得到下述错误信息:
      代码:
      $ awk ’END {print NR}’ grades.txt
      awk: cmd. line:2: fatal: cannot open file `grades.txt’ for reading (没有那个文件或目录)
      9.awk 键盘输入
      如果在命令行并没有输入文件g r a d e . t x t,将会怎样?
      代码:
      $ awk ’BEGIN {print "Name/n--------"}{print } END ’
      Name
      --------
       B E G I N部分打印了文件头,但a w k最终停止操作并等待,并没有返回s h e l l提示符。这是因为a w k期望获得键盘输入。因为没有给出输入文件, a w k假定下面将会给出。如果愿意,顺序输入相关文本,并在输入完成后敲<Ct r l - D >键。如果敲入了正确的域分隔符, a w k会像第一个例子一样正常处理文本。这种处理并不常用,因为它大多应用于大量的打印稿。
      2.3awk中正则表达式及其操作
      在g r e p一章中,有许多例子用到正则表达式,这里将不使用同样的例子,但可以使用条件操作讲述a w k中正则表达式的用法。
      这里正则表达式用斜线括起来。例如,在文本文件中查询字符串G r e e n,使用/ G r e e n /可以查出单词G r e e n的出现情况。
      2.4元字符
      这里是a w k中正则表达式匹配操作中经常用到的字符,详细情况请参阅本书第7章正则表达式概述。
      代码:
      / ^ $ . [] | () * + ?
      这里有两个字符第7章没有讲到,因为它们只适用于a w k而不适用于g r e p或s e d。它们是:
      引用:
      + 使用+匹配一个或多个字符。
      ? 匹配模式出现频率。例如使用/X Y?Z/匹配X Y Z或Y Z。


    awk条件操作符

    awk内置变量

    awk操作符

    内置的字符串函数

    ==========================================================

    awk条件操作符

    操作符描述
    < 小于
    > = 大于等于
    < = 小于等于
    == 等于
    != 不等于
    ~ 匹配正则表达式
    !~ 不匹配正则表达式

    1. 匹配
    为使一域号匹配正则表达式,使用符号'~'后紧跟正则表达式,也可以用if语句。awk中if后面的条件用()括起来。
    观 察文件grade.txt,如果只要显示brown腰带级别可知其所在域为field-4,这样可以写出表达式{if(~/Brown/) print}意即如果field-4包含brown,打印它。如果条件满足,则打印匹配记录行。可以编写下面脚本,因为这是一个动作,必须用花括号{}括 起来。

    代码:
    [root@Linux_chenwy sam]# awk '{if(~/Brown/) print }' grade.txt
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansl 05/99 4712 Brown-2 12 30 28

    匹配记录找到时,如果不特别声明,awk缺省打印整条记录。使用if语句开始有点难,但不要着急,因为有许多方法可以跳过它,并仍保持同样结果。下面例子意即如果记录包含模式brown,就打印它:
    代码:
    [root@Linux_chenwy sam]# awk '~/Brown/' grade.txt
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansl 05/99 4712 Brown-2 12 30 28


    2. 精确匹配
    假定要使字符串精确匹配,比如说查看学生序号48,文件中有许多学生序号包含48,如果在field-3中查询序号48,awk将返回所有序号带48的记录:
    代码:
    [root@Linux_chenwy sam]# awk '{if(~/48/) print}' grade.txt
    M.Tans 5/99 48311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 4842 Brown-3 12 26 26


    为精确匹配48,使用等号==,并用单引号括起条件。例如=="48"
    代码:
    [root@Linux_chenwy sam]# awk '=="48"' grade.txt
    P.Bunny 02/99 48 Yellow 12 35 28
    [root@Linux_chenwy sam]# awk '{if(=="48") print}' grade.txt
    P.Bunny 02/99 48 Yellow 12 35 28


    3. 不匹配
    有时要浏览信息并抽取不匹配操作的记录,与~相反的符号是!~,意即不匹配。像原来使用查询brown腰带级别的匹配操作一样,现在看看不匹配情况。表达式!~/Brown/,意即查询不包含模式brown腰带级别的记录并打印它。
    注意,缺省情况下,awk将打印所有匹配记录,因此这里不必加入动作部分。
    代码:
    [root@Linux_chenwy sam]# awk '!~/Brown/' grade.txt
    M.Tans 5/99 48311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26
    P.Bunny 02/99 48 Yellow 12 35 28


    可以只对field-4进行不匹配操作,方法如下:
    代码:
    [root@Linux_chenwy sam]# awk '{if(!~/Brown/) print }' grade.txt
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansl 05/99 4712 Brown-2 12 30 28


    如果只使用命令awk !="brown"{print } grade.txt,将返回错误结果,因为用引号括起了brown,将只匹配‘brown而不匹配brown-2和brown-3,当然,如果想要查询非brown-2的腰带级别,可做如下操作:
    代码:
    [root@Linux_chenwy sam]# awk '!="Brown-2" {print }' grade.txt
    M.Tans 5/99 48311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 4842 Brown-3 12 26 26


    4. 小于
    看看哪些学生可以获得升段机会。测试这一点即判断目前级别分field-6是否小于最高分field-7,在输出结果中,加入这一改动很容易。
    代码:
    [root@Linux_chenwy sam]# awk '{if(<) print }' grade.txt
    M.Tans 5/99 48311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26


    5. 小于等于
    对比小于,小于等于只在操作符上做些小改动,满足此条件的记录也包括上面例子中的输出情况。
    代码:
    [root@Linux_chenwy sam]# awk '{if( <= ) print }' grade.txt
    M.Tans
    J.Lulu
    J.Troll


    6. 大于
    代码:
    [root@Linux_chenwy sam]# awk '{if( > ) print }' grade.txt
    P.Bunny
    L.Tansl


    7. 设置大小写
    为查询大小写信息,可使用[ ]符号。在测试正则表达式时提到可匹配[ ]内任意字符或单词,因此若查询文件中级别为green的所有记录,不论其大小写,表达式应为'/[Gg]reen/'
    代码:
    [root@Linux_chenwy sam]# awk '/[Gg]reen/' grade.txt
    M.Tans 5/99 48311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26


    8. 任意字符
    抽取名字,其记录第一域的第四个字符是a,使用句点.。表达式/^...a/意为行首前三个字符任意,第四个是a,尖角符号代表行首。
    代码:
    [root@Linux_chenwy sam]# awk ' ~ /^...a/' grade.txt
    M.Tans 5/99 48311 Green 8 40 44
    L.Tansl 05/99 4712 Brown-2 12 30 28


    9. 或关系匹配
    为抽取级别为yellow或brown的记录,使用竖线符|。意为匹配|两边模式之一。注意,使用竖线符时,语句必须用圆括号括起来。
    代码:
    [root@Linux_chenwy sam]# awk ' ~/(Yellow|Brown)/' grade.txt
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansl 05/99 4712 Brown-2 12 30 28

    上面例子输出所有级别为Ye l l o w或B r o w n的记录。

    使用这种方法在查询级别为G r e e n或g r e e n时,可以得到与使用[ ]表达式相同的结果。
    代码:
    [root@Linux_chenwy sam]# awk '/^M/' grade.txt
    M.Tans 5/99 48311 Green 8 40 44


    10. 行首
    不必总是使用域号。如果查询文本文件行首包含M的代码,可简单使用下面^符号:
    代码:
    [root@Linux_chenwy sam]# awk '/^M/' grade.txt


    复合表达式即为模式间通过使用下述各表达式互相结合起来的表达式:
    引用:
    && AND : 语句两边必须同时匹配为真。
    || O R:语句两边同时或其中一边匹配为真。
    ! 非求逆


    11. AND
    打印记录,使其名字为‘P.Bunny且级别为Yellow,使用表达式(=="P.Bunny" && =="Yellow" ),意为&&两边匹配均为真。完整命令如下:
    代码:
    [root@Linux_chenwy sam]# awk '{if (=="P.Bunny" && =="Yellow") print }' grade.txt
    P.Bunny 02/99 48 Yellow 12 35 28


    12. Or
    如果查询级别为Yellow或Brown,使用或命令。意为"||"符号两边的匹配模式之一或全部为真。
    代码:
    [root@Linux_chenwy sam]# awk '{if (=="Yellow" || ~/Brown/) print }' grade.txt
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansl 05/99 4712 Brown-2 12 30 28


    原来不一定得加print,下面我自己对例一二做了一下
    代码:
    1
    [root@Linux_chenwy sam]# awk '~/Brown/' grade.txt
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansl 05/99 4712 Brown-2 12 30 28


    代码:
    2
    [root@Linux_chenwy sam]# awk '=="48"' grade.txt
    P.Bunny 02/99 48 Yellow 12 35 28


    代码:
    [root@Linux_chenwy sam]# awk '="48"' grade.txt
    M.Tans 5/99 48 Green 8 40 44
    J.Lulu 06/99 48 green 9 24 26
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 48 Brown-3 12 26 26
    L.Tansl 05/99 48 Brown-2 12 30 28


    2中,我把=和==写错了,呵呵,一个是赋值,一个是等于

    awk内置变量
    awk有许多内置变量用来设置环境信息。这些变量可以被改变。表9-3显示了最常使用的一些变量,并给出其基本含义。

    引用:
    awk内置变量

    ARGC 命令行参数个数
    ARGV 命令行参数排列
    ENVIRON 支持队列中系统环境变量的使用
    FILENAME awk浏览的文件名
    FNR 浏览文件的记录数
    FS 设置输入域分隔符,等价于命令行- F选项
    NF 浏览记录的域个数
    NR 已读的记录数
    OFS 输出域分隔符
    ORS 输出记录分隔符
    RS 控制记录分隔符


    引用:
    A R G C支持命令行中传入a w k脚本的参数个数。A R G V是A R G C的参数排列数组,其中每一元素表示为A R G V [ n ],n为期望访问的命令行参数。

    E N V I R O N 支持系统设置的环境变量,要访问单独变量,使用实际变量名,例如E N V I R O N [“E D I TO R”] =“Vi”。

    F I L E N A M E支持a w k脚本实际操作的输入文件。因为a w k可以同时处理许多文件,因此如果访问了这个变量,将告之系统目前正在浏览的实际文件。

    F N R支持a w k目前操作的记录数。其变量值小于等于N R。如果脚本正在访问许多文件,每一新输入文件都将重新设置此变量。

    F S用来在a w k中设置域分隔符,与命令行中- F选项功能相同。缺省情况下为空格。如果用逗号来作域分隔符,设置F S = ","。

    N F支持记录域个数,在记录被读之后再设置。

    O F S允许指定输出域分隔符,缺省为空格。如果想设置为#,写入O F S = " # "。

    O R S为输出记录分隔符,缺省为新行( / n)。

    R S是记录分隔符,缺省为新行( / n )。



    NF、NR和FILENAME

    要快速查看记录个数,应使用N R。比如说导出一个数据库文件后,如果想快速浏览记录个数,以便对比于其初始状态,查出导出过程中出现的错误。使用N R将打印输入文件的记录个数。print NR放在E N D语法中。
    代码:
    [root@chenwy sam]# awk 'END{print NR}' grade.txt
    5


    如:所有学生记录被打印,并带有其记录号。使用N F变量显示每一条读记录中有多少个域,并在E N D部分打印输入文件名。
    [root@chenwy sam]# awk '{print NF,NR,} END{print FILENAME}' grade.txt
    代码:
    7 1 M.Tans 5/99 48311 Green 8 40 44
    7 2 J.Lulu 06/99 48317 green 9 24 26
    7 3 P.Bunny 02/99 48 Yellow 12 35 28
    7 4 J.Troll 07/99 4842 Brown-3 12 26 26
    7 5 L.Tansl 05/99 4712 Brown-2 12 30 28
    grade.txt


    在从文件中抽取信息时,最好首先检查文件中是否有记录。下面的例子只有在文件中至少有一个记录时才查询B r o w n级别记录。使用A N D复合语句实现这一功能。意即至少存在一个记录后,查询字符串B r o w n,最后打印结果。
    代码:
    [root@chenwy sam]# awk '{if (NR>0 && ~/Brown/)print }' grade.txt
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansl 05/99 4712 Brown-2 12 30 28


    N F的一个强大功能是将变量$ P W D的返回值传入a w k并显示其目录。这里需要指定域分隔符/。
    代码:
    [root@chenwy sam]# echo $PWD | awk -F/ ' {print $NF}'
    sam


    另一个例子是显示文件名。
    代码:
    [root@chenwy sam]# echo "/usr/local/etc/rc.sybase" | awk -F/ '{print $NF}'
    rc.sybase



    如果不指定域分割符,返回的如下:
    代码:

    [root@chenwy sam]# echo $PWD | awk '{print $NF}'
    /usr/sam
    [root@chenwy sam]# echo "/usr/local/etc/rc.sybase" | awk '{print $NF}'
    /usr/local/etc/rc.sybase

    awk操作符
    在a w k中使用操作符,基本表达式可以划分为数字型、字符串型、变量型、域及数组元素,前面已经讲过一些。下面列出其完整列表。

    在表达式中可以使用下述任何一种操作符。

    引用:
    = = *= / = %= ^ = 赋值操作符
    ? 条件表达操作符
    || && ! 并、与、非(上一节已讲到)
    ~!~ 匹配操作符,包括匹配和不匹配
    < <= == != >> 关系操作符
    - * / % ^ 算术操作符
    -- 前缀和后缀


    前面已经讲到了其中几种操作,下面继续讲述未涉及的部分。

    1. 设置输入域到域变量名
    在a w k中,设置有意义的域名是一种好习惯,在进行模式匹配或关系操作时更容易理解。
    一 般的变量名设置方式为n a m e = $ n,这里n a m e为调用的域变量名, n为实际域号。例如设置学生域名为n a m e,级别域名为b e l t,操作为n a m e = $ 1 ; b e l t s = $ 4。注意分号的使用,它分隔a w k命令。下面例子中,重新赋值学生名域为n a m e,级别域为b e l t s。查询级别为Ye l l o w的记录,并最终打印名称和级别。
    代码:
    [sam@chenwy sam]$ awk '{name=;belts=;if(belts ~/Yellow/) print name" is belt "belts}' grade.txt
    P.Bunny is belt Yellow


    2. 域值比较操作
    有两种方式测试一数值域是否小于另一数值域。
    1) 在B E G I N中给变量名赋值。
    2) 在关系操作中使用实际数值。
    通常在B E G I N部分赋值是很有益的,可以在a w k表达式进行改动时减少很多麻烦。
    使用关系操作必须用圆括号括起来。
    下面的例子查询所有比赛中得分在2 7点以下的学生。
    用引号将数字引用起来是可选的,“2 7”、2 7产生同样的结果。
    代码:
    [sam@chenwy sam]$ awk '{if (<) print }' grade.txt
    M.Tans 5/99 48311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26


    第二个例子中给数字赋以变量名B A S E L I N E和在B E G I N部分给变量赋值,两者意义相同。
    代码:
    [sam@chenwy sam]$ awk 'BEGIN {if (


    3. 修改数值域取值
    当在a w k中修改任何域时,重要的一点是要记住实际输入文件是不可修改的,修改的只是保存在缓存里的a w k复本。a w k会在变量N R或N F变量中反映出修改痕迹。
    为修改数值域,简单的给域标识重赋新值,如: $ 1 = $ 1 5,会将域1数值加5,但要确保赋值域其子集为数值型。
    修改M . Ta n s l e y的目前级别分域,使其数值从4 0减为3 9,使用赋值语句$ 6 = $ 6 - 1,当然在实施修改前首先要匹配域名。
    代码:
    [sam@chenwy sam]$ awk '{if(=="M.Tans") ;print ,,}' grade.txt
    M.Tans 39 44
    J.Lulu 24 26
    P.Bunny 35 28
    J.Troll 26 26
    L.Tansl 30 28

    代码:
    [sam@chenwy sam]$ awk '{if(=="M.Tans") {=-1;print ,,}}' grade.txt
    M.Tans 39 44


    4. 修改文本域
    修 改文本域即对其重新赋值。需要做的就是赋给一个新的字符串。在J . Tr o l l中加入字母,使其成为J . L . Tr o l l,表达式为$ 1 = " J . L . Tr o l l ",记住字符串要使用双秒号( " "),并用圆括号括起整个语法。
    代码:
    [sam@chenwy sam]$ awk '{if(=="J.Troll") ="J.L.Troll"; print }' grade.txt
    M.Tans
    J.Lulu
    P.Bunny
    J.L.Troll
    L.Tansl


    5. 只显示修改记录
    上 述例子均是对一个小文件的域进行修改,因此打印出所有记录查看修改部分不成问题,但如果文件很大,记录甚至超过1 0 0,打印所有记录只为查看修改部分显然不合情理。在模式后面使用花括号将只打印修改部分。取得模式,再根据模式结果实施操作,可能有些抽象,现举一例,只 打印修改部分。注意花括号的位置。
    代码:
    [sam@chenwy sam]$ awk '{if(=="J.Troll") {="J.L.Troll"; print }}' grade.txt
    J.L.Troll

    不知道为什么,我这里多了一个空行?

    6. 创建新的输出域
    在a w k中处理数据时,基于各域进行计算时创建新域是一种好习惯。创建新域要通过其他域赋予新域标识符。如创建一个基于其他域的加法新域{ $ 4 = $ 2 $ 3 },这里假定记录包含3个域,则域4为新建域,保存域2和域3相加结果。
    在 文件g r a d e . t x t中创建新域8保存域目前级别分与域最高级别分的减法值。表达式为‘{ $ 8 = $ 7 - $ 6 }’,语法首先测试域目前级别分小于域最高级别分。新域因此只打印其值大于零的学生名称及其新域值。在B E G I N部分加入t a b键以对齐报告头。
    代码:
    [sam@chenwy sam]$ awk 'BEGIN{print "Name/tDifference"}{if(<) {=-;print ,}}' grade.txt
    Name Difference
    M.Tans 4
    J.Lulu 2


    当然可以创建新域,并赋给其更有意义的变量名。例如:
    代码:
    [sam@chenwy sam]$ awk 'BEGIN{print "Name/tDifference"}{if(<) {diff=-;print ,diff}}' grade.txt
    Name Difference
    M.Tans 4
    J.Lulu 2


    7. 增加列值
    为 增加列数或进行运行结果统计,使用符号 =。增加的结果赋给符号左边变量值,增加到变量的域在符号右边。例如将$ 1加入变量t o t a l,表达式为t o t a l = $ 1。列值增加很有用。许多文件都要求统计总数,但输出其统计结果十分繁琐。在a w k中这很简单,请看下面的例子。
    将所有学生的‘目前级别分’加在一起,方法是t o t = $ 6,t o t即为a w k浏览的整个文件的域6结果总和。所有记录读完后,在E N D部分加入一些提示信息及域6总和。不必在a w k中显示说明打印所有记录,每一个操作匹配时,这是缺省动作。
    代码:
    [sam@chenwy sam]$ awk '(tot =); END{print "Club student total points :" tot}'
    grade.txt
    M.Tans 5/99 48311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansl 05/99 4712 Brown-2 12 30 28
    Club student total points :155


    如果文件很大,你只想打印结果部分而不是所有记录,在语句的外面加上圆括号()即可。
    代码:
    [sam@chenwy sam]$ awk '; END{print "Club student total points :" tot}' grade.txt
    Club student total points :155


    8. 文件长度相加
    在目录中查看文件时,如果想快速查看所有文件的长度及其总和,但要排除子目录,使用ls -l命令,然后管道输出到a w k,a w k首先剔除首字符为d(使用正则表达式)的记录,然后将文件长度列相加,并输出每一文件长度及在E N D部分输出所有文件的长度。
    本例中,首先用ls -l命令查看一下文件属性。注意第二个文件属性首字符为d,说明它是一个目录,文件长度是第5列,文件名是第9列。如果系统不是这样排列文件名及其长度,应适时加以改变。
    下面的正则表达式表明必须匹配行首,并排除字符d,表达式为^ [ ^ d ]。
    使用此模式打印文件名及其长度,然后将各长度相加放入变量t o t中。
    代码:

    [sam@chenwy sam]$ ls -l | awk '/^[^d]/ {print "/t"} END {print "total KB:" tot}'
    ...................
    total KB:174144

    内置的字符串函数

    代码:
    awk内置字符串函数
    g s u b ( r, s ) 在整个$ 0中用s替代r
    g s u b ( r, s , t ) 在整个t中用s替代r
    i n d e x ( s , t ) 返回s中字符串t的第一位置
    l e n g t h ( s ) 返回s长度
    m a t c h ( s , r ) 测试s是否包含匹配r的字符串
    s p l i t ( s , a , f s ) 在f s上将s分成序列a
    s p r i n t ( f m t , e x p ) 返回经f m t格式化后的e x p
    s u b ( r, s ) 用$ 0中最左边最长的子串代替s
    s u b s t r ( s , p ) 返回字符串s中从p开始的后缀部分
    s u b s t r ( s , p , n ) 返回字符串s中从p开始长度为n的后缀部分


    g s u b函数有点类似于s e d查找和替换。它允许替换一个字符串或字符为另一个字符串或字符,并以正则表达式的形式执行。第一个函数作用于记录$ 0,第二个g s u b函数允许指定目标,然而,如果未指定目标,缺省为$ 0。
    i n d e x(s,t)函数返回目标字符串s中查询字符串t的首位置。l e n g t h函数返回字符串s字符长度。
    m a t c h函数测试字符串s是否包含一个正则表达式r定义的匹配。s p l i t使用域分隔符f s将字符串s划分为指定序列a。
    s p r i n t函数类似于p r i n t f函数(以后涉及),返回基本输出格式f m t的结果字符串e x p。
    s u b(r,s)函数将用s替代$ 0中最左边最长的子串,该子串被( r)匹配。
    s u b(s,p)返回字符串s在位置p后的后缀。s u b s t r(s,p,n)同上,并指定子串长度为n。
    现在看一看a w k中这些字符串函数的功能。

    1. gsub
    要在整个记录中替换一个字符串为另一个,使用正则表达式格式, /目标模式/,替换模式/。例如改变学生序号4 8 4 2到4 8 9 9:
    代码:
    [root@Linux_chenwy root]# cd /usr/sam
    [root@Linux_chenwy sam]# awk 'gsub(/4842/,4899){print }' grade.txt
    J.Troll 07/99 4899 Brown-3 12 26 26

    代码:
    [root@Linux_chenwy sam]# awk 'gsub(/4842/,4899)' grade.txt
    J.Troll 07/99 4899 Brown-3 12 26 26


    2. index
    查询字符串s中t出现的第一位置。必须用双引号将字符串括起来。例如返回目标字符串B u n n y中n y出现的第一位置,即字符个数。
    代码:
    [root@Linux_chenwy sam]# awk 'BEGIN {print index("Bunny","ny")}' grade.txt
    4


    3. length
    返回所需字符串长度,例如检验字符串J . Tr o l l返回名字及其长度,即人名构成的字符个数
    代码:
    [root@Linux_chenwy sam]# awk '=="J.Troll" {print length()" "}' grade.txt
    7 J.Troll


    还有一种方法,这里字符串加双引号。
    代码:
    [root@Linux_chenwy sam]# awk 'BEGIN{print length("A FEW GOOD MEN")}'
    14


    4. match
    m a t c h测试目标字符串是否包含查找字符的一部分。可以对查找部分使用正则表达式,返回值为成功出现的字符排列数。如果未找到,返回0,第一个例子在A N C D中查找d。因其不存在,所以返回0。第二个例子在A N C D中查找D。因其存在,所以返回A N C D中D出现的首位置字符数。第三个例子在学生J . L u l u中查找u。
    代码:
    [root@Linux_chenwy sam]# awk 'BEGIN{print match("ANCD",/d/)}'
    0
    [root@Linux_chenwy sam]# awk 'BEGIN{print match("ANCD",/D/)}'
    4
    [root@Linux_chenwy sam]# awk '=="J.Lulu" {print match(,"u")}' grade.txt
    4


    5. split
    使 用s p l i t返回字符串数组元素个数。工作方式如下:如果有一字符串,包含一指定分隔符- ,例如A D2 - K P 9 - J U 2 - L P - 1,将之划分成一个数组。使用s p l i t,指定分隔符及数组名。此例中,命令格式为( " A D 2 - K P 9 - J U 2 - L P - 1 ",p a r t s _ a r r a y," - "),s p l i t然后返回数组下标数,这里结果为4。
    代码:
    [root@Linux_chenwy sam]# awk 'BEGIN {print split("123-456-789",pats_array,"-")}'3


    还有一个例子使用不同的分隔符。
    代码:
    [root@Linux_chenwy sam]# awk 'BEGIN {print split("123#456#789",myarray,"#")}' 3

    这个例子中,s p l i t返回数组m y a r r a y的下标数。数组m y a r r a y取值如下:
    代码:
    myarray[1]=123
    myarray[2]=456
    myarray[3]=789

    结尾部分讲述数组概念。

    6. sub
    使 用s u b发现并替换模式的第一次出现位置。字符串S T R包含‘poped popo pill’,执行下列s u b命令s u b(/ o p /," o p ",S T R)。模式o p第一次出现时,进行替换操作,返回结果如下:‘pO Ped pope pill’。

    如: 学生J . Tr o l l的记录有两个值一样,“目前级别分”与“最高级别分”。只改变第一个为2 9,第二个仍为2 4不动,操作命令为s u b(/ 2 6 /," 2 9 ",$ 0),只替换第一个出现2 4的位置。注意J . Tr o l l记录需存在。
    代码:
    [root@Linux_chenwy sam]# awk '=="J.Troll" sub(/26/,"29",)' grade.txt
    M.Tans 5/99 48311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 29
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 4842 Brown-3 12 29 26
    L.Tansl 05/99 4712 Brown-2 12 30 28


    7. substr
    s u b s t r是一个很有用的函数。它按照起始位置及长度返回字符串的一部分。例子如下:
    代码:
    [root@Linux_chenwy sam]# awk '=="L.Tansl" {print substr(,1,3)}' grade.txt
    L.T

    上面例子中,指定在域1的第一个字符开始,返回其前面5个字符。

    如果给定长度值远大于字符串长度, a w k将从起始位置返回所有字符,要抽取L Ta n s l - e y的姓,只需从第3个字符开始返回长度为7。可以输入长度9 9,a w k返回结果相同。
    代码:
    [root@Linux_chenwy sam]# awk '=="L.Tansl" {print substr(,1,99)}' grade.txt
    L.Tansl


    s u b s t r的另一种形式是返回字符串后缀或指定位置后面字符。这里需要给出指定字符串及其返回字串的起始位置。例如,从文本文件中抽取姓氏,需操作域1,并从第三个字符开始:
    代码:
    [root@Linux_chenwy sam]# awk '{print substr(,3)}' grade.txt
    Tans
    Lulu
    Bunny
    Troll
    Tansl


    还有一个例子,在B E G I N部分定义字符串,在E N D部分返回从第t个字符开始抽取的子串。
    代码:
    [root@Linux_chenwy sam]# awk 'BEGIN{STR="A FEW GOOD MEN"}END{print substr(STR,7)}' grade.txt
    GOOD MEN


    8. 从s h e l l中向a w k传入字符串
    a w k脚本大多只有一行,其中很少是字符串表示的。大多要求在一行内完成a w k脚本,这一点通过将变量传入a w k命令行会变得很容易。现就其基本原理讲
    述一些例子。
    使用管道将字符串s t a n d - b y传入a w k,返回其长度。
    代码:
    [root@Linux_chenwy sam]# echo "Stand-by" | awk '{print length()}'
    8


    设置文件名为一变量,管道输出到a w k,返回不带扩展名的文件名。
    代码:
    [root@Linux_chenwy sam]# STR="mydoc.txt"
    [root@Linux_chenwy sam]# echo $STR|awk '{print substr($STR,1,5)}'
    mydoc


    设置文件名为一变量,管道输出到a w k,只返回其扩展名。
    代码:
    [root@Linux_chenwy sam]# STR="mydoc.txt"
    [root@Linux_chenwy sam]# echo $STR|awk '{print substr($STR,7)}'
    txt


    字符串屏蔽序列

    1. 字符转换

    2. 格式化输出

    3.向一行a w k命令传值

    4. awk脚本文件

    5. 在awk中使用FS变量

    6. 向awk脚本传值

    =================================

    字符串屏蔽序列

    使用字符串或正则表达式时,有时需要在输出中加入一新行或查询一元字符。
    打印一新行时,(新行为字符/ n),给出其屏蔽序列,以不失其特殊含义,用法为在字符串前加入反斜线。例如使用/ n强迫打印一新行。
    如果使用正则表达式,查询花括号( { }),在字符前加反斜线,如/ / { /,将在a w k中失掉其特殊含义。

    代码:
    awk中使用的屏蔽序列
    / b 退格键
    / t t a b键
    / f 走纸换页
    / d d d 八进制值
    / n 新行
    / c 任意其他特殊字符,例如/ /为反斜线符号
    / r 回车键


    使用上述符号,打印May Day,中间夹t a b键,后跟两个新行,再打印May Day,但这次使用八进制数1 0 4、1 4 1、1 7 1、分别代表D、a、y。
    代码:
    [root@chenwy sam]# awk 'BEGIN '

    May     Day

    May     Day

    注意,/ 1 0 4为D的八进制A S C I I码,/ 1 4 1为a的八进制A S C I I码,等等。

    awk输出函数printf
    目前为止,所有例子的输出都是直接到屏幕,除了t a b键以外没有任何格式。a w k提供函数p r i n t f,拥有几种不同的格式化输出功能。例如按列输出、左对齐或右对齐方式。
    每一种p r i n t f函数(格式控制字符)都以一个%符号开始,以一个决定转换的字符结束.转换包含三种修饰符。
    p r i n t f函数基本语法是p r i n t f([格式控制符],参数),格式控制字符通常在引号里。

    printf修饰符
    代码:
    - 左对齐
    Wi d t h 域的步长,用0表示0步长
    . p r e c 最大字符串长度,或小数点右边的位数
    表9-7 awk printf格式
    % c A S C I I字符
    % d 整数
    % e 浮点数,科学记数法
    % f 浮点数,例如(1 2 3 . 4 4)
    % g a w k决定使用哪种浮点数转换e或者f
    % o 八进制数
    % s 字符串
    % x 十六进制数
    1. 字符转换
    观察A S C I I码中6 5的等价值。管道输出6 5到a w k。p r i n t f进行A S C I I码字符转换。这里也加入换行,因为缺省情况下p r i n t f不做换行动作。
    代码:
    A[sam@chenwy sam]$ echo "65" | awk '{printf "%c/n",}'
    A


    按同样方式使用a w k得到同样结果。
    代码:
    [sam@chenwy sam]$ awk 'BEGIN{printf "%c/n",65}'
    A


    所有的字符转换都是一样的,下面的例子表示进行浮点数转换后‘ 9 9 9’的输出结果。整数传入后被加了六个小数点。
    代码:
    [sam@chenwy sam]$ awk 'BEGIN{printf "%f/n",999}'
    999.000000


    2. 格式化输出
    打印所有的学生名字和序列号,要求名字左对齐, 1 5个字符长度,后跟序列号。注意/ n换行符放在最后一个指示符后面。输出将自动分成两列。
    代码:
    [root@chenwy sam]# awk '{printf "%-15s %s/n",,}' grade.txt
    M.Tans          48311
    J.Lulu          48317
    P.Bunny         48
    J.Troll         4842
    L.Tansl         4712


    加入一些文本注释帮助理解报文含义。可在正文前嵌入头信息。注意这里使用p r i n t加入头信息。如果愿意,也可使用p r i n t f。
    代码:
    [root@chenwy sam]# awk 'BEGIN{print "Name/t/tS.Number"}{printf "%-15s %s/n",,}' grade.txt
    Name            S.Number
    M.Tans          48311
    J.Lulu          48317
    P.Bunny         48
    J.Troll         4842
    L.Tansl         4712


    3.向一行a w k命令传值
    在查看a w k脚本前,先来查看怎样在a w k命令行中传递变量。
    在a w k执行前将值传入a w k变量,需要将变量放在命令行中,格式如下:
    代码:
    awk 命令变量=输入文件值

    (后面会讲到怎样传递变量到a w k脚本中)。
    下面的例子在命令行中设置变量A G E等于1 0,然后传入a w k中,查询年龄在1 0岁以下的所有学生。
    代码:
    [root@chenwy sam]# awk '{if (


    要 快速查看文件系统空间容量,观察其是否达到一定水平,可使用下面a w k一行脚本。因为要监视的已使用空间容量不断在变化,可以在命令行指定一个触发值。首先用管道命令将df -k 传入a w k,然后抽出第4列,即剩余可利用空间容量。使用$ 4 ~ / ^ [ 0 - 9 ] /取得容量数值(1 0 2 4块)而不是d f的文件头,然后对命令行与‘ i f ( $ 4 < T R I G G E R )’上变量T R I G G E R中指定
    的值进行查询测试。
    代码:
    [root@chenwy sam]# df -k|awk '{if(


    代码:
    [root@chenwy sam]# df -k|awk '(~/^[0-9]/) {if(


    (~/^[0-9]/)好像没什么用

    在系统中使用df -k命令,产生下列信息:
    代码:
    [root@chenwy sam]# df -k
    文件系统               1K-块        已用     可用 已用% 挂载点
    /dev/sda2              5162828   2289804   2610764  47% /
    /dev/sda1               497829     13538    458589   3% /boot
    none                     99352         0     99352   0% /dev/shm


    如果系统中d f输出格式不同,必须相应改变列号以适应工作系统。
    当然可以使用管道将值传入a w k。本例使用w h o命令, w h o命令第一列包含注册用户名,这里打印注册用户,并加入一定信息。
    代码:
    [sam@chenwy sam]$ who |awk '{print " is logged on"}'
    root is logged on
    root is logged on
    [sam@chenwy sam]$ who
    root     :0           Nov 23 20:17
    root     pts/0        Nov 23 20:25 (:0.0)


    a w k也允许传入环境变量。下面的例子使用环境变量HOME支持当前用户目录。可从pwd命令管道输出到a w k中获得相应信息。
    代码:
    [sam@chenwy sam]$ pwd | awk '{if (==derr) print }' derr=$HOME
    /usr/sam



    4. awk脚本文件
    可以将a w k脚本写入一个文件再执行它。命令不必很长(尽管这是写入一个脚本文件的主要原因),甚至可以接受一行命令。这样可以保存a w k命令,以使不必每次使用时都需要重新输入。使用文件的另一个好处是可以增加注释,以便于理解脚本的真正用途和功能。
    使 用前面的几个例子,将之转换成a w k可执行文件。像原来做的一样,将学生目前级别分相加awk ‘(t o t + = $ 6) END{print "club student total points:" t o t }’ g r a d e . t x t。
    创建新文件s t u d e n t _ t o t . a w k,给所有a w k程序加入a w k扩展名是一种好习惯,这样通过查看文件名就知道这是一个a w k程序。文本如下:

    代码:
    [sam@chenwy sam]$ cat student_tot.awk
    #!/bin/awk -f
    #all commnet lines must start with a hash '#'
    #name:students_tots.awk
    #to call:student_tot.awk grade.txt
    #prints total and average of club student points

    #print a header first
    BEGIN{
    print "Student  Date  Member  No.  Grade Age  Points Max"
    print "Name     Joined                        Gained  Point Available"
    print "=============================================================="
    }
    #let's add the scores of points gained
    (tot+=)

    #finished proessing now let's print the total and average point
    END{
    print "Club student total points :" tot
    print "Average Club Student Points:" tot/NR}


    通过将命令分开,脚本可读性提高,还可以在命令之间加入注释。这里加入头
    信息和结尾的平均值。基本上这是一个一行脚本文件。
    执行时,在脚本文件后键入输入文件名,但是首先要对脚本文件加入可执行权限。
    代码:
    [sam@chenwy sam]$ chmod u+x student_tot.awk
    [sam@chenwy sam]$./student_tot.awk grade.txt
    Student  Date  Member  No.  Grade Age  Points Max
    Name     Joined                        Gained  Point Available
    ==============================================================
    M.Tans 5/99 48311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26
    P.Bunny 02/99 48 Yellow 12 35 28
    J.Troll 07/99 4842 Brown-3 12 26 26
    L.Tansl 05/99 4712 Brown-2 12 30 28
    Club student total points :155
    Average Club Student Points:31


    过滤相同行:
    如有一个文件strip中有多条重复错误提法:
    代码:
    [sam@Linux_chenwy sam]$ cat strip
    etreiytrpytyu
    ERROR*
    ERROR*
    ERROR*
    ERROR*
    IUEWROPYJRTMELUYK
    ERROR*
    ERROR*
    ERROR*
    ERROR*
    ERROR*
    ERROR*
    EWUTIRWJYHT
    ERROR*
    ERROR*
    JGIOERYO56ERU
    ERROR*
    ERROR*
    ERROR*
    JGEORYKP65EKU;YK,


    现在用a w k脚本过滤出错误行的出现频率,使得每一个失败记录只对应一个错误行。awk脚本如下:
    代码:
    [sam@Linux_chenwy sam]$ cat error_strip.awk
    #!/bin/awk -f
    #error_strip.awk
    #to call:error_strip.awk
    #strips out the ERROR* lines if there are more than one
    #ERROR* lines after each failed record.

    BEGIN
    #tell awk the whole is "ERROR*"
    {if (=="ERROR*" && error_line=="ERROR*")

    #go to next line
    next;
    error_line=;print}


    执行结果如下:
    代码:

    [sam@Linux_chenwy sam]$ ./error_strip.awk strip
    etreiytrpytyu
    ERROR*
    IUEWROPYJRTMELUYK
    ERROR*
    EWUTIRWJYHT
    ERROR*
    JGIOERYO56ERU
    ERROR*
    JGEORYKP65EKU;YK,

    5. 在a w k中使用F S变量
    如果使用非空格符做域分隔符( F S)浏览文件,例如# 或:,编写这样的一行命令很容易,因为使用F S选项可以在命令行中指定域分隔符。

    代码:
    $awk -F: '{print }' inputfile


    使用a w k脚本时,记住设置F S变量是在B E G I N部分。如果不这样做, a w k将会发生混淆,不知道域分隔符是什么。
    下述脚本指定F S变量。脚本从/ e t c / p a s s w d文件中抽取第1和第5域,通过分号“;”分隔p a s s w d文件域。第1域是帐号名,第5域是帐号所有者。
    我举的例子是第七个域:

    代码:
    [sam@Linux_chenwy sam]$ awk -F: '{print ,"/t",}' passwd
    root     /bin/bash
    bin      /sbin/nologin
    daemon   /sbin/nologin
    adm      /sbin/nologin
    lp       /sbin/nologin
    sync     /bin/sync
    .................................

    这是不用脚本的,后面的结果省略

    现使用脚本如下:
    代码:
    [sam@Linux_chenwy sam]$ cat passwd.awk
    #!/bin/awk -f
    #to call:passwd.awk /etc/passwd
    #print out the first and seventh fields
    BEGIN{
    FS=":"}
    {print ,"/t",}


    结果如下:
    代码:
    [sam@Linux_chenwy sam]$ chmod u+x passwd.awk
    [sam@Linux_chenwy sam]$ ./passwd.awk passwd
    root     /bin/bash
    bin      /sbin/nologin
    daemon   /sbin/nologin
    adm      /sbin/nologin
    lp       /sbin/nologin
    sync     /bin/sync
    .......................................



    6. 向a w k脚本传值
    向a w k脚本传值与向a w k一行命令传值方式大体相同,格式为:
    代码:
    awk script_file var=value input_file


    下述脚本对比检查文件中域号和指定数字。这里使用了N F变量M A X,表示指定检查的域号,使用双引号将域分隔符括起来,即使它是一个空格。
    脚本如下:
    代码:
    [sam@Linux_chenwy sam]$ cat fieldcheck.awk
    #!/bin/awk -f
    #check on how many fields in a file
    #name:fieldcheck.awk
    #to call:fieldcheck MAX=n FS= filename
    #
    NF!=MAX{
    print("line" NR " does not have " MAX "fields")}

    如果NF中的值不等于最大MAX值,则打印出"哪一行的域总数不是max"

    如果以/ e t c / p a s s w d作输入文件(p a s s w d文件有7个域),运行上述脚本。参数格式如下:
    代码:
    [sam@Linux_chenwy sam]$ chmod u+x fieldcheck.awk
    [sam@Linux_chenwy sam]$ ./fieldcheck.awk MAX=7 FS=":" passwd

    正好7个域,如果改成6,就会显示不同结果,试试看?

    使用前面一行脚本的例子,将之转换成a w k脚本如下:
    代码:
    [sam@Linux_chenwy sam]$ cat name.awk
    #!/bin/awk -f
    #name:age.awk
    #to call:age.awk AGE=n grade.txt
    #print ages that are lower than the age supplied on the comand line
    {if (


    文本包括了比实际命令更多的信息,没关系,仔细研读文本后,就可以精确知道其功能及如何调用它。
    不要忘了增加脚本的可执行权限,然后将变量和赋值放在命令行脚本名字后、输入文件前执行。
    代码:
    [sam@Linux_chenwy sam]$ chmod u+x name.awk
    [sam@Linux_chenwy sam]$ ./name.awk AGE=10 grade.txt
    M.Tans 5/99 48311 Green 8 40 44
    J.Lulu 06/99 48317 green 9 24 26


    同样可以使用前面提到的管道命令传值,下述a w k脚本从d u命令获得输入,并输出块和字节数。
    代码:
    [root@Linux_chenwy sam]# cat duawk.awk
    #!/bin/awk -f
    #to call:du|duawk.awk
    #prints file/direc's in bytes and blocks
    BEGIN{
    OFS="/t";
    print "name" "/t/t","bytes","blocks/n"
    print "==============================="}
    {print ,"/t/t",*512,}


    使用du的结果如下
    代码:
    [root@Linux_chenwy sam]# du
    12      ./.kde/Autostart
    16      ./.kde
    8       ./.xemacs
    4       ./sam
    4       ./dir1
    4       ./file6
    184     .


    执行:
    代码:
    [root@Linux_chenwy sam]# du | ./duawk.awk
    name                    bytes   blocks

    ===============================
    ./.kde/Autostart                                6144    12
    ./.kde                          8192    16
    ./.xemacs                               4096    8
    ./sam                           2048    4
    ./dir1                          2048    4
    ./file6                         2048    4
    .                               94208   184


    代码:

    OFS="/t";

    数组
    前面讲述s p l i t函数时,提到怎样使用它将元素划分进一个数组。这里还有一个例子:

    代码:
    [sam@Linux_chenwy sam]$ awk 'BEGIN {print split("123#456#789",myarray,"#")}'
    3

    实际上m y a r r a y数组为
    代码:
    Myarray[1]="123"
    Myarray[2]="456"
    Myarray[3]="789"


    数组使用前,不必定义,也不必指定数组元素个数。经常使用循环来访问数组。下面是一种循环类型的基本结构:
    代码:
    For (element in array ) print array[element]


    对于记录“ 1 2 3 # 4 5 6 # 6 7 8”,先使用s p l i t函数划分它,再使用循环打印各数组元素。操作脚本如下:
    代码:
    [sam@Linux_chenwy sam]$ cat arraytest.awk
    #!/bin/awk -f
    #name:arraytest.awk
    #prints out an array
    BEGIN{
    record="123#456#789";
    split(record,myarray,"#")}
    END{for (i in myarray) {print myarray[i]}}


    要运行脚本,使用/ d e v / n u l l作为输入文件。
    代码:
    sam@Linux_chenwy sam]$chmod u+x arraytest.awk
    [sam@Linux_chenwy sam]$ ./arraytest.awk /dev/null
    123
    456
    789
    [sam@Linux_chenwy sam]$



    数组和记录
    上面的例子讲述怎样通过s p l i t函数使用数组。也可以预先定义数组,并使用它与域进行比较测试,下面的例子中将使用更多的数组。
    下面是从空手道数据库卸载的一部分数据,包含了学生级别及是否是成人或未成年人的信息,有两个域,分隔符为( #),文件如下:
    代码:
    [sam@Linux_chenwy sam]$ cat grade_student.txt
    Yellow#Junior
    Orange#Senior
    Yellor#Junior
    Purple#Junior
    Brown-2#Junior
    White#Senior
    Orange#Senior
    Red#Junior
    Red#Junior
    Brown-2#Senior
    Yellow#Senior
    Red#Junior
    Blue#Senior
    Green#Senior
    Purple#Junior
    White#Junior


    脚本功能是读文件并输出下列信息。
    1) 俱乐部中Ye l l o w、O r a n g e和R e d级别的人各是多少。
    2 ) 俱乐部中有多少成年人和未成年人。
    查看文件,也许2 0秒内就会猜出答案,但是如果记录超过6 0个又怎么办呢?这不会很容易就看出来,必须使用a w k脚本。
    首先看看a w k脚本,然后做进一步讲解。

    代码:
    [sam@Linux_chenwy sam]$ cat belts.awk
    #!/bin/awk -f
    #name:belts.awk
    #to call:belts.awk grade2.txt
    #loops through the grade2.txt file and counts how many
    #belts we have in (yellow,orange,red)
    #also count how many adults and juniors we have
    #
    #start of BEGIN
    #set FS and load the arrays with our values

    #B E G I N部分设置F S为符号#,即域分隔符

    BEGIN{FS="#"

    #Load the belt colours we are interested in only
    #因为要查找Ye l l o w、O r a n g e和R e d三个级别。
    #然后在脚本中手工建立数组下标对学生做同样的操作。
    #注意,脚本到此只有下标或元素,并没有给数组名本身加任何注释。

    belt["Yellow"]
    belt["Orange"]
    belt["Red"]
    #end of BEGIN
    #load the student type
    student["Junior"]
    student["Senior"]
    }

    ##初始化完成后, B E G I N部分结束。记住B E G I N部分并没有文件处理操作。

    #loop thru array that holds the belt colours against field-1
    #if we have a match,keep a running total

    #现在可以处理文件了。
    #首先给数组命名为c o l o r,使用循环语句测试域1级别列是否
    #等于数组元素之一(Ye l l o w、O r a n g e或R e d),
    #如果匹配,依照匹配元素将运行总数保存进数组。

    {for (colour in belt)
    {if(==colour)
    belt[colour]++}}

    #loop thru array that holds the student type against
    #field-2 if we have a match,keep a runing total

    #同样处理数组‘ S e n i o r _ o r _ j u n i o r’,
    #浏览域2时匹配操作满足,运行总数存入j u n i o r或s e n i o r的匹配数组元素。

    {for (senior_or_junior in student)
    {if (==senior_or_junior)
    student[senior_or_junior]++}}

    #finished processing so print out the matches..for each array

    #E N D部分打印浏览结果,对每一个数组使用循环语句并打印它。

    END{for (colour in belt )print "The club has ",belt[colour],colour,"Belts"

    #注意在打印语句末尾有一个/符号,用来通知a w k(或相关脚本)命令持续到下一行,
    #当输入一个很长的命令,并且想分行输入时可使用这种方法。

    for (senior_or_junior in student) print "The club has ",/
    student[senior_or_junior],senior_or_junior,"student"}


    运行脚本前记住要加入可执行权限

    代码:
    [sam@Linux_chenwy sam]$ chmod u+x belts.awk
    [sam@Linux_chenwy sam]$ ./belts.awk grade_student.txt
    The club has  3 Red Belts
    The club has  2 Orange Belts
    The club has  2 Yellow Belts
    The club has  7 Senior student
    The club has  9 Junior student
     
    展开全文
  • 1、英文单词直接间距太大 (1)全选,右击鼠标,选“段落”...2、文本中嵌入公式导致行距太大 在段落中间距栏去掉勾选“如果定义了文档网格,则对齐网格” 3.单栏,双栏转换问题 直接点击,页面布局--分栏,即...

    1、英文单词直接间距太大

    (1)全选,右击鼠标,选“段落”——“中文版式”,勾选“允许西文在单词中间换行”。
             如果不勾选此项,可目测换行位置,按住Shift打回车,手动换行。

    (2)选择左对齐,然后用“-“”连接被分割的单词

    2、文本中嵌入公式导致行距太大

    在段落中间距栏去掉勾选“如果定义了文档网格,则对齐网格”

    3.单栏,双栏转换问题

    直接点击,页面布局--分栏,即可选择单双栏。

    有时候会出现单双栏格式混淆,文字顺序出错,这时通过大纲视图,便可观察分栏情况,通常双栏中出现单排部分会以分节符为界线,可通过删除分节符,来删除不必要的单排。


     

    展开全文
  • UEditor是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。 本文以最新版本的1.4.3.3版本为教程来讲述 具体文档...
  • UILabel&UITextView文本嵌入图片处理

    千次阅读 2016-12-13 15:10:09
    用 NSAttributedString 在文字行中加入圖片 NSTextAttachment 的使用 Core Text 入门 UITextView 转载自 UITextView编辑时插入自定义表情-简单的图文混编 前言 在iOS开发中,经常需要用...
  • 文本处理

    千次阅读 2020-10-23 09:12:16
    所有类 Unix 的操作系统都非常依赖于被用于几种数据类型存储的文本文件。所以这很有道理, 有许多用于处理文本的工具。在这一章,我们将看一些被用来“切割”文本的程序。... paste – 合并文件文本行
  • 文本特征提取_02:Word2Vec词嵌入矩阵

    万次阅读 2017-01-20 14:57:36
    在之前的许多项目与业务,这是选择的最优方法,对于那些建立基于文本的机器学习模型的时候,我们都会先用TF-IDF提取文档的特征,将文档变成一个词向量的形式,然后再进行模型的学习与训练。 这一章,我要讲一个...
  • 最近接到一个给某私立贵族(小,初,高 12年只是学费近200W)学校...但是文章编辑这块需要文本编辑器的基本功能,那就只能用富文本编辑器了。再加上本菜鸡喜欢用CI框架,所以需要把富文本编辑器和框架相结合,以下内容以
  • grep在一个或多个输入文本中搜索与给定模式匹配的。并将每条匹配的写入标准的输出。如果未至定文件,则grep将从标准输入读取,输入通常是另一个命令的输出。 一、grep命令语法: grep [OPTIONS] PATTERN [file...
  • 来源:IJCAI2019论文链接:https://www.ijcai.org/proceedings/2019/0725.pdf概述知识图谱嵌入是从多关系数据提取数据的工具,最近的...
  • 来自:http://blog.webstudio.com.cn/在动态创建文本时,或多或少总会遇到嵌入字体的问题。一般情况最容易忽视的问题的问题就是链接ID。一般情况下需要做的事情是首先在库,新建字型,比如选择o4b_08字体,将基...
  • 摘要在很多情况下很有用,例如,获得一篇篇幅较大的文章的要点,用通俗单词介绍一个复杂的想法,从篇幅较大的文章获得启发等。 在学术上,提取摘要是一项具有挑战性的任务。值得庆幸的是,机器学习出现...
  • 作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。邮箱:huang.tian-yuan...
  • 引言文本分类是商业问题常见的自然语言处理任务,目标是自动将文本文件分到一个或多个已定义好的类别文本分类的一些例子如下:分析社交媒体的大众情感鉴别垃圾邮件和非垃圾邮件自动标注客户问询将新闻文章按...
  • 你梦想的富文本编辑器是功能齐全,配置简单,和rails兼容性好,并且在项目里使用几乎不要多余的代码,比如上传图片,视频等等不用写一代码,自动都帮你统统搞定.你不是在做梦,Kindeditor可以满足上面所有的要求!不过在...
  • 文本中的对抗训练

    千次阅读 2019-06-11 20:07:30
    文本中的对抗训练基本概念对抗扰动对抗训练对抗扰动的两个特点测度方式对抗攻击参考文献 附上链接添加链接描述 基本概念 对抗扰动 早在 2014 年,Szegedy et al.发现只要对深度学习模型的输入添加一些微小的扰动就能...
  • 【NLP】TensorFlow实现CNN用于中文文本分类

    千次阅读 热门讨论 2018-02-04 17:00:59
    代码基于 dennybritz/cnn-text-... 参考文章 了解用于NLP的卷积神经网络(译) 及 TensorFlow实现CNN用于文本分类(译) 本文完整代码 - Widiot/cnn-zh-text-classification 项目结构 以下是完整的...
  • 在TensorFlow实现文本分类的CNN

    万次阅读 热门讨论 2017-09-06 09:25:08
    在TensorFlow实现文本分类的CNN在TensorFlow实现文本分类的CNN 数据和预处理 模型 实现 1 输入占位符 2 向量层 3 卷积层和池化层 4 Dropout 层 5 得分和预测 6 loss 和 Accuracy 7 可视化网络 训练过程 1 实例化...
  • Python中嵌入adb命令的方法

    千次阅读 2018-12-18 10:59:29
    直接执行参数传入的命令,无法获取输出和返回值。 2.os.popen('cmd') output=os.popen('cat /proc/cpuinfo') print(output.read()) 通过 os.popen() 返回的是 file read 的对象,对其进行读取 ...
  • NLP文本分析和特征工程

    千次阅读 2020-06-18 09:39:16
    在本文,我将使用NLP和Python解释如何分析文本数据并为机器学习模型提取特征。 NLP(自然语言处理)是人工智能的一个领域,研究计算机和人类语言之间的交互,特别是如何编程计算机来处理和分析大量的自然语言数据。...
  • 中文文本情感分类及情感分析资源大全

    万次阅读 多人点赞 2018-10-03 22:43:49
    本文主要是基于机器学习方法的中文文本情感分类,主要包括:使用开源的Markup处理程序对XML文件进行分析处理、中科院计算所开源的中文分词处理程序ICTCLAS对文本进行分词处理、去除停用词等文本预处理,在基于向量...
  • PyTorch的nn.Conv1d、nn.Conv2d以及文本卷积

    千次阅读 多人点赞 2019-09-05 15:53:14
    PyTorch的nn.Conv1d、nn.Conv2d以及文本卷积简单理解文本处理时的卷积原理一维卷积nn.Conv1d定义参数说明代码示例涉及论文及图解二维卷积nn.Conv2d定义参数说明代码示例图解总结 简单理解文本处理时的卷积原理 ...
  • 一文读懂文本处理的对抗训练

    千次阅读 2019-06-05 12:17:59
    作者丨WenZe、Leo单位丨追一科技AI Lab研究员背景与研究意义深度学习技术的快速发展,大幅提升了众多自然语言处理任务(比如文本分类,机器翻译等)的效果,越来越多的...
  • 在jsp页面中嵌入fckeditor

    千次阅读 2016-04-16 22:33:32
    想要在jsp使用文本编辑器,需要先在jsp插入fckeditor
  • TextCNN文本分类(keras实现)

    万次阅读 多人点赞 2019-03-26 19:23:46
    二、Keras文本预处理 1、读取数据集 2、将文字转换成数字特征 3、将每条文本转换为数字列表 4、将每条文本设置为相同长度 5、将每个词编码转换为词向量 6、Keras文本预处理代码实现 三、基于keras的TextCNN...
  • 利用Python实现中文文本关键词抽取的三种方法 ...笔者在使用前三种算法进行关键词抽取的学习过程,发现采用TF-IDF和TextRank方法进行关键词抽取在网上有很多的例子,代码和步骤也比较简单,但是采用Word2
  • 在JavaFX程序中嵌入Swing内容

    千次阅读 2018-10-18 13:01:04
    转载自 在JavaFX程序中嵌入Swing内容 本教程描述如何在JavaFX应用程序中嵌入Swing组件。本文将讨论线程限制并提供一个可运行的应用程序来说明在JavaFX应用程序中嵌入带HTML内容的Swing按钮,以及Swing与JavaFX按钮...
  • 嵌入

    万次阅读 2017-10-23 21:16:41
    嵌入(word embedding)是一种词的类型表示,具有相似意义的词具有相似的表示,是将词汇映射到实数向量的...举个例子,比如在一个文本中包含“猫”“狗”“爱情”等若干单词,而这若干单词映射到向量空间,“猫”对

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 75,322
精华内容 30,128
关键字:

怎样嵌入文本行中