精华内容
下载资源
问答
  • Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型、高级编程、通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年。可以视之为一种改良(加入一些其他编程语言的优点,...

    5d1ab94017b78700.jpg

    Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型、高级编程、通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年。可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的LISP。

    Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。

    相比于C++或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。

    与Scheme、Ruby、Perl、Tcl等动态类型编程语言一样,Python拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。其本身拥有一个巨大而广泛的标准库。

    Python 解释器本身几乎可以在所有的操作系统中运行。Python的其中一个解释器CPython是用C语言编写的、是一个由社群驱动的自由软件,当前由Python软件基金会管理。

    Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多重继承,有益于增强源代码的复用性。Python支持重载运算符,因此Python也支持泛型设计。相对于Lisp这种传统的函数式编程语言,Python对函数式编程只提供了有限的支持。有两个标准库(functools, itertools)提供了与Haskell和Standard ML中类似的函数式程序设计工具。

    虽然Python可能被粗略地分类为“脚本语言”,但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。

    Python的支持者较喜欢称它为一种高端动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shell script、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。

    Python本身被设计为可扩展的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C、C++、Cython来编写扩展模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。

    因此,有很多人把Python作为一种“胶水语言”使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google应用服务引擎使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。

    《Python技术手册》的作者马特利(Alex Martelli)说:“这很难讲,不过,2004年,Python已在Google内部使用,Google召募许多Python高手,但在这之前就已决定使用Python。他们的目的是尽量使用Python,在不得已时改用C++;在操控硬件的场合使用C++,在快速开发时候使用Python。”

    Python的设计哲学是“优雅”、“明确”、“简单”。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”,也因此它和拥有明显个人风格的其他语言很不一样。在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确没有或者很少有歧义的语法。这些准则被称为“Python格言”。在Python解释器内运行import this可以获得完整的列表。

    以上就是python是一种什么类型的编程语言的详细内容,更多请关注php中文网其它相关文章!

    本文原创发布php中文网,转载请注明出处,感谢您的尊重!

    展开全文
  • 自然语言处理()--关键词提取

    千次阅读 2019-04-05 09:58:51
    最近学习使用了传统的自然语言处理技术进行关键词的提取,接下来我介绍一下两常用的算法:TFIDF和TextRank。目前BiLSTM也可以用于提取文本关键词,有空再学。 1.TF-IDF TF-IDF(term frequency-inverse document ...

    最近学习使用了传统的自然语言处理技术进行关键词的提取,接下来我介绍一下两种常用的算法:TFIDF和TextRank。目前BiLSTM也可以用于提取文本关键词,有空再学。

    1.TF-IDF

    TF-IDF(term frequency-inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF-IDF是一种统计方法,用来评估一个字词对于一个文件集或语料库中的一份文件的重要程度。
    首先解释一下TF-IDF的意思:
    TF(term frequency):词语在一篇文章中出现的频率
    IDF(inverse document frequency):反文档频率,与词语在其他文档中出现的频率负相关
    TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率高,即TF值高;并且在其他文章中很少出现,即IDF值高,那么认为这个词或短语具有很好的类别区分能力,适合作为该文章的关键词。
    TF-IDF的具体计算公式为:

    在这里插入图片描述
    文档中词的tfidf值越高,便认为该词越可以代表该文档的主题。TF-IDF算法的python实现如下,同时jieba库中也实现了TF-IDF,有兴趣的话也可以去了解一下。

    # TF-IDf算法python实现
    import re
    import math
    # 获取一个文档中每个词的TF值,doc参数保存文档中的句子列表,返回单词与其tf值的字典
    # 首先对文档中的单词进行切分,然后统计每个词的词频
    def GetWordTF(doc):
        words_count = 0   # 单词总数
        words_map = {} # 单词与单词数的映射
        tf_map = {}  # tf值映射词典,格式: tf_map[word] = tf_word
        for sentence in doc:  # 遍历文档中的每个句子
            # 单词的切分方式可以根据所给的数据格式进行修改
            # 我将提取英文句子中的每个单词,使用正则表达式提取并去除空字符串
            words_arr = [word for word in re.split(r'\W+',sentence) if word]
            words_count += len(words_arr)   # 统计有效词的总长度
            for word in words_arr:   # 遍历每一个词并进行统计单词数
                words_map[word] = words_map.get(word,0) + 1
        for key,val in words_map.items():   # 计算每个单词的tf值
            tf_map[key] = val / words_count
        return tf_map
    
    # 获取文档每个单词在文档集docSet中的IDF值映射
    def GetWordIDF(tfMap,docSet):
        docs_num = len(docSet)   # 文档集中文档的总数
        word_doc_num = {}   # 包含word的文档数,格式为word_doc_num[word] = num of doc that contains word
        idf_map = {}  # idf值映射字典,格式idf_map[word] = idf_word
        for key,val in tfMap.items():    # 遍历文档中出现的单词
            for doc in docSet:        # 遍历每个文档,检查该文档中是否出现了单词key
                for sentence in doc:    # 遍历文档中的每个句子
                    words_arr = [word for word in re.split(r'\W+', sentence) if word]   # 提取句子中的每个单词
                    if key in words_arr:   # 如果该文档中有该词,则统计
                        word_doc_num[key] = word_doc_num.get(key,0) + 1
                        break
        for key,val in word_doc_num.items():   # 计算每个单词的idf值
            idf_map[key] = math.log(docs_num / val)
        return idf_map
    
    # 使用TFIDF算法获取文档的前topNum个关键词,其中每个文档是以列表表示的,列表项为文档的一个句子
    def GetKeywordsByTFIDF(entityDescriptionList,docSet,topNum):
        tf_map = GetWordTF(entityDescriptionList)    # 获取每个单词的tf值
        idf_map = GetWordIDF(tf_map,docSet)    # 获取每个单词的idf值
        tfidf_map = {}
        for key,val in tf_map.items():   # 计算每个词的tfidf值
            tfidf_map[key] = tf_map[key] * idf_map[key]
        tfidf_sorted_list = sorted(tfidf_map.items(),key = lambda x:x[1],reverse=True)  # 将字典按值从大到小排序
        if topNum > len(tfidf_sorted_list):   # 保证topNum不大于文档中词的总数
            topNum = len(tfidf_sorted_list)
        keywords = []   # 保存文档的前topNum个关键字
        for i in range(topNum):
            keywords.append(tfidf_sorted_list[i][0])   # 关键字保存在元组的第0个元素中
        return keywords
    

    2.TextRank

    TF-IDF算法对于有多段文本的关键词提取非常有效,但是对于单篇或文档集较少的文本则表现得不很好。对于单篇文档,可以使用TextRank算法实现关键词提取。
    TextRank是一种基于图排序的算法,思想源于谷歌的PageRank算法,通过把文本分割为若干组成单元(单词、句子)并建立图模型,利用投票机制对文本中的重要成分进行排序,仅利用单篇文档本身的信息即可实现关键词提取。
    TextRank利用投票的原理,让每一个单词给它的邻居投赞成票,票的权重取决于自己的票数。假设每一个词是一个顶点(Vertex),那么所有的词就构成了一个网络,这个网络里面每个顶点会有指向其他顶点的边,也会有其他顶点指向自己的边。通过计算每个顶点所连接的指向自己的顶点的权重和,最终得到该顶点的权重值。
    TextRank存在的主要问题是初始值的确定,为了后续计算的简便性,这里会给初值赋为一个非0值。同时,引入了一个阻尼系数的概念,该参数表示从某一个指定的顶点,到任意一个其他顶点的概率。TextRank的具体公式如下:

    在这里插入图片描述

    于是,使用TextRank算法提取关键词时,首先需要把图构建出来。图的节点就是单词,至于边可以利用n-gram的思路,认为某个单词只与它附近的n个单词有关,即与它附近的n个词对应的节点连一条无向边。也可以做一些其他操作,比如把某类词性的词删掉,一些自定义词删掉,只保留一部分单词等。我的代码实现中,假设每个长为k的滑动窗口中的任意两个单词对应的节点之间存在一条无向无权边。当构图成功后,就可以使用上述公式进行迭代求解了。Python实现的代码如下:

    # 使用TextRank算法实现关键词提取,返回关键词列表,参数含义如下:
    # sentence 保存待提取关键字的句子
    # windowLength 保存滑动窗口的大小
    # topNum 表示需要返回排名前topNum的关键词
    # d 表示textrank算法的阻尼系数,默认为0.85
    # maxIter 表示算法最大迭代次数
    # minDiff 迭代后变化值小于minDiff时也停止迭代
    def GetKeywordsByTextRank(sentence,windowLength,topNum=3,d=0.85,maxIter=10000,minDiff=0.0001):
        # 单词的切分方式可以根据所给的数据格式进行修改
        # 我将提取英文句子中的每个单词,使用正则表达式提取并去除空字符串
        words_arr = [word for word in re.split(r'\W+', sentence) if word]
        words_num = len(words_arr)   # 句子的长度
        word_graph = {}   # 保存每个单词的连接状态,格式为word_graph[word] = [与该词存在边的单词的集合]
        textrank_map = {}   # 保存每个textrank值的字典,格式为textrank_map[word] = textrank value of the word
        textrank_map_t = {}  # 用于保存前一次迭代的tankrank结果
        for words_index in range(words_num):    # 遍历句子中的每个单词,开始根据给定的窗口值构图
            textrank_map[words_arr[words_index]] = 1 - d   # 为每个词初始化一个textrank值
            window_lower = max(0, words_index - windowLength)   # 滑动窗口的下边界
            window_upper = min(words_num, words_index + windowLength)   # 滑动窗口的上边界
            for window_index in range(window_lower,window_upper):  # 遍历窗口中的单词,构建单词的连接关系
                if window_index == words_index:   # 自己与自己认为没有边
                    continue
                if not words_arr[window_index] in word_graph.get(words_arr[words_index],[]):  # 检查两词节点之间是否有边
                    if word_graph.get(words_arr[words_index],0) == 0:   # 检查该词的边集是否为空
                        word_graph[words_arr[words_index]] = [words_arr[window_index]]   # 为空则生成包含该点的边集
                    else:
                        word_graph[words_arr[words_index]].append(words_arr[window_index])  # 将该边添加到边集中
        for iter_i in range(maxIter):   # 利用textrank计算公式迭代计算
            max_diff = 0  # 表示迭代前后两次的变化
            for word,neibor_list in word_graph.items():  # 遍历每个单词
                for con_word in neibor_list:  # 遍历与每个单词存在相邻关系的单词
                    con_word_out_len = len(word_graph[con_word])  # 计算当前节点连接的节点个数
                    if word == con_word or con_word_out_len == 0:
                        continue  # 如果是该节点本身或无连出节点则不更新
                    # 使用公式对textrank值进行更新
                    textrank_map[word] = 1 - d + d * textrank_map_t.get(con_word, 0) /con_word_out_len
                max_diff = max(max_diff,abs(textrank_map[word]-textrank_map_t.get(word,0)))
            for word,val in textrank_map.items():
                textrank_map_t[word] = val
            if(max_diff < minDiff):   # 各个单词节点的textrank值如果均无明显变化,则可结束迭代
                break
        textrank_sorted_list = sorted(textrank_map.items(),key=lambda x:x[1],reverse=True)  # 按照textrank值从大到小排序
        if topNum > len(textrank_sorted_list): # 保证topNum不大于文档中词的总数
            topNum = len(textrank_sorted_list)
        if topNum < 1:  # 保证topNum大于0
            topNum = 1
        keywords = []   # 保存将要返回的关键词
        for i in range(topNum):
            keywords.append(textrank_sorted_list[i][0])
        return keywords
    

    可以看出TextRank算法对于一段文本中多次出现的词,会赋予更大的权重,因为它连出的节点更多,所以当各个节点初始权重一致时,则最终出现次数最多的词权重就会更大。这也会使该算法对类似于“的”、“你、我、他”等常用词,会出现比较大的误差。对于这种情况,可以在最开始构建边时进行处理,去掉一些停用词或者选择自己需要的词性的词,从而得出实际有用的词语。

    后记:前端暂时不支持Latex,公式我只能贴图了。深度学习最近比较流行,还有很多需要学的呀!

    展开全文
  • Python与自然语言处理——关键词提取算法关键词提取算法TF/IDF算法TextRank算法LSA/LSI/LDA算法LSA/LSI算法 关键词提取算法 大体概况: 有监督:主要通过分类...一种基于统计的计算方法,常用于评估在一个文档集中...

    关键词提取算法(一)

    大体概况:

    • 有监督:主要通过分类的方式进行,通过构建一个丰富完善的词表,判断每个文档与词表中每个词的匹配度,以类似打标签的形式达到关键词提取的效果。
    • 无监督:受青睐的主流

    TF/IDF算法

    • 一种基于统计的计算方法,常用于评估在一个文档集中一个词对该文档的重要程度。
    • 算法由两部分组成:
      • TF算法:统计一个词在一片文档中出现的频次,次数越多对文本越重要
        • 常用公式:
          tfij=nijknkj{tf_{ij}} = \frac{{{n_{ij}}}}{{\sum\nolimits_k {{n_{kj}}} }}
          其中nijn_{ij}表示词ii在文档jj中的出现频次。
      • IDF算法:统计一个词在文档集的多少个文档中出现,在越少的文档中出现对文档的区分能力就越强。
        • 常用公式:
          idfi=log(D1+Di){idf_i} = \log \left( {\frac{{\left| D \right|}}{{1 + \left| {{D_i}} \right|}}} \right)
          其中D\left| D \right|为文档中总文档数,Di\left| D_i \right|为文档集中出现词ii的文档数量。
      • TF-IDF算法
        tf×idf(i,j)=tfij×idfi=nijknkj×log(D1+Di)tf \times idf\left( {i,j} \right) = {tf_{ij}} \times {idf_i} = \frac{{{n_{ij}}}}{{\sum\nolimits_k {{n_{kj}}} }} \times \log \left( {\frac{{\left| D \right|}}{{1 + \left| {{D_i}} \right|}}} \right)

    TextRank算法

    TextRank算法来自于Google的PageRank算法

    • 特点:可以脱离语料库背景
    • PageRank算法
      • PageRank是一种网页排名算法,基本思想为:
        • 链接数量:一个网页被越多的其他网页链接说明网页越重要
        • 链接质量:一个网页被一个越高权值的网页链接,也表明该网页越重要
      • 计算公式
        In(Vi)In\left( {{V_i}} \right)ViV_i的入链集合,Out(Vi)Out\left( {{V_i}} \right)ViV_i的出链集合,S(Vi)S\left( {{V_i}} \right)表示ViV_i的分数,则有:
        S(Vi)=jIn(Vi)(1Out(Vj)×S(Vj))S\left( {{V_i}} \right) = \sum\nolimits_{j \in In\left( {{V_i}} \right)} {\left( {\frac{1}{{\left| {Out\left( {{V_j}} \right)} \right|}} \times S\left( {{V_j}} \right)} \right)}
        此时应该初始化每个页面得分为11,但同样会导致一些孤立网页的得分为00
      • 改进公式
        S(Vi)=(1d)+d×jIn(Vi)(1Out(Vj)×S(Vj))S\left( {{V_i}} \right) =\left(1-d\right) + d \times \sum\nolimits_{j \in In\left( {{V_i}} \right)} {\left( {\frac{1}{{\left| {Out\left( {{V_j}} \right)} \right|}} \times S\left( {{V_j}} \right)} \right)}
      • TextRand算法
        WS(Vi)=(1d)+d×VjIn(Vi)(wjiVkOut(Vj)wjk×WS(Vj))WS\left( {{V_i}} \right) = \left( {1 - d} \right) + d \times \sum\nolimits_{{V_j} \in In\left( {{V_i}} \right)} {\left( {\frac{{{w_{ji}}}}{{\sum\nolimits_{{V_k} \in Out\left( {{V_j}} \right)} {{w_{jk}}} }} \times WS\left( {{V_j}} \right)} \right)}
        其中wijw_{ij}i,ji,j之间的权重。
        • 区别
          • TextRank进行自动摘要
            • PageRank为有向无权图,TextRank则是有权图
            • 除了考虑链接句的重要性,还要考虑两个句子间的相似性
          • TextRank应用到关键词抽取时,与自动摘要有所不同
            • 词与词之间的关联没有权重:TextRank就退化为PageRank
            • 每个词不是与文档中所有词都有链接:提出了“窗口”概念,窗口中的词相互间都有链接关系。

    LSA/LSI/LDA算法

    前面两种算法仅使用的文本中统计信息,对于信息无法达到充分利用,所以出现了主题模型。

    • 主题模型
      主题模型认为,词与文档之间没有直接的联系,应当还有一个维度将其串联在一起,将这个维度称为主题。
      主题模型
    • 主题模型核心公式
      p(widj)=k=1Kp(witk)×p(tkdj)p\left( {{w_i}\left| {{d_j}} \right.} \right) = \sum\nolimits_{k = 1}^K {p\left( {{w_i}\left| {{t_k}} \right.} \right) \times p\left( {{t_k}\left| {{d_j}} \right.} \right)}

    LSA/LSI算法

    LSA(潜在语义分析)和LSI(潜在语义索引)几乎是一个算法,只是LSI在分析后还会利用分析的结果建立相关索引。

    • LSA算法
      • 主要步骤
        • 使用BOW模型将每个文档表示为向量;
        • 将所有的文档词向量拼接构成词-文档矩阵(m×n)\left( {m \times n} \right);
        • 对词-文档矩阵进行奇异值分解(SVD)操作([m×r][r×r][r×n])\left( {\left[ {m \times r} \right] \cdot \left[ {r \times r} \right] \cdot \left[ {r \times n} \right]} \right);
        • 根据SVD的结果,将词-文档矩阵映射到一个更低维度kk的近似SVD结果:([m×k][k×k][k×n],0&lt;k&lt;r)\left( {\left[ {m \times k} \right] \cdot \left[ {k \times k} \right] \cdot \left[ {k \times n} \right],0 &lt; k &lt; r} \right)。每个词和文档都可以表示为kk个主题构成的空间中的一个点,通过计算词与文档的相似度获取文档关键词。
      • 算法优点
        • 可以映射到低维空间
        • 在有限利用文本语义信息的同时降低计算代价,提高分析质量
      • 算法缺点
        • SVD计算复杂度高,特征空间维度较大时计算效率低下
        • 当有新文本进入时需要对整个空间进行重新训练
        • 对词的频率分布不敏感、物理解释性薄弱等

    LDA算法

    LDA算法是对LSA算法的改进,理论基础是贝叶斯理论

    • 基本假设
      假设文档中主题的先验分布和主题中词的先验分布都服从狄利克里分布。
    • 吉布斯采样的LDA算法
      • 吉布斯采样
        吉布斯采样算法是一种启发式学习方法,它假定每一条序列只包含一个特定长度的模体实例,在各条序列上随机选取一个模体的起始位置,这样便得到了初始训练集,然后通过更新步骤和采样步骤迭代改进模体模型。
        假设我们从联合分布p(x1,&ThinSpace;,xn)p\left( {{x_1}, \cdots ,{x_n}} \right)中抽取XXkk个样本,记第ii个样本为X(i)=(x1(i),&ThinSpace;,xn(i)){X^{\left( i \right)}} = \left( {x_1^{\left( i \right)}, \cdots ,x_n^{\left( i \right)}} \right),过程则如下:
        • 确定初始值X(1){X^{\left( 1 \right)}}
        • 假设已经获得样本X(i){X^{\left( i \right)}},记下一个样本为X(i+1)=(x1(i+1),&ThinSpace;,xn(i+1)){X^{\left( i+1 \right)}} = \left( {x_1^{\left( i+1 \right)}, \cdots ,x_n^{\left( i+1 \right)}} \right),于是将其看作一个向量,对其中某一分量xj(i+1)x_j^{\left( i+1 \right)},可通过在其他分量已知的条件下该分量的概率分布来抽取。
        • 对于此条件概率,使用样本X(i+1){X^{\left( i+1 \right)}}中已得的分量x1(i+1)x_1^{\left( i+1 \right)}xj1(i+1)x_{j-1}^{\left( i+1 \right)}以及上一个样本X(i){X^{\left( i \right)}}中的xj+1(i+1)x_{j+1}^{\left( i+1 \right)}xn(i+1)x_{n}^{\left( i+1 \right)},,即
          p(xj(i+1)x1(i+1),&ThinSpace;,xj1(i+1),xj+1(i),&ThinSpace;,xn(i))p\left( {x_j^{\left( {i + 1} \right)}\left| {x_1^{\left( {i + 1} \right)}} \right., \cdots ,x_{j - 1}^{\left( {i + 1} \right)},x_{j + 1}^{\left( i \right)}, \cdots ,x_n^{\left( i \right)}} \right)
        • 重复上面的过程kk
      • 训练LDA
        • 随机初始化:对语料中每篇文档中的每个词ww随机赋予一个topic编号zz
        • 重新扫描语料库,对每个词ww按照吉布斯采样公式重新采样其topic,在语料中进行更新
        • 重复以上语料库的重新采样直到吉布斯采样收敛
        • 统计语料库的topic-word共现频率矩阵,该矩阵为LDA的模型
      • 预估
        • 随机初始化,对当前文档中的每个词ww随机赋予一个topic编号zz
        • 重新扫描当前文档,按照吉布斯采样公式,重新采样它的topic
        • 重复以上过程直到吉布斯采样收敛
        • 统计文档中topic分布即为预估结果
    参考文献

    《Python与自然语言处理》

    展开全文
  • 运行程序时,Perl内部的编译器会先载入整个源程序,将之转换成内部使用的bytecode,这是一种Prel在内部用来表示程序语法树的数据结构,然后交给Perl的bytecode引擎运行.所以,如果在第200行有个语法错误,那么在开始运行第...

    Preface


    Content

    运行程序时,Perl内部的编译器会先载入整个源程序,将之转换成内部使用的bytecode,这是一种Prel在内部用来表示程序语法树的数据结构,然后交给Perl的bytecode引擎运行.所以,如果在第200行有个语法错误,那么在开始运行第二行代码之前,Perl就会报告这个错误.

    英语跟许多其他语言一样区别单数(singular)和复数(plural).作为一个由人类语言学家设计的计算机语言,Perl也有类似的区别.一般来说,Perl用标量(scalar)来称呼单个失误.标量是Perl里面最简单的一种数据类型.对大部分标量来说,它要么是数字(比如255或是3.25e20),要么是由字符组成的序列(比如hello或者林肯总统的Gettysburg演讲词).虽然你可能认为数字和字符串是两码事,但对Perl来讲,这两者大多情况下都是可以在内部转换的.

    所有的内部格式都相同

    接下来,我们会看到如何设定整数(不带小数点的数字,比如255和2001)以及浮点数(带有小数点的数字,比如3.14159或者1.35*10^25等).但在Perl内部,则总是按"双精度浮点数"的要求来保存数字并进行运算的.也就是说Perl内部并不存在整数值–程序中用到的整型常量会被转换成等效的浮点数值.

    浮点数直接量

    整数直接量:Perl允许你在整数直接量中插入下划线,将若干位数分开,写成这样看起来就很清楚了:
    61_298_040_283_768

    和许多其他程序语言一样,Perl也允许使用十进制(decimal)以外的其他进制来表示数字.八进制(octal)直接量以0开头,十六进制(hexadecimal)直接量以0x开头,而二进制(binary)直接量则以0b开头.十六进制的A到F(或是小写的a到f也行),代表十进制数的10到15的数字.

    Perl还支持取模(modulu)操作符(%).表达式10%3的结果是1,也就是10除以3的榆树.取模操作符先取整然后再求余,所以10.5%3.2和10%3的计算结果是相同的.另外,Perl也提供类似FORTRAN语言的乘幂(exponentiation)操作符,满足了许多Pascal和C用户的心愿.乘幂操作符以双星号表示,比如2**3代表2的3次方,计算结果为8.

    Perl完全支持Unicode,所以在字符串中可以使用任意一个合法的Unicode字符串.不过由于Perl的历史原因,它不会自动将程序源代码当做Unicode源码的文本文件读入,所以如果你想要在源代码中使用Unicode书写直接量的话,得手工加上utf8编译指令:

    use utf8;

    反斜线后面跟上不同的字符,可以表示各种不同的意义(一般我们把这种借助反斜线组合表示特殊字符的方法称作反斜线转义).在双引号内的字符串直接量内允许使用的比较完整的转义字符清单如表2-1所示.

    组合 意义
    \n 换行
    \r 回车
    \t 水平制表符
    \f 换页符
    \b 退格
    \a 系统响铃
    \e Esc(ASCII编码的转义字符)
    \007 八进制表示的ASCII值(此例007表示系统响铃)
    \0x7f 十六禁止表示的ASCII值(此例中7f表示删除键的控制代码)
    \x{2744} 十六进制表示的Unicode代码点(这里的U+2744表示雪花形状的图形字符)
    \cC 控制符,也就是Control键的代码(此例表示同事按下Ctrl和C的返回码)
    \ 反斜线
    |双引号
    \l 将下一个字母转化为小写的
    \L 将它后面的所有字母都转化为小写的,直到\E为止
    \u 将下一个字母转为大写的
    \U 将它后面的字母都转为大写的,直到\E为止
    \Q 相当于把它到\E之间的非单词(non word)字符加上反斜线转义
    \E 结束\L,\U和\0开始的作用范围
    数字与字符串之间的自动转换

    通常Perl会根据需要,自动在数字和字符串之间进行类型转换.那它究竟是如何知道炫耀欧数字还是字符串呢?这完全取决于操作符.如果操作符(比如+)需要的是数字,Perl就会将操作数视为数字;在操作符(比如.)需要字符串时,Perl变回将操作数视为字符串.因此,你不用担心数字和操作符之间的差异,只管合理使用操作符,Perl会自动就能够完成剩下的工作.

    对数字进行运算的操作符(比如乘法)如果遇到字符串类型的操作数,Perl会自动将字符串转换成等效的十进制浮点数进行运算.字符串中非数字的部分(以及前置的空白符号)会被略过,所以"12fred34" * "3"也会得出36,而不会出现任何警告信息.在最极端的情况下,完全不含数字的字符串会被转换成0.

    "前置0"的技巧只对直接量有效,不能用于字符串的自动转换,自动转换总是按照十进制数字来处理的.

    标量变量

    所谓变量,及时储存一个或多个值的容器的名称.而标量变量,就是单单存储一个值的变量.

    Perl程序里面的大部分变量名称都习惯使用全小写,正如你在本书中看到的例子一样,只有少数集中情况中才都会用大大写字母.而使用全大写的(比如ARGV).,线,ARGV)变量一般都是表示特殊意义的变量.如果变量名不止一个单词,有人喜欢用下划线分开,如underscores_are_cool,也有人喜欢用$giveMeInitialCaps这种风格.当然你也可以使用全部大写的变量名,但这么以来就有可能和Perl保留的特殊变量的名称相冲突.所以最好还是不要用全大写的名称.

    用Print输出结果

    一般我们都想要程序输出写什么信息来,否则,也许会有人认为它什么事都没做.print操作符就是用来完成这项任务的:它可以接收标量值作为参数,然后不经修饰地将它传送到标准输出(standard output).除非特别指定,否则一般默认的"标准输出",指的就是终端屏幕.

    借助代码点创建字符

    有时候我们需要输入键盘上没有的那些字符.取得这些字符的方法得看用的是什么系统的输入法或者哪一款文本编辑器.不过,与其非礼寻找字型输入,还不如直接键入这些字符的代码点(code point),再通过chr()函数转换成对应字符来的方便:
    反过来,我们可以听过ord()函数把字符转换为代码点

    define函数

    行输入操作符有时候会返回undef.在一般情况下,它会返回同一行文本.但若没有更多输入,比如读到文件结尾(end-of-file)时,它会返回undef来表示这个状况.要判断某个字符串是undef而不是空字符串,可以使用defined函数.如果是undef,该函数返回假,否则返回真.

    列表(list)指的是标量的有序集合,而数组(array)则是储存列表的变量.在Perl里,这两个术语常常混用。不过更精确地说,列表指的是数据,而数组指的是变量。列表的值不一定要放在数组里,但每个数组变量都一定包含一个列表(即使是不含任何元素的空列表)。

    因为每个元素都是独立不想管的标量值,所以列表或数组可能包含数字,字符串,undef值或不同类型标量值的混合。


    Daily Task

    终有一天,你会老去,而我,将会加冕为王!

    展开全文
  • 因此,关键词提取在文本挖掘领域是个很重要的部分。 关于文本的关键词提取方法分为有监督、半监督和无监督三: 1 有监督的关键词抽取算法 它是建关键词抽取算法看作是二分类问题,判断文档中的词或者短语是...
  • 什么是关键词提取 ​ 关键词提取就是从文本里面把跟内容意义最相关的一些词语抽取出来。这个可以追溯到文献检索初期,关键词是为了文献标引工作,从报告、论文中选取出来用以表示全文主题内容信息的单词或术语...
  • 关键词挖掘的9方法

    千次阅读 2020-12-27 16:46:05
    Google Keywords Planner(谷歌关键词规划师,以下简称GKP) 您可以输入任何“种子”关键字,并查看大量关键字建议及其相关搜索量。 现在,Google已将这些数字限制在一定范围内了。 ???? 小提示. 你仍然可以...
  • 谢谢!1 简介关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。...因此,目前依然可以在论文中看到关键词项。除了这些,关键词还可以在文本聚类、分类、自动摘要等领域中有着...
  • 在介绍TextRank前,我们先简单介绍下什么是PageRank,再介绍如何利用TextRank进行文本关键词提取。 目录   1.PageRank算法 2.TextRank算法 3.TextRank与TF-IDF比较 1.PageRank算法 PageRank算法是根据互联网...
  • 这个可以追溯到文献检索初期,关键词是为了文献标引工作,从报告、论文中选取出来用以表示全文主题内容信息的单词或术语,在现在的报告和论文中,我们依然可以看到关键词项。因此,关键词在文献检索、自动文摘、...
  • 自然语言处理——TF-IDF算法提取关键词 这个标题看上去好像很复杂,其实我要谈的是个很简单的问题。 有篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工...
  • NLP关键词提取方法总结及实现

    万次阅读 多人点赞 2019-07-23 21:09:41
    关键词提取概述 二、TF-IDF关键词提取算法及实现 三、TextRank关键词提取算法实现 四、LDA主题模型关键词提取算法及实现 五、Word2Vec词聚类的关键词提取算法及实现 六、信息增益关键词提取算法及实现 七...
  • 什么是 HTML? HTML 标签 HTML 文档 = 网页 例子解释 HTML 编辑器 使用 Notepad 来编写 HTML 基本的 HTML 标签 - 四个实例 HTML 标题 实例 HTML 段落 实例 HTML 链接 实例 HTML 图像 实例 HTML 元素 ...
  • 关键词提取:构造共现矩阵

    千次阅读 2018-01-28 21:48:22
    因为TFIDF算法的提取关键词的准确性很差,tfidf提取出的关键词很难看出...因为构造词语网络需要先构造关键词共现图,关键词共现图需要先构造关键词共现矩阵,所以第步就是构造关键词共现矩阵。 构造关键词共现矩阵的
  • HanLP是系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。在Python中一是直接调用...
  • 自然语言处理:scrapy爬取关键词信息(二) 自然语言处理:问答语料生成词汇表,词转向量(三) 1 分词工具 jieba pip/pip3 install jieba pynlpir pip/pip3 install pynlpir 2 jieba分词 ...
  • 篇很长的文章,我们要用计算机提取他的关键词(Automatic Keyphrase extraction),完全不加人工干预,如何才能正确做到? 这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,...
  • 作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。邮箱:huang.tian-yuan...
  • 文本关键词抽取,是对文本信息进行高度凝练的一种有效手段,通过3-5个词语准确概括文本的主题,帮助读者快速理解文本信息。目前,用于文本关键词提取的主要方法有四种:基于TF-IDF的关键词抽取、基于TextRank的...
  • 随着科技的进步,我们生活的方方面面都已经智能化了。智能手机,早已不局限于拍照听音乐...我今天要说的是,为什么我们的生活会变得如此方便?答案当然是程序!是程序让我们的生活变得丰富多彩,变得乐趣无穷。程序是这
  • 关键词提取算法概述

    千次阅读 2019-01-22 09:23:10
    关键词提取是NLP领域的个重要的子任务。在信息检索中,准确的关键词提取可以大幅提升效率;在对话系统中,机器可以通过关键词来理解用户意图;在自动文摘、文本分类中,关键词的发现也非常有帮助。 关键词提取方法...
  • SQL server 是一门什么语言

    千次阅读 2018-05-28 16:13:25
    SQL 是一种 ANSI 的标准计算机语言 编者注:ANSI,美国国家标准化组织。 SQL 能做什么?(SQL Server的例子) SQL 面向数据库执行查询(select * from table) SQL 可从数据库取回数据 (sele...
  • 定义新类型 type关键词除了可以进行类型别名,还可以定义个新的类型,通过type 新类型名 原类型名这样的语法 注意在上个例子的基础上,将type myint = int改成了type myint int,表示myint是建立在int基础上的新...
  • 在自然语言处理领域,处理海量的文本文件最关键的是要把用户最关心的问题提取出来。...因此,关键词提取在文本挖掘领域是个很重要的部分。 关于文本的关键词提取方法分为有监督、半监督和无监...
  • 关键词提取

    千次阅读 2017-10-31 14:43:57
    仅是关键词提取的一些常用算法概述,至于各个算法的具体实现细节和在spark上运行的时候遇到的坑,后续博客里继续
  • 什么是自然语言处理

    千次阅读 2016-02-02 09:56:47
    什么是自然语言处理 简单地说,自然语言处理(Natural Language Processing,简称NLP)就是用计算机来处理、理解以及运用人类语言(如中文、英文等),它属于人工智能的个分支,是计算机科学与语言学的交叉学科...
  • 关键词提取技术

    千次阅读 2019-09-27 18:06:01
    python自然语言处理实战 第五章 关键词提取算法 中管方法分析: ...个方向是将关键词抽取看做是二分类任务; 另个方向是基于语言模型。 优势:通过大量文本训练得到,相比于无监督的抽取方法得到...
  • 关键词抽取模型

    千次阅读 2019-03-04 17:10:21
    TF-IDF(term frequency-inverse document frequency) :一种用于资讯检索于资讯探勘的常用加权技术。是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,717
精华内容 41,886
关键字:

关键词是一种什么语言