精华内容
下载资源
问答
  • 这里从百度百科里面拿来关于“wordnet”的定义和介绍: ...它是一个覆盖范围宽广的英语词汇语义网。名词,动词,形容词和副词各自被组织成一个同义词的网络,每个同义词集合都代表一个基本的语义概念,并且这些集合...

    这里从百度百科里面拿来关于“wordnet”的定义和介绍:

    WordNet是由Princeton 大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典。它不是光把单词以字母顺序排列,而且按照单词的意义组成一个“单词的网络”。
    
    它是一个覆盖范围宽广的英语词汇语义网。名词,动词,形容词和副词各自被组织成一个同义词的网络,每个同义词集合都代表一个基本的语义概念,并且这些集合之间也由各种关系连接。
    WordNet包含描述概念含义,一义多词,一词多义,类别归属,近义,反义等问题,访问以下网页,可使用wordnet的基本功能
    http://wordnetweb.princeton.edu/perl/webwn
    
    wwordnet官网在这里:
    https://wordnet.princeton.edu/

    鉴于wordnet本身的性质,我们想到了可以借助于同一词典网络的形式来计算词语之间的相似度,具体的实现很简单,核心的思想就是:同义词汇数据。具体的代码实现如下:

    #!usr/bin/env python
    #encoding:utf-8
    from __future__ import division
    '''
    __Author__:沂水寒城
    功能: 基于 WordNet 的词语相似度计算分析
    '''
     
    import sys
    import numpy as np
    import pandas as pd
    from scipy import stats
    from nltk.corpus import wordnet as wn
    from sklearn.preprocessing import MinMaxScaler, Imputer
     
    reload(sys)
    sys.setdefaultencoding('utf-8')
     
     
    def loadData(data='data.csv'):
        '''
        加载数据集
        '''
        data=pd.read_csv(data)
        word_list=np.array(data.iloc[1:,[0,1]])
        self_sim_res=np.array(data.iloc[1:,[2]])
        return word_list,self_sim_res
    def calWordSimilarity(word_list,self_sim_res,res_path='wordnetResult.csv'):
        '''
        计算词语相似度
        '''
        self_sim_matrix=np.zeros( (len(self_sim_res),1))
        for i,word_pair in enumerate(word_list):
            word1,word2=word_pair
            count=0
            synsets1=wn.synsets(word1)
            synsets2=wn.synsets(word2)
            print 'synsets1: ',synsets1
            print 'synsets2: ',synsets2
            for synset1 in synsets1:
                for synset2 in synsets2:
                    score=synset1.path_similarity(synset2)
                    if score is not None:
                        self_sim_matrix[i,0]+=score
                        count+=1
                    else:
                        pass
            self_sim_matrix[i,0]=self_sim_matrix[i,0]*1.0/count
        imputer=Imputer(missing_values='NaN', strategy='mean', axis=0)
        imputer_list=imputer.fit_transform(self_sim_matrix)
        scaler=MinMaxScaler(feature_range=(0.0,10.0))
        imputer_list_scale=scaler.fit_transform(imputer_list)
        (coefidence,p_value)=stats.spearmanr(self_sim_res,imputer_list_scale)
        print 'coefidence: ',coefidence
        print 'p_value: ',p_value
        submitData=np.hstack((word_list,self_sim_res,imputer_list_scale))
        (pd.DataFrame(submitData)).to_csv(res_path,index=False,
                      header=["Word1","Word2","originalSim","wordnetSim"])
    if __name__=='__main__':
        word_list,self_sim_res=loadData(data='data.csv')
        calWordSimilarity(word_list,self_sim_res,res_path='wordnetResult.csv')

    下面我们来看具体的计算应用实例。

    首先是原始数据文件的格式如下:

     

    其中,前两列分别为需要计算的词汇,最后一列是人为给定的初始相似度数据,这个完全凭感觉给就好了。

    简单的测试结果输出如下:

    synsets1:  []
    synsets2:  [Synset('telephone.n.01'), Synset('phone.n.02'), Synset('earphone.n.01'), Synset('call.v.03')]
    synsets1:  [Synset('house.n.01'), Synset('firm.n.01'), Synset('house.n.03'), Synset('house.n.04'), Synset('house.n.05'), Synset('house.n.06'), Synset('house.n.07'), Synset('sign_of_the_zodiac.n.01'), Synset('house.n.09'), Synset('family.n.01'), Synset('theater.n.01'), Synset('house.n.12'), Synset('house.v.01'), Synset('house.v.02')]
    synsets2:  [Synset('horse.n.01'), Synset('horse.n.02'), Synset('cavalry.n.01'), Synset('sawhorse.n.01'), Synset('knight.n.02'), Synset('horse.v.01')]
    synsets1:  [Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'), Synset('car.n.04'), Synset('cable_car.n.01')]
    synsets2:  [Synset('bicycle.n.01'), Synset('bicycle.v.01')]
    synsets1:  [Synset('homo.n.02'), Synset('human.a.01'), Synset('human.a.02'), Synset('human.a.03')]
    synsets2:  [Synset('woman.n.01'), Synset('woman.n.02'), Synset('charwoman.n.01'), Synset('womanhood.n.02')]
    synsets1:  [Synset('large.a.01'), Synset('big.s.02'), Synset('bad.s.02'), Synset('big.s.04'), Synset('big.s.05'), Synset('big.s.06'), Synset('boastful.s.01'), Synset('big.s.08'), Synset('adult.s.01'), Synset('big.s.10'), Synset('big.s.11'), Synset('big.s.12'), Synset('big.s.13'), Synset('big.r.01'), Synset('boastfully.r.01'), Synset('big.r.03'), Synset('big.r.04')]
    synsets2:  [Synset('huge.s.01')]
    synsets1:  [Synset('rain.n.01'), Synset('rain.n.02'), Synset('rain.n.03'), Synset('rain.v.01')]
    synsets2:  [Synset('wind.n.01'), Synset('wind.n.02'), Synset('wind.n.03'), Synset('wind.n.04'), Synset('tip.n.03'), Synset('wind_instrument.n.01'), Synset('fart.n.01'), Synset('wind.n.08'), Synset('weave.v.04'), Synset('wind.v.02'), Synset('wind.v.03'), Synset('scent.v.02'), Synset('wind.v.05'), Synset('wreathe.v.03'), Synset('hoist.v.01')]
    synsets1:  [Synset('spider.n.01'), Synset('spider.n.02'), Synset('spider.n.03')]
    synsets2:  [Synset('crawl.n.01'), Synset('crawl.n.02'), Synset('crawl.n.03'), Synset('crawl.v.01'), Synset('crawl.v.02'), Synset('crawl.v.03'), Synset('fawn.v.01'), Synset('crawl.v.05')]
    synsets1:  [Synset('fire.n.01'), Synset('fire.n.02'), Synset('fire.n.03'), Synset('fire.n.04'), Synset('fire.n.05'), Synset('ardor.n.03'), Synset('fire.n.07'), Synset('fire.n.08'), Synset('fire.n.09'), Synset('open_fire.v.01'), Synset('fire.v.02'), Synset('fire.v.03'), Synset('displace.v.03'), Synset('fire.v.05'), Synset('fire.v.06'), Synset('arouse.v.01'), Synset('burn.v.01'), Synset('fuel.v.02')]
    synsets2:  [Synset('fireman.n.01'), Synset('stoker.n.02'), Synset('reliever.n.03'), Synset('fireman.n.04')]
    synsets1:  [Synset('flood.n.01'), Synset('flood.n.02'), Synset('flood.n.03'), Synset('flood.n.04'), Synset('flood.n.05'), Synset('flood_tide.n.02'), Synset('deluge.v.01'), Synset('flood.v.02'), Synset('flood.v.03'), Synset('flood.v.04')]
    synsets2:  [Synset('blood.n.01'), Synset('blood.n.02'), Synset('rake.n.01'), Synset('lineage.n.01'), Synset('blood.n.05'), Synset('blood.v.01')]
    coefidence:  0.0
    p_value:  1.0

    计算结果数据如下:

     

    相比于原始的数据文件这里多了最后一列,代表的就是基于wordnet计算的结果。

    后面计划将该计算模块做成GUI可视化操作工具,相关代码数据文件会上传到我的GitHub中,欢迎交流!

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 有一些有关学习汉语,词汇分析的文章,以及一些词汇表,其中包括已成为具有清晰英语定义的HSK词汇表最受欢迎的来源之一。 我在用于创建中文词汇图的源文件-在大多数图中连接了具有共同字符的单词,连接了具有共同...
  • 注:文章原文为Dr. Charles Severance 的 ...BeautifulSoup: 一个用于分析HTML文档,并从中抓取数据的Python库。它弥补了大部分在浏览器中被忽略的HTML缺陷。你可以从www.crummy.com下载BeautifulSoup代码。 p...

    注:文章原文为Dr. Charles Severance 的 《Python for Informatics》。文中代码用3.4版改写,并在本机测试通过。

    12.9 词汇表

    BeautifulSoup: 一个用于分析HTML文档,并从中抓取数据的Python库。它弥补了大部分在浏览器中被忽略的HTML缺陷。你可以从www.crummy.com下载BeautifulSoup代码。

    port:端口。当你用套接字链接服务器,通常表示正在联系的的服务器应用程序的数字。例如,网页服务使用80端口,电子邮件服务使用25端口。

    scrape:一个程序伪装成一个网页浏览器,获取一个页面,然后查看网页的内容。经常程序会跟随一个页面中链路去找到下个页面,这样它们可以穿越一个网页网络或社交网络。

    tōngchángbiǎoshìnínzhèngzàiliándeyìngyòngchéngdeshù

    when you make a socket connection to a server. As an example, web traffic

    socket:套接字。两个应用程序之间的网络连接。这样程序可以双向发送和接收数据。

    spider:网络爬虫。网页搜索引擎通过获取一个页面和此页面的所有链接,循环搜索至几乎拥有互联网所有页面,并据此建立搜索索引的一种行为。

    12.10 练习

     以下练习代码均为译者编写,仅供参考

    练习 12.1 修改socket1.py,提示用户输入URL,使程序可以读取任何网页。你可以用split('/')方法分解URL的组成部门,使你可以抽取套接字连接调用的主机名。使用try和except语句添加错误校验,处理用户输入不正确格式的或不存在的URL。

    import socket
    import re
    
    url = input('Enter an URL like this: http://www.py4inf.com/code/socket1.py\n')
    if (re.search('^http://[a-zA-Z0-9]+\.[a-zA-Z0-9]+\.[a-zA-Z0-9]+/',url)):
        words = url.split('/')
        hostname = words[2]
        mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            mysocket.connect((hostname, 80)) # 注意是两个圆括号
        except:
            print(hostname, ' is not a correct web server')
            exit
        mysocket.send(str.encode('GET ' + url + ' HTTP/1.0\n\n'))
        while True:
            data = mysocket.recv(1024).decode('utf-8')
            if (len(data) < 1): 
                break
            print (data)
        mysocket.close()
    else:
        print("The URL that you input is bad format")

     

    练习12.2 修改你的socket程序,使它具备对接收的字符进行计数的功能,并在显示3000个字符后停机显示。程序应该获取整个文档,对所有字符进行计数,并在文档最后显示字符数。

    import socket
    import re
    
    url = input('Enter an URL like this: http://www.py4inf.com/code/socket1.py\n')
    if (re.search('^http://[a-zA-Z0-9]+\.[a-zA-Z0-9]+\.[a-zA-Z0-9]+/',url)):
        words = url.split('/')
        hostname = words[2]
        mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            mysocket.connect((hostname, 80)) # 注意是两个圆括号
        except:
            print(hostname, ' is not a correct server')
            exit
        mysocket.send(str.encode('GET ' + url + ' HTTP/1.0\n\n'))
        count = 0
        while True:
            data = mysocket.recv(3000).decode('utf-8')
            if (len(data) < 1): 
                break
            count = count + len(data)
            if (count <= 3000):
                print (data)
        print("The total count of this web is", count)
        mysocket.close()
        
    else:
        print("The URL that you input is bad format")

     

    练习12.3 使用urllib库复制先前练习中的功能。(1)通过URL获取文档。(2)最多显示3000个字符。(3)对整个文档进行计数。不要担心这个练习的文件头,只需简单显示文档内容的前3000个字符。

     

    import urllib.request
    import re
    
    url = input('Enter an URL like this: http://www.py4inf.com/code/socket1.py\n')
    
    if (re.search('^http://[a-zA-Z0-9]+\.[a-zA-Z0-9]+\.[a-zA-Z0-9]+/',url)):
        try:
            web = urllib.request.urlopen(url)
        except:
            print(url, ' is not a valid url')
            exit
    
        counts = 0
        while True:
            data = web.read(3000)
            if (len(data) < 1): 
                break
            counts = counts + len(data)
            if (counts <= 3000):
                print (data.decode('utf-8'))
        print("The total counts of this web is", counts)
        
    else:
        print("The URL that you input is bad format")

     

    练习12.4 修改urllinks.py程序,使它抽取和统计所获取的HTML文档中的段标签(p),并显示段标签的数量。不需显示段的内容,只是统计即可。分别在几个小网页和一些长网页上测试你的程序。

    from bs4 import BeautifulSoup
    import urllib.request
    
    url = input('Enter - ')
    html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(html,"html.parser")
    tags = soup('p')
    counts = 0
    for tag in tags:
        counts = counts + 1
    print('This web has ',counts, ' tags of p.')

    练习12.5(高级)修改socket程序,使它只显示文件头和空行之后的数据。切记recv只接收字符(换行符及所有),而不是行。

     

    import socket
    import re
    
    url = input('Enter an URL like this: http://www.py4inf.com/code/socket1.py\n')
    if (re.search('^http://[a-zA-Z0-9]+\.[a-zA-Z0-9]+\.[a-zA-Z0-9]+/',url)):
        words = url.split('/')
        hostname = words[2]
    
        mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            mysocket.connect((hostname, 80)) # 注意是两个圆括号
        except:
            print(hostname, ' is not a correct server')
            exit
    
        mysocket.send(str.encode('GET ' + url + ' HTTP/1.0\n\n'))
        web = b''
        while True:
            data = mysocket.recv(1024)
            if (len(data) < 1): 
                break
            web = web + data
        mysocket.close()
    
        pos = web.find(b'\r\n\r\n')
        print(web[pos+4:].decode('utf-8'))
    else:
        print("The URL that you input is bad format")

     

     

    转载于:https://www.cnblogs.com/zhengsh/p/5438700.html

    展开全文
  • 第02章 获得文本语料和词汇资源2.1 获取文本...倾向性分析中文命名实体识别推荐系统2.2 条件频率分布条件和事件按文体计数词汇绘制分布图和分布表使用双连词生成随机文本2.3 更多关于Python代码重用使用文本编辑器创...

    1. 什么是有用的文本语料和词汇资源,我们如何使用Python 获取它们?
    2. 哪些Python 结构最适合这项工作?
    3. 编写Python 代码时我们如何避免重复的工作?

    2.1 获取文本语料库

    古腾堡语料库

    import nltk
    from nltk.book import *
    
    *** Introductory Examples for the NLTK Book ***
    Loading text1, ..., text9 and sent1, ..., sent9
    Type the name of the text or sentence to view it.
    Type: 'texts()' or 'sents()' to list the materials.
    text1: Moby Dick by Herman Melville 1851
    text2: Sense and Sensibility by Jane Austen 1811
    text3: The Book of Genesis
    text4: Inaugural Address Corpus
    text5: Chat Corpus
    text6: Monty Python and the Holy Grail
    text7: Wall Street Journal
    text8: Personals Corpus
    text9: The Man Who Was Thursday by G . K . Chesterton 1908
    
    nltk.corpus.gutenberg.fileids()
    
    ['austen-emma.txt',
     'austen-persuasion.txt',
     'austen-sense.txt',
     'bible-kjv.txt',
     'blake-poems.txt',
     'bryant-stories.txt',
     'burgess-busterbrown.txt',
     'carroll-alice.txt',
     'chesterton-ball.txt',
     'chesterton-brown.txt',
     'chesterton-thursday.txt',
     'edgeworth-parents.txt',
     'melville-moby_dick.txt',
     'milton-paradise.txt',
     'shakespeare-caesar.txt',
     'shakespeare-hamlet.txt',
     'shakespeare-macbeth.txt',
     'whitman-leaves.txt']
    
    emma = nltk.corpus.gutenberg.words('austen-emma.txt') #简·奥斯丁的《爱玛》
    
    len(emma)
    
    192427
    
    emma = nltk.Text(nltk.corpus.gutenberg.words('austen-emma.txt'))
    emma.concordance("surprize")
    
    Displaying 25 of 37 matches:
    er father , was sometimes taken by surprize at his being still able to pity ` 
    hem do the other any good ." " You surprize me ! Emma must do Harriet good : a
    Knightley actually looked red with surprize and displeasure , as he stood up ,
    r . Elton , and found to his great surprize , that Mr . Elton was actually on 
    d aid ." Emma saw Mrs . Weston ' s surprize , and felt that it must be great ,
    father was quite taken up with the surprize of so sudden a journey , and his f
    y , in all the favouring warmth of surprize and conjecture . She was , moreove
    he appeared , to have her share of surprize , introduction , and pleasure . Th
    ir plans ; and it was an agreeable surprize to her , therefore , to perceive t
    talking aunt had taken me quite by surprize , it must have been the death of m
    f all the dialogue which ensued of surprize , and inquiry , and congratulation
     the present . They might chuse to surprize her ." Mrs . Cole had many to agre
    the mode of it , the mystery , the surprize , is more like a young woman ' s s
     to her song took her agreeably by surprize -- a second , slightly but correct
    " " Oh ! no -- there is nothing to surprize one at all .-- A pretty fortune ; 
    t to be considered . Emma ' s only surprize was that Jane Fairfax should accep
    of your admiration may take you by surprize some day or other ." Mr . Knightle
    ation for her will ever take me by surprize .-- I never had a thought of her i
     expected by the best judges , for surprize -- but there was great joy . Mr . 
     sound of at first , without great surprize . " So unreasonably early !" she w
    d Frank Churchill , with a look of surprize and displeasure .-- " That is easy
    ; and Emma could imagine with what surprize and mortification she must be retu
    tled that Jane should go . Quite a surprize to me ! I had not the least idea !
     . It is impossible to express our surprize . He came to speak to his father o
    g engaged !" Emma even jumped with surprize ;-- and , horror - struck , exclai
    

    调用了NLTK 中的corpus 包中的gutenberg 对象的words()函数。但因为总是要输入这么长的名字很繁琐,Python 提供了另一个版本的import 语句

    from nltk.corpus import gutenberg 
    
    gutenberg.fileids()
    
    ['austen-emma.txt',
     'austen-persuasion.txt',
     'austen-sense.txt',
     'bible-kjv.txt',
     'blake-poems.txt',
     'bryant-stories.txt',
     'burgess-busterbrown.txt',
     'carroll-alice.txt',
     'chesterton-ball.txt',
     'chesterton-brown.txt',
     'chesterton-thursday.txt',
     'edgeworth-parents.txt',
     'melville-moby_dick.txt',
     'milton-paradise.txt',
     'shakespeare-caesar.txt',
     'shakespeare-hamlet.txt',
     'shakespeare-macbeth.txt',
     'whitman-leaves.txt']
    
    emma = gutenberg.words("austen-emma.txt")
    
    #这个程序显示每个文本的三个统计量:平均词长、平均句子长度和本文中每个词出现的平均次数(我们的词汇多样性得分)
    for fileid in gutenberg.fileids():
        num_chars = len(gutenberg.raw(fileid)) 
        num_words = len(gutenberg.words(fileid)) #    
        num_sents = len(gutenberg.sents(fileid)) 
        num_vocab = len(set([w.lower() for w in gutenberg.words(fileid)]))
        print(round(num_chars/num_words), round(num_words/num_sents), round(num_words/num_vocab), fileid)
    
    5 25 26 austen-emma.txt
    5 26 17 austen-persuasion.txt
    5 28 22 austen-sense.txt
    4 34 79 bible-kjv.txt
    5 19 5 blake-poems.txt
    4 19 14 bryant-stories.txt
    4 18 12 burgess-busterbrown.txt
    4 20 13 carroll-alice.txt
    5 20 12 chesterton-ball.txt
    5 23 11 chesterton-brown.txt
    5 18 11 chesterton-thursday.txt
    4 21 25 edgeworth-parents.txt
    5 26 15 melville-moby_dick.txt
    5 52 11 milton-paradise.txt
    4 12 9 shakespeare-caesar.txt
    4 12 8 shakespeare-hamlet.txt
    4 12 7 shakespeare-macbeth.txt
    5 36 12 whitman-leaves.txt
    

    平均词长似乎是英语的一个一般属性,因为它的值总是4。(事实上,平均词长是3 而不是4,因为num_chars 变量计数了空白字符。)相比之下,平均句子长度和词汇多样性看上去是作者个人的特点。

    len(gutenberg.raw('blake-poems.txt')) #raw()函数给我们没有进行过任何语言学处理的文件的内容,词汇个数,包括词之间的空格。
    
    38153
    
    macbeth_sentences = gutenberg.sents('shakespeare-macbeth.txt')#sents()函数把文本划分成句子,其中每一个句子是一个词链表。
    macbeth_sentences
    
    [['[', 'The', 'Tragedie', 'of', 'Macbeth', 'by', 'William', 'Shakespeare', '1603', ']'], ['Actus', 'Primus', '.'], ...]
    
    macbeth_sentences[1603]
    
    ['The', 'hart', 'is', 'sorely', 'charg', "'", 'd']
    
    longest_len = max(len(s) for s in macbeth_sentences)
    
    longest_len_sent = [s for s in macbeth_sentences if len(s) == longest_len]
    print(longest_len_sent)
    
    [['Doubtfull', 'it', 'stood', ',', 'As', 'two', 'spent', 'Swimmers', ',', 'that', 'doe', 'cling', 'together', ',', 'And', 'choake', 'their', 'Art', ':', 'The', 'mercilesse', 'Macdonwald', '(', 'Worthie', 'to', 'be', 'a', 'Rebell', ',', 'for', 'to', 'that', 'The', 'multiplying', 'Villanies', 'of', 'Nature', 'Doe', 'swarme', 'vpon', 'him', ')', 'from', 'the', 'Westerne', 'Isles', 'Of', 'Kernes', 'and', 'Gallowgrosses', 'is', 'supply', "'", 'd', ',', 'And', 'Fortune', 'on', 'his', 'damned', 'Quarry', 'smiling', ',', 'Shew', "'", 'd', 'like', 'a', 'Rebells', 'Whore', ':', 'but', 'all', "'", 's', 'too', 'weake', ':', 'For', 'braue', 'Macbeth', '(', 'well', 'hee', 'deserues', 'that', 'Name', ')', 'Disdayning', 'Fortune', ',', 'with', 'his', 'brandisht', 'Steele', ',', 'Which', 'smoak', "'", 'd', 'with', 'bloody', 'execution', '(', 'Like', 'Valours', 'Minion', ')', 'caru', "'", 'd', 'out', 'his', 'passage', ',', 'Till', 'hee', 'fac', "'", 'd', 'the', 'Slaue', ':', 'Which', 'neu', "'", 'r', 'shooke', 'hands', ',', 'nor', 'bad', 'farwell', 'to', 'him', ',', 'Till', 'he', 'vnseam', "'", 'd', 'him', 'from', 'the', 'Naue', 'toth', "'", 'Chops', ',', 'And', 'fix', "'", 'd', 'his', 'Head', 'vpon', 'our', 'Battlements']]
    

    网络和聊天文本

    from nltk.corpus import webtext
    
    for fileid in webtext.fileids():
        print(fileid, webtext.raw(fileid)[:65], '...') #Firefox 交流论坛,在纽约无意听到的对话,《加勒比海盗》的电影剧本,个人广告和葡萄酒的评论
    
    firefox.txt Cookie Manager: "Don't allow sites that set removed cookies to se ...
    grail.txt SCENE 1: [wind] [clop clop clop] 
    KING ARTHUR: Whoa there!  [clop ...
    overheard.txt White guy: So, do you have any plans for this evening?
    Asian girl ...
    pirates.txt PIRATES OF THE CARRIBEAN: DEAD MAN'S CHEST, by Ted Elliott & Terr ...
    singles.txt 25 SEXY MALE, seeks attrac older single lady, for discreet encoun ...
    wine.txt Lovely delicate, fragrant Rhone wine. Polished leather and strawb ...
    
    from nltk.corpus import nps_chat  
    
    chatroom = nps_chat.posts('10-19-20s_706posts.xml') #例如:10-19-20s_706posts.xml 包含2006 年10 月19 日从20 多岁聊天室收集的706 个帖子。
    print(chatroom[123])
    
    ['i', 'do', "n't", 'want', 'hot', 'pics', 'of', 'a', 'female', ',', 'I', 'can', 'look', 'in', 'a', 'mirror', '.']
    

    布朗语料库

    布朗语料库是第一个百万词级的英语电子语料库的,由布朗大学于1961 年创建。这个语料库包含500 个不同来源的文本,按照文体分类,如:新闻、社论等。

    表2-1. 布朗语料库每一部分的示例文档

    ID 文件 文体 描述
    A16 ca16 新闻 news Chicago Tribune: Society Reportage
    B02 cb02 社论 editorial Christian Science Monitor: Editorials
    C17 cc17 评论 reviews Time Magazine: Reviews
    D12 cd12 宗教 religion Underwood: Probing the Ethics of Realtors
    E36 ce36 爱好 hobbies Norling: Renting a Car in Europe
    F25 cf25 传说 lore Boroff: Jewish Teenage Culture
    G22 cg22 纯文学 belles_lettres Reiner: Coping with Runaway Technology
    H15 ch15 政府 government US Office of Civil and Defence Mobilization: The Family Fallout Shelter
    J17 cj19 博览 learned Mosteller: Probability with Statistical Applications
    K04 ck04 小说 fiction W.E.B. Du Bois: Worlds of Color
    L13 cl13 推理小说 mystery Hitchens: Footsteps in the Night
    M01 cm01 科幻 science_fiction Heinlein: Stranger in a Strange Land
    N14 cn15 探险 adventure Field: Rattlesnake Ridge
    P12 cp12 言情 romance Callaghan: A Passion in Rome
    R06 cr06 幽默 humor Thurber: The Future, If Any, of Comedy
    from nltk.corpus import brown
    
    brown.categories()
    
    ['adventure',
     'belles_lettres',
     'editorial',
     'fiction',
     'government',
     'hobbies',
     'humor',
     'learned',
     'lore',
     'mystery',
     'news',
     'religion',
     'reviews',
     'romance',
     'science_fiction']
    
    brown.words(categories='news')
    
    ['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', ...]
    
    brown.words(fileids=['cg22'])
    
    ['Does', 'our', 'society', 'have', 'a', 'runaway', ',', ...]
    
    brown.sents(categories=['news', 'editorial', 'reviews'])
    
    [['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', 'Friday', 'an', 'investigation', 'of', "Atlanta's", 'recent', 'primary', 'election', 'produced', '``', 'no', 'evidence', "''", 'that', 'any', 'irregularities', 'took', 'place', '.'], ['The', 'jury', 'further', 'said', 'in', 'term-end', 'presentments', 'that', 'the', 'City', 'Executive', 'Committee', ',', 'which', 'had', 'over-all', 'charge', 'of', 'the', 'election', ',', '``', 'deserves', 'the', 'praise', 'and', 'thanks', 'of', 'the', 'City', 'of', 'Atlanta', "''", 'for', 'the', 'manner', 'in', 'which', 'the', 'election', 'was', 'conducted', '.'], ...]
    

    布朗语料库是一个研究文体之间的系统性差异——一种叫做文体学的语言学研究——很方便的资源。

    让我们来比较不同文体中的情态动词的用法

    from nltk.corpus import brown
    
    news_text = brown.words(categories='news')
    
    fdist = nltk.FreqDist([w.lower() for w in news_text])
    
    modals = ['can', 'could', 'may', 'might', 'must', 'will']
    
    for m in modals:
        print(m + ':', fdist[m], end=' ')
    
    can: 94 could: 87 may: 93 might: 38 must: 53 will: 389 
    
    modals = ['what', 'when', 'where', 'who', 'why']
    
    for m in modals:
        print(m + ':', fdist[m], end=' ')
    
    what: 95 when: 169 where: 59 who: 268 why: 14 
    

    统计每一个感兴趣的文体。我们使用NLTK 提供的带条件的频率分布函数。

    cfd = nltk.ConditionalFreqDist(
        (genre, word)
        for genre in brown.categories()
        for word in brown.words(categories=genre))
    
    genres = ['news', 'religion', 'hobbies', 'science_fiction', 'romance', 'humor']
    
    modals = ['can', 'could', 'may', 'might', 'must', 'will']
    

    新闻文体中最常见的情态动词是will,而言情文体中最常见的情态动词是could

    cfd.tabulate(conditions=genres, samples=modals)  
    
                      can could   may might  must  will 
               news    93    86    66    38    50   389 
           religion    82    59    78    12    54    71 
            hobbies   268    58   131    22    83   264 
    science_fiction    16    49     4    12     8    16 
            romance    74   193    11    51    45    43 
              humor    16    30     8     8     9    13 
    

    路透社语料库

    from nltk.corpus import reuters
    
    reuters_fileids = reuters.fileids()
    reuters_fileids[1:10]
    
    ['test/14828',
     'test/14829',
     'test/14832',
     'test/14833',
     'test/14839',
     'test/14840',
     'test/14841',
     'test/14842',
     'test/14843']
    
    reuters_categories = reuters.categories()
    reuters_categories[:5]
    
    ['acq', 'alum', 'barley', 'bop', 'carcass']
    
    reuters.categories('training/9865')
    
    ['barley', 'corn', 'grain', 'wheat']
    
    reuters.categories(['training/9865', 'training/9880'])
    
    ['barley', 'corn', 'grain', 'money-fx', 'wheat']
    
    reuters_fileids = reuters.fileids('barley')
    reuters_fileids[:5]
    
    ['test/15618', 'test/15649', 'test/15676', 'test/15728', 'test/15871']
    
    reuters_fileids = reuters.fileids(['barley', 'corn'])
    reuters_fileids[:5]
    
    ['test/14832', 'test/14858', 'test/15033', 'test/15043', 'test/15106']
    
    reuters.words('training/9865')[:5]
    
    ['FRENCH', 'FREE', 'MARKET', 'CEREAL', 'EXPORT']
    

    就职演说语料库

    from nltk.corpus import inaugural
    
    inaugural_fileids = inaugural.fileids()
    inaugural_fileids[:5]
    
    ['1789-Washington.txt',
     '1793-Washington.txt',
     '1797-Adams.txt',
     '1801-Jefferson.txt',
     '1805-Jefferson.txt']
    

    每个文本的年代都出现在它的文件名中。要从文件名中获得年代,我们使用fileid[:4]提取前四个字符。

    print([fileid[:4] for fileid in inaugural.fileids()])
    
    ['1789', '1793', '1797', '1801', '1805', '1809', '1813', '1817', '1821', '1825', '1829', '1833', '1837', '1841', '1845', '1849', '1853', '1857', '1861', '1865', '1869', '1873', '1877', '1881', '1885', '1889', '1893', '1897', '1901', '1905', '1909', '1913', '1917', '1921', '1925', '1929', '1933', '1937', '1941', '1945', '1949', '1953', '1957', '1961', '1965', '1969', '1973', '1977', '1981', '1985', '1989', '1993', '1997', '2001', '2005', '2009']
    

    让我们来看看词汇america 和citizen 随时间推移的使用情况。

    from nltk.corpus import inaugural
    
    cfd = nltk.ConditionalFreqDist(
    ...           (target, fileid[:4])
    ...           for fileid in inaugural.fileids()
    ...           for w in inaugural.words(fileid)
    ...           for target in ['america', 'citizen']
    ...           if w.lower().startswith(target))
    
    cfd.plot()
    

    在这里插入图片描述

    图2-1. 条件频率分布图:计数就职演说语料库中所有以america 或citizen 开始的词。每个演讲单独计数。这样就能观察出随时间变化用法上的演变趋势。计数没有与文档长度进行归一化处理。

    标注文本语料库

    表2-2 列出了其中一些语料库。用于教学和科研的话可以免费下载,有关下载信息请参阅http://www.nltk.org/data

    在其他语言的语料库

    from nltk.corpus import udhr
    
    languages = ['Chickasaw', 'English', 'German_Deutsch',
                 'Greenlandic_Inuktikut', 'Hungarian_Magyar', 'Ibibio_Efik']
    
    cfd = nltk.ConditionalFreqDist(
        (lang, len(word))
        for lang in languages
        for word in udhr.words(lang + '-Latin1'))
    
    cfd.plot(cumulative=True)
    

    在这里插入图片描述

    图2-2. 累积字长分布:内容是“世界人权宣言”的6 个翻译版本

    raw_text= udhr.raw('Chinese_Mandarin-GB2312')
    
    nltk.FreqDist(raw_text).plot() #崩溃........
    

    在这里插入图片描述

    文本语料库的结构

    NLTK 语料库阅读器支持高效的访问大量语料库,并且能用于处理新的语料库。
    文本语料库的常见结构:

    • 孤立语料库 最简单的一种语料库是一些孤立的没有什么特别的组织的文本集合;
    • 分类语料库 一些语料库按如文体(布朗语料库)等分类组织结构;
    • 重叠语料库 一些分类会重叠,如主题类别(路透社语料库);
    • 时变语料库 另外一些语料库可以表示随时间变化语言用法的改变(就职演说语料库)。

    表2-3. NLTK 中定义的基本语料库函数

    示例 描述
    fileids() 语料库中的文件
    fileids([categories]) 这些分类对应的语料库中的文件
    categories() 语料库中的分类
    categories([fileids]) 这些文件对应的语料库中的分类
    raw() 语料库的原始内容
    raw(fileids=[f1,f2,f3]) 指定文件的原始内容
    raw(categories=[c1,c2]) 指定分类的原始内容
    words() 整个语料库中的词汇
    words(fileids=[f1,f2,f3]) 指定文件中的词汇
    words(categories=[c1,c2]) 指定分类中的词汇
    sents() 指定分类中的句子
    sents(fileids=[f1,f2,f3]) 指定文件中的句子
    sents(categories=[c1,c2]) 指定分类中的句子
    abspath(fileid) 指定文件在磁盘上的位置
    encoding(fileid) 文件的编码(如果知道的话)
    open(fileid) 打开指定语料库文件的文件流
    root() 到本地安装的语料库根目录的路径
    raw = gutenberg.raw("burgess-busterbrown.txt")
    raw[1:20]
    
    'The Adventures of B'
    
    words = gutenberg.words("burgess-busterbrown.txt")
    words[1:5]
    
    ['The', 'Adventures', 'of', 'Buster']
    
    sents = gutenberg.sents("burgess-busterbrown.txt")
    sents[1:3]
    
    [['I'], ['BUSTER', 'BEAR', 'GOES', 'FISHING']]
    

    载入你自己的语料库

    如果你有自己收集的文本文件,并且想使用前面讨论的方法访问它们,你可以很容易地在NLTK 中的PlaintextCorpusReader 帮助下载入它们。检查你的文件在文件系统中的位置;在下面的例子中,我们假定你的文件在/usr/share/dict 目录下。不管是什么位置,将变量corpus_root?的值设置为这个目录。PlaintextCorpusReader 初始化函数?的第二个参数可以是一个如[‘a.txt’, ‘test/b.txt’]这样的fileids 链表,或者一个匹配所有fileids 的模式,如:’[abc]/.*.txt’。

    # from nltk.corpus import PlaintextCorpusReader
    # corpus_root = '/usr/share/dict'
    # wordlists = PlaintextCorpusReader(corpus_root, '.*')
    # wordlists.fileids()
    # wordlists.words(' ...')
    

    中文自然语言处理 语料/数据集

    https://github.com/SophonPlus/ChineseNlpCorpus

    情感/观点/评论 倾向性分析

    1、ChnSentiCorp_htl_all 数据集
    ■数据概览:7000 多条酒店评论数据,5000 多条正向评论,2000 多条负向评论
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/ChnSentiCorp_htl_all/intro.ipynb

    2、waimai_10k 数据集

    ■数据概览:某外卖平台收集的用户评价,正向 4000 条,负向 约 8000 条
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/waimai_10k/intro.ipynb

    3、online_shopping_10_cats 数据集
    ■数据概览:10 个类别,共 6 万多条评论数据,正、负向评论各约 3 万条, 包括书籍、平板、手机、水果、洗发水、热水器、蒙牛、衣服、计算机、酒店
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/online_shopping_10_cats/intro.ipynb

    4、weibo_senti_100k 数据集
    ■数据概览:10 万多条,带情感标注 新浪微博,正负向评论约各 5 万条
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/weibo_senti_100k/intro.ipynb

    5、simplifyweibo_4_moods 数据集
    ■数据概览:36 万多条,带情感标注 新浪微博,包含 4 种情感, 其中喜悦约 20 万条,愤怒、厌恶、低落各约 5 万条
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/simplifyweibo_4_moods/intro.ipynb

    6、dmsc_v2 数据集
    ■数据概览:28 部电影,超 70 万 用户,超 200 万条 评分/评论 数据
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/dmsc_v2/intro.ipynb

    7、yf_dianping 数据集
    ■数据概览:24 万家餐馆,54 万用户,440 万条评论/评分数据
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/yf_dianping/intro.ipynb

    8、yf_amazon 数据集
    ■数据概览:52 万件商品,1100 多个类目,142 万用户,720 万条评论/评分数据
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/yf_amazon/intro.ipynb

    中文命名实体识别

    dh_msra 数据集

    ■数据概览:5 万多条中文命名实体识别标注数据(包括地点、机构、人物)

    ■下载地址:

    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/dh_msra/intro.ipynb

    推荐系统


    1、ez_douban 数据集
    ■数据概览:5 万多部电影(3 万多有电影名称,2 万多没有电影名称),2.8 万 用户,280 万条评分数据
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/ez_douban/intro.ipynb

    2、dmsc_v2 数据集
    ■数据概览:28 部电影,超 70 万 用户,超 200 万条 评分/评论 数据
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/dmsc_v2/intro.ipynb

    3、yf_dianping 数据集
    ■数据概览:24 万家餐馆,54 万用户,440 万条评论/评分数据
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/yf_dianping/intro.ipynb

    4、yf_amazon 数据集
    ■数据概览:52 万件商品,1100 多个类目,142 万用户,720 万条评论/评分数据
    ■下载地址:
    https://github.com/SophonPlus/ChineseNlpCorpus/blob/master/datasets/yf_amazon/intro.ipynb

    2.2 条件频率分布

    频率分布计算观察到的事件,如文本中出现的词汇。条件频率分布需要给每个时间关联一个条件,所以不是处理一个词序列,我们必须处理的是一个配对序列。

    条件和事件

    text = ['The', 'Fulton', 'County', 'Grand', 'Jury', 'said', ...]
    
    pairs = [('news', 'The'), ('news', 'Fulton'), ('news', 'County'), ...] #每对的形式是:(条件,事件)
    

    按文体计数词汇

    FreqDist()以一个简单的链表作为输入,ConditionalFreqDist()以一个配对链表作为输入。

    import nltk
    from nltk.corpus import brown
    
    cfd = nltk.ConditionalFreqDist(
        (genre, word)
        for genre in brown.categories()
        for word in brown.words(categories=genre))
    
    genre_word = [(genre, word) 
        for genre in ['news', 'romance']
        for word in brown.words(categories=genre)]
    
    len(genre_word)
    
    170576
    
    genre_word[:4]
    
    [('news', 'The'), ('news', 'Fulton'), ('news', 'County'), ('news', 'Grand')]
    
    genre_word[-3:]
    
    [('romance', 'not'), ('romance', "''"), ('romance', '.')]
    
    cfd = nltk.ConditionalFreqDist(genre_word)
    
    print(cfd)
    
    <ConditionalFreqDist with 2 conditions>
    
    cfd.conditions()
    
    ['news', 'romance']
    
    print(cfd['news'])
    
    <FreqDist with 14394 samples and 100554 outcomes>
    
    print(cfd['romance'])
    
    <FreqDist with 8452 samples and 70022 outcomes>
    

    绘制分布图和分布表

    from nltk.corpus import inaugural
    
    cfd = nltk.ConditionalFreqDist(
        (target, fileid[:4])
        for fileid in inaugural.fileids()
        for w in inaugural.words(fileid)
        for target in ['america', 'citizen']
        if w.lower().startswith(target))
    
    from nltk.corpus import udhr
    
    languages = ['Chickasaw', 'English', 'German_Deutsch', 'Greenlandic_Inuktikut', 'Hungarian_Magyar', 'Ibibio_Efik']
    
    cfd = nltk.ConditionalFreqDist(
        (lang, len(word)) 
        for lang in languages
        for word in udhr.words(lang + '-Latin1'))
    
    cfd.tabulate(conditions=['English', 'German_Deutsch'],
                 samples=range(10), cumulative=True)
    
                      0    1    2    3    4    5    6    7    8    9 
           English    0  185  525  883  997 1166 1283 1440 1558 1638 
    German_Deutsch    0  171  263  614  717  894 1013 1110 1213 1275 
    

    使用双连词生成随机文本

    sent = ['In', 'the', 'beginning', 'God', 'created', 'the', 'heaven','and', 'the', 'earth', '.']
    
    list(nltk.bigrams(sent))
    
    [('In', 'the'),
     ('the', 'beginning'),
     ('beginning', 'God'),
     ('God', 'created'),
     ('created', 'the'),
     ('the', 'heaven'),
     ('heaven', 'and'),
     ('and', 'the'),
     ('the', 'earth'),
     ('earth', '.')]
    

    例2-1. 产生随机文本:此程序获得《创世记》文本中所有的双连词,然后构造一个条件频率分布来记录哪些词汇最有可能跟在给定词的后面;例如:living 后面最可能的词是creature;generate_model()函数使用这些数据和种子词随机产生文本。

    def generate_model(cfdist, word, num=15):
        for i in range(num):
            print(word, end=' ')
            word = cfdist[word].max()
            
    text = nltk.corpus.genesis.words('english-kjv.txt')
    bigrams = nltk.bigrams(text)
    cfd = nltk.ConditionalFreqDist(bigrams)
    
    cfd['living']
    
    FreqDist({',': 1,
              '.': 1,
              'creature': 7,
              'soul': 1,
              'substance': 2,
              'thing': 4})
    
    generate_model(cfd, 'living')
    
    living creature that he said , and the land of the land of the land 
    

    表2-4. NLTK 中的条件频率分布:定义、访问和可视化一个计数的条件频率分布的常用方法和习惯用法

    示例 描述
    cfdist= ConditionalFreqDist(pairs) 从配对链表中创建条件频率分布
    cfdist.conditions() 将条件按字母排序
    cfdist[condition] 此条件下的频率分布
    cfdist[condition][sample] 此条件下给定样本的频率
    cfdist.tabulate() 为条件频率分布制表
    cfdist.tabulate(samples, conditions) 指定样本和条件限制下制表
    cfdist.plot() 为条件频率分布绘图
    cfdist.plot(samples, conditions) 指定样本和条件限制下绘图
    cfdist1 < cfdist2 测试样本在cfdist1 中出现次数是否小于在cfdist2 中出现次数

    2.3 更多关于Python代码重用

    使用文本编辑器创建程序

    • 使用IDLE
    • Spider

    函数

    def lexical_diversity(text):
        return len(text) / len(set(text)) #关键字return 表示函数作为输出而产生的值
    
    def lexical_diversity(my_text_data):
        #局部变量,不能在函数体外访问。
        word_count = len(my_text_data)    
        vocab_size = len(set(my_text_data))
        diversity_score = word_count / vocab_size
        return diversity_score
    

    例2-2. 一个Python 函数:这个函数试图生成任何英语名词的复数形式。关键字def(define)后面跟着函数的名称,然后是包含在括号内的参数和一个冒号;函数体是缩进代码块;它试图识别词内的模式,相应的对词进行处理;例如:如果这个词以y 结尾,删除它们并添加ies。

    def plural(word):
        if word.endswith('y'): #使用对象的名字,一个点,然后跟函数的名称。这些函数通常被称为方法。
            return word[:-1] + 'ies'
        elif word[-1] in 'sx' or word[-2:] in ['sh', 'ch']:
            return word + 'es'
        elif word.endswith('an'):
            return word[:-2] + 'en'
        else:
            return word + 's'
    
    plural('fairy')
    
    'fairies'
    
    plural('woman')
    
    'women'
    

    模块

    请将你的plural函数保存到一个文件:textproc.py

    from textproc import plural
    
    plural('woman')
    
    'women'
    

    2.4 词典资源

    词汇列表语料库

    例2-3. 过滤文本:此程序计算文本的词汇表,然后删除所有在现有的词汇列表中出现的元素,只留下罕见或拼写错误的词。

    def unusual_words(text):
        text_vocab = set(w.lower() for w in text if w.isalpha())
        english_vocab = set(w.lower() for w in nltk.corpus.words.words())
        unusual = text_vocab.difference(english_vocab)
        return sorted(unusual)
    
    len(unusual_words(nltk.corpus.gutenberg.words('austen-sense.txt')))
    
    1601
    
    len(unusual_words(nltk.corpus.nps_chat.words()))
    
    2095
    

    还有一个停用词语料库,就是那些高频词汇,如:the,to,我们有时在进一步的处理之前想要将它们从文档中过滤。

    from nltk.corpus import stopwords
    
    len(stopwords.words('english'))
    
    179
    

    定义一个函数来计算文本中没有在停用词列表中的词的比例

    def content_fraction(text):
        stopwords = nltk.corpus.stopwords.words('english')
        content = [w for w in text if w.lower() not in stopwords]
        return len(content) / len(text)
    
    content_fraction(nltk.corpus.reuters.words())
    
    0.735240435097661
    

    图2-6. 一个字母拼词谜题:在由随机选择的字母组成的网格中,选择里面的字母组成词。这个谜题叫做“目标”。图中文字的意思是:用这里显示的字母你能组成多少个4 字母或者更多字母的词?每个字母在每个词中只能被用一次。每个词必须包括中间的字母并且必须至少有一个9 字母的词。没有复数以“s”结尾;没有外来词;没有姓名。能组出21 个词就是“好”;32 个词,“很好”;42 个词,“非常好”。

    puzzle_letters = nltk.FreqDist('egivrvonl')
    
    obligatory = 'r'
    
    wordlist = nltk.corpus.words.words()
    
    [w for w in wordlist if len(w) >= 6 
        and obligatory in w 
        and nltk.FreqDist(w) <= puzzle_letters][:5]
    
    ['glover', 'gorlin', 'govern', 'grovel', 'ignore']
    
    names = nltk.corpus.names
    
    names.fileids()
    
    ['female.txt', 'male.txt']
    
    male_names = names.words('male.txt')
    
    female_names = names.words('female.txt')
    
    [w for w in male_names if w in female_names][:5]
    
    ['Abbey', 'Abbie', 'Abby', 'Addie', 'Adrian']
    
    cfd = nltk.ConditionalFreqDist(
        (fileid, name[-1])
        for fileid in names.fileids()
        for name in names.words(fileid))
    
    cfd.plot()
    

    在这里插入图片描述

    发音的词典

    entries = nltk.corpus.cmudict.entries()
    
    len(entries)
    
    133737
    
    for entry in entries[39943:39951]:
        print(entry)
    
    ('explorer', ['IH0', 'K', 'S', 'P', 'L', 'AO1', 'R', 'ER0'])
    ('explorers', ['IH0', 'K', 'S', 'P', 'L', 'AO1', 'R', 'ER0', 'Z'])
    ('explores', ['IH0', 'K', 'S', 'P', 'L', 'AO1', 'R', 'Z'])
    ('exploring', ['IH0', 'K', 'S', 'P', 'L', 'AO1', 'R', 'IH0', 'NG'])
    ('explosion', ['IH0', 'K', 'S', 'P', 'L', 'OW1', 'ZH', 'AH0', 'N'])
    ('explosions', ['IH0', 'K', 'S', 'P', 'L', 'OW1', 'ZH', 'AH0', 'N', 'Z'])
    ('explosive', ['IH0', 'K', 'S', 'P', 'L', 'OW1', 'S', 'IH0', 'V'])
    ('explosively', ['EH2', 'K', 'S', 'P', 'L', 'OW1', 'S', 'IH0', 'V', 'L', 'IY0'])
    
    for word, pron in entries: 
        if len(pron) == 3:
            ph1, ph2, ph3 = pron
            if ph1 == 'P' and ph3 == 'T':
                print(word, ph2, end=' ')
    
    pait EY1 pat AE1 pate EY1 patt AE1 peart ER1 peat IY1 peet IY1 peete IY1 pert ER1 pet EH1 pete IY1 pett EH1 piet IY1 piette IY1 pit IH1 pitt IH1 pot AA1 pote OW1 pott AA1 pout AW1 puett UW1 purt ER1 put UH1 putt AH1 
    
    syllable = ['N', 'IH0', 'K', 'S']
    
    [word for word, pron in entries if pron[-4:] == syllable][:5]  #使用此方法来找到押韵的词
    
    ["atlantic's", 'audiotronics', 'avionics', 'beatniks', 'calisthenics']
    
    [w for w, pron in entries if pron[-1] == 'M' and w[-1] == 'n'][:5]
    
    ['autumn', 'column', 'condemn', 'damn', 'goddamn']
    
    sorted(set(w[:2] for w, pron in entries if pron[0] == 'N' and w[0] != 'n'))
    
    ['gn', 'kn', 'mn', 'pn']
    
    def stress(pron):
        return [char for phone in pron for char in phone if char.isdigit()]
    
    [w for w, pron in entries if stress(pron) == ['0', '1', '0', '2', '0']][:5]
    
    ['abbreviated', 'abbreviated', 'abbreviating', 'accelerated', 'accelerating']
    
    [w for w, pron in entries if stress(pron) == ['0', '2', '0', '1', '0']][:5]
    
    ['abbreviation',
     'abbreviations',
     'abomination',
     'abortifacient',
     'abortifacients']
    
    p3 = [(pron[0]+'-'+pron[2], word) 
        for (word, pron) in entries
        if pron[0] == 'P' and len(pron) == 3]
    
    cfd = nltk.ConditionalFreqDist(p3)
    
    for template in cfd.conditions():
        if len(cfd[template]) > 10:
            words = cfd[template].keys()
            wordlist = ' '.join(words)
            print(template, wordlist[:70] + "...")
    
    P-S pus peace pesce pass puss purse piece perse pease perce pasts poss pos...
    P-N pain penn pyne pinn poon pine pin paine penh paign peine pawn pun pane...
    P-T pat peart pout put pit purt putt piet pert pet pote pate patt piette p...
    P-UW1 pru plue prue pshew prugh prew peru peugh pugh pew plew...
    P-K pique pack paque paek perk poke puck pik polk purk peak poch pake perc...
    P-Z poe's pas pei's pows pao's pose purrs peas paiz pies pays pause p.s pa...
    P-CH perch petsch piech petsche piche peach pautsch pouch pietsch pitsch pu...
    P-P pipp papp pep pope paup pop popp pup poop pape poppe pip paap paape pe...
    P-R pour poor poore parr porr pear peer pore pier paar por pare pair par...
    P-L pal pall peil pehl peele paille pile poll pearl peale perle pull pill ...
    
    prondict = nltk.corpus.cmudict.dict()
    
    prondict['fire'] #通过指定词典的名字后面跟一个包含在方括号里的关键字(例如:词fire)来查词典
    
    [['F', 'AY1', 'ER0'], ['F', 'AY1', 'R']]
    
    prondict['blog']
    
    ---------------------------------------------------------------------------
    
    KeyError                                  Traceback (most recent call last)
    
    <ipython-input-175-f0ffb282ba9a> in <module>()
    ----> 1 prondict['blog']
    
    
    KeyError: 'blog'
    
    prondict['blog'] = [['B', 'L', 'AA1', 'G']]
    
    prondict['blog']
    
    [['B', 'L', 'AA1', 'G']]
    
    text = ['natural', 'language', 'processing']
    
    [ph for w in text for ph in prondict[w][0]][:5]
    
    ['N', 'AE1', 'CH', 'ER0', 'AH0']
    

    比较词表

    斯瓦迪士核心词列表(Swadesh wordlists)

    from nltk.corpus import swadesh
    
    swadesh.fileids()[:5]
    
    ['be', 'bg', 'bs', 'ca', 'cs']
    
    swadesh.words('en')[:5]
    
    ['I', 'you (singular), thou', 'he', 'we', 'you (plural)']
    
    fr2en = swadesh.entries(['fr', 'en'])
    
    fr2en[:5]
    
    [('je', 'I'),
     ('tu, vous', 'you (singular), thou'),
     ('il', 'he'),
     ('nous', 'we'),
     ('vous', 'you (plural)')]
    
    translate = dict(fr2en)
    
    translate['chien']
    
    'dog'
    
    translate['jeter']
    
    'throw'
    
    de2en = swadesh.entries(['de', 'en']) # German-English
    
    es2en = swadesh.entries(['es', 'en']) # Spanish-English
    
    translate.update(dict(de2en))
    
    translate.update(dict(es2en))
    
    translate['Hund']
    
    'dog'
    
    translate['perro']
    
    'dog'
    
    languages = ['en', 'de', 'nl', 'es', 'fr', 'pt', 'la']
    
    for i in [139, 140, 141, 142]:
        print(swadesh.entries(languages)[i])
    
    ('say', 'sagen', 'zeggen', 'decir', 'dire', 'dizer', 'dicere')
    ('sing', 'singen', 'zingen', 'cantar', 'chanter', 'cantar', 'canere')
    ('play', 'spielen', 'spelen', 'jugar', 'jouer', 'jogar, brincar', 'ludere')
    ('float', 'schweben', 'zweven', 'flotar', 'flotter', 'flutuar, boiar', 'fluctuare')
    

    词汇工具:Toolbox和Shoebox

    Toolbox(工具箱),以前叫做Shoebox

    from nltk.corpus import toolbox
    
    toolbox.entries('rotokas.dic')[:1]
    
    [('kaa',
      [('ps', 'V'),
       ('pt', 'A'),
       ('ge', 'gag'),
       ('tkp', 'nek i pas'),
       ('dcsv', 'true'),
       ('vx', '1'),
       ('sc', '???'),
       ('dt', '29/Oct/2005'),
       ('ex', 'Apoka ira kaaroi aioa-ia reoreopaoro.'),
       ('xp', 'Kaikai i pas long nek bilong Apoka bikos em i kaikai na toktok.'),
       ('xe', 'Apoka is gagging from food while talking.')])]
    

    2.5 WordNet

    NLTK 中包括英语WordNet,共有155,287 个词和117,659 个同义词集合。

    意义与同义词

    from nltk.corpus import wordnet as wn
    
    wn.synsets('motorcar') #car.n.01被称为synset或“同义词集”,意义相同的词(或“词条”)的集合
    
    [Synset('car.n.01')]
    
    wn.synset('car.n.01').lemma_names() #同义词
    
    ['car', 'auto', 'automobile', 'machine', 'motorcar']
    
    wn.synset('car.n.01').definition() #synset或“同义词集”
    
    'a motor vehicle with four wheels; usually propelled by an internal combustion engine'
    
    wn.synset('car.n.01').examples()
    
    ['he needs a car to get to work']
    
    wn.synset('car.n.01').lemmas()
    
    [Lemma('car.n.01.car'),
     Lemma('car.n.01.auto'),
     Lemma('car.n.01.automobile'),
     Lemma('car.n.01.machine'),
     Lemma('car.n.01.motorcar')]
    
    wn.lemma('car.n.01.automobile')
    
    Lemma('car.n.01.automobile')
    
    wn.lemma('car.n.01.automobile').synset()
    
    Synset('car.n.01')
    
    wn.lemma('car.n.01.automobile').name()
    
    'automobile'
    
    wn.synsets('car')
    
    [Synset('car.n.01'),
     Synset('car.n.02'),
     Synset('car.n.03'),
     Synset('car.n.04'),
     Synset('cable_car.n.01')]
    
    for synset in wn.synsets('car'):
        print(synset.lemma_names())
    
    ['car', 'auto', 'automobile', 'machine', 'motorcar']
    ['car', 'railcar', 'railway_car', 'railroad_car']
    ['car', 'gondola']
    ['car', 'elevator_car']
    ['cable_car', 'car']
    
    wn.lemmas('car')
    
    [Lemma('car.n.01.car'),
     Lemma('car.n.02.car'),
     Lemma('car.n.03.car'),
     Lemma('car.n.04.car'),
     Lemma('cable_car.n.01.car')]
    

    WordNet的层次结构

    motorcar = wn.synset('car.n.01') #下位词
    
    types_of_motorcar = motorcar.hyponyms()
    
    types_of_motorcar[26]
    
    Synset('stanley_steamer.n.01')
    
    sorted(lemma.name() for synset in types_of_motorcar for lemma in synset.lemmas())[:5]
    
    ['Model_T', 'S.U.V.', 'SUV', 'Stanley_Steamer', 'ambulance']
    
    motorcar.hypernyms()
    
    [Synset('motor_vehicle.n.01')]
    
    paths = motorcar.hypernym_paths()
    
    len(paths)
    
    2
    
    [synset.name for synset in paths[0]]
    
    [<bound method Synset.name of Synset('entity.n.01')>,
     <bound method Synset.name of Synset('physical_entity.n.01')>,
     <bound method Synset.name of Synset('object.n.01')>,
     <bound method Synset.name of Synset('whole.n.02')>,
     <bound method Synset.name of Synset('artifact.n.01')>,
     <bound method Synset.name of Synset('instrumentality.n.03')>,
     <bound method Synset.name of Synset('container.n.01')>,
     <bound method Synset.name of Synset('wheeled_vehicle.n.01')>,
     <bound method Synset.name of Synset('self-propelled_vehicle.n.01')>,
     <bound method Synset.name of Synset('motor_vehicle.n.01')>,
     <bound method Synset.name of Synset('car.n.01')>]
    
    [synset.name for synset in paths[1]]
    
    [<bound method Synset.name of Synset('entity.n.01')>,
     <bound method Synset.name of Synset('physical_entity.n.01')>,
     <bound method Synset.name of Synset('object.n.01')>,
     <bound method Synset.name of Synset('whole.n.02')>,
     <bound method Synset.name of Synset('artifact.n.01')>,
     <bound method Synset.name of Synset('instrumentality.n.03')>,
     <bound method Synset.name of Synset('conveyance.n.03')>,
     <bound method Synset.name of Synset('vehicle.n.01')>,
     <bound method Synset.name of Synset('wheeled_vehicle.n.01')>,
     <bound method Synset.name of Synset('self-propelled_vehicle.n.01')>,
     <bound method Synset.name of Synset('motor_vehicle.n.01')>,
     <bound method Synset.name of Synset('car.n.01')>]
    
    motorcar.root_hypernyms()
    
    [Synset('entity.n.01')]
    

    更多的词汇关系

    wn.synset('tree.n.01').part_meronyms() #一棵树的部分是它的树干,树冠等;这些都是part_meronyms()
    
    [Synset('burl.n.02'),
     Synset('crown.n.07'),
     Synset('limb.n.02'),
     Synset('stump.n.01'),
     Synset('trunk.n.01')]
    
    wn.synset('tree.n.01').substance_meronyms()  #一棵树的实质是包括心材和边材组成的,即substance_meronyms()
    
    [Synset('heartwood.n.01'), Synset('sapwood.n.01')]
    
    wn.synset('tree.n.01').member_holonyms() #树木的集合形成了一个森林,即member_holonyms()
    
    [Synset('forest.n.01')]
    
    for synset in wn.synsets('mint', wn.NOUN):
        print(synset.name() + ':', synset.definition())
    
    batch.n.02: (often followed by `of') a large number or amount or extent
    mint.n.02: any north temperate plant of the genus Mentha with aromatic leaves and small mauve flowers
    mint.n.03: any member of the mint family of plants
    mint.n.04: the leaves of a mint plant used fresh or candied
    mint.n.05: a candy that is flavored with a mint oil
    mint.n.06: a plant where money is coined by authority of the government
    
    wn.synset('mint.n.04').part_holonyms()
    
    [Synset('mint.n.02')]
    
    wn.synset('mint.n.04').substance_holonyms()
    
    [Synset('mint.n.05')]
    

    动词之间也有关系。例如:走路的动作包括抬脚的动作,所以走路蕴涵着抬脚。一些动词有多个蕴涵:

    wn.synset('walk.v.01').entailments()
    
    [Synset('step.v.01')]
    
    wn.synset('eat.v.01').entailments()
    
    [Synset('chew.v.01'), Synset('swallow.v.01')]
    
    wn.synset('tease.v.03').entailments()
    
    [Synset('arouse.v.07'), Synset('disappoint.v.01')]
    

    词条之间的一些词汇关系,如:反义词

    wn.lemma('supply.n.02.supply').antonyms()
    
    [Lemma('demand.n.02.demand')]
    
    wn.lemma('rush.v.01.rush').antonyms()
    
    [Lemma('linger.v.04.linger')]
    
    wn.lemma('horizontal.a.01.horizontal').antonyms()
    
    [Lemma('vertical.a.01.vertical'), Lemma('inclined.a.02.inclined')]
    
    wn.lemma('staccato.r.01.staccato').antonyms()
    
    [Lemma('legato.r.01.legato')]
    

    语义相似度

    right = wn.synset('right_whale.n.01')
    orca = wn.synset('orca.n.01')
    minke = wn.synset('minke_whale.n.01')
    tortoise = wn.synset('tortoise.n.01')
    novel = wn.synset('novel.n.01')
    right.lowest_common_hypernyms(minke)
    
    [Synset('baleen_whale.n.01')]
    
    right.lowest_common_hypernyms(orca)
    
    [Synset('whale.n.02')]
    
    right.lowest_common_hypernyms(tortoise)
    
    [Synset('vertebrate.n.01')]
    
    right.lowest_common_hypernyms(novel)
    
    [Synset('entity.n.01')]
    
    wn.synset('baleen_whale.n.01').min_depth()
    
    14
    
    wn.synset('whale.n.02').min_depth()
    
    13
    
    wn.synset('vertebrate.n.01').min_depth()
    
    8
    
    wn.synset('entity.n.01').min_depth()
    
    0
    
    right.path_similarity(minke)
    
    0.25
    
    right.path_similarity(orca)
    
    0.16666666666666666
    
    right.path_similarity(tortoise)
    
    0.07692307692307693
    
    right.path_similarity(novel)
    
    0.043478260869565216
    

    还有一些其它的相似性度量方法;NLTK 还包括VerbNet,一个连接到WordNet 的动词的层次结构的词典。

    2.6 小结

    • 文本语料库是一个大型结构化文本的集合。NLTK 包含了许多语料库,如:布朗语料库nltk.corpus.brown。
    • 有些文本语料库是分类的,例如通过文体或者主题分类;有时候语料库的分类会相互重叠。
    • 条件频率分布是一个频率分布的集合,每个分布都有一个不同的条件。它们可以用于通过给定内容或者文体对词的频率计数。
    • 行数较多的Python 程序应该使用文本编辑器来输入,保存为.py 后缀的文件,并使用import 语句来访问。
    • Python 函数允许你将一段特定的代码块与一个名字联系起来,然后重用这些代码想用多少次就用多少次。
    • 一些被称为“方法”的函数与一个对象联系在起来,我们使用对象名称跟一个点然后跟方法名称来调用它,就像:x.funct(y)或者word.isalpha()。
    • 要想找到一些关于变量v 的信息,可以在Pyhon 交互式解释器中输入help(v)来阅读这一类对象的帮助条目。
    • WordNet 是一个面向语义的英语词典,由同义词的集合—或称为同义词集(synsets)—组成,并且组织成一个网络。
    • 默认情况下有些函数是不能使用的,必须使用Python 的import 语句来访问。
    
    

    致谢
    《Python自然语言处理》123 4,作者:Steven Bird, Ewan Klein & Edward Loper,是实践性很强的一部入门读物,2009年第一版,2015年第二版,本学习笔记结合上述版本,对部分内容进行了延伸学习、练习,在此分享,期待对大家有所帮助,欢迎加我微信(验证:NLP),一起学习讨论,不足之处,欢迎指正。
    在这里插入图片描述

    参考文献


    1. http://nltk.org/ ↩︎

    2. Steven Bird, Ewan Klein & Edward Loper,Natural Language Processing with Python,2009 ↩︎

    3. (英)伯德,(英)克莱因,(美)洛普,《Python自然语言处理》,2010年,东南大学出版社 ↩︎

    4. Steven Bird, Ewan Klein & Edward Loper,Natural Language Processing with Python,2015 ↩︎

    展开全文
  • 在学习时遇到不会的英语词汇,会第一时间找翻译,有道翻译就是首选。今天教大家如何去获取有道翻译手机版的翻译接口。 【二、项目目标】 多国语言的翻译,可以翻译词语或者句子。 【三、涉及的库和网站】 1、网址...

    【一、项目背景】

    有道翻译作为国内最大的翻译软件之一,用户量巨大。在学习时遇到不会的英语词汇,会第一时间找翻译,有道翻译就是首选。今天教大家如何去获取有道翻译手机版的翻译接口。

    image

    【二、项目目标】

       多国语言的翻译,可以翻译词语或者句子。

    【三、涉及的库和网站】

    1、网址如下:

    http://m.youdao.com/translate

    2、涉及的库:requestslxml

    3、软件:PyCharm

    【四、项目分析】

    1、点击F12,点击蓝色窗口切换成手机模式,运行进入开发者模式,点击network,找到headers下面的form Data。

    2、输翻译的词语点击翻译按钮,可以看到这里有两个参数,一个是inputtext(输入的词语),一个是type(代表语种)。

    3、构架一个表单传入这两个参数,通过改变参数的类型,从而 实现多国的翻译。

    4、通过返回的页面进行xpath解析数据。

    image

    【五、项目实施】

    1、导入需要库,创建一个名为YoudaoSpider的类,定义一个初始化方法init。

    import requests
    from lxml import etree
    class YoudaoSpider(object):
        def __init__(self):{
    
            }
    
    if __name__ == '__main__':
        spider = YoudaoSpider()

    2、准备url地址,请求头headers。

    '''准备url地址'''
            self.trans_url="http://m.youdao.com/translate"
            '''请求头'''
            self.headers = {
                "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"

    3、定义get_result方法,传入两个参数,构架表单。

    def get_result(self, word, fro):
            '''构造一个form表单数据---表单是一个字典'''
            data = {
                'inputtext': word,
                'type': fro
    
            }

    4、发送请求, 获取响应,遍历得到的结果。

    response = requests.post(url=self.trans_url, data=data, headers=self.headers)
    
    html = response.content.decode('utf-8')
    pa = etree.HTML(html)
    # print(html)
    pa_list = pa.xpath("//div[@class='generate']/ul/li/text()")
    for i in pa_list:
        print("翻译为:" + i)

    5、判断输入的语种类型,调用get_result方法。

    点击切换语种就可以看得到各国的type类型。例如(中译韩):

    image

    choice = input("1.中翻译英语  2.中翻韩语 3.把中文翻译法语 \n请选择1/2/3:\n")
    if choice == '1':
        fro = 'ZH_CN2EN'
    elif choice == '2':
        fro = 'ZH_CN2SP'
    
    elif choice == '3':
        fro = 'ZH_CN2FR'
    
    word = input("请输入你要翻译的单词或句子:")
    result = spider.get_result(word, fro)

    【六、效果展示】

    1、输入你要翻译的类型。

    image

    2、输入你要翻译的句子。

    image

    【七、总结】

    1、本文基于Python网络爬虫,利用爬虫库,获取有道翻译的接口。

    2、请求接口时构架表单问题进行了详细的讲解。并提供了解决方案。

    3、大家可以尝试的去翻译其他的语言,能够更好的理解爬虫的原理。

    4、自己尝试一下,你会发现你也可以 (世上无难事,只怕有心人)。

    5、需要本文源码的小伙伴,后台回复“有道词典”四个字,即可获取。

    看完本文有收获?请转发分享给更多的人

    IT共享之家

    入群请在微信后台回复【入群】

    image

    想学习更多Python网络爬虫与数据挖掘知识,可前往专业网站:http://pdcfighting.com/

    展开全文
  • 在学习时遇到不会的英语词汇,会第一时间找翻译,有道翻译就是首选。今天教大家如何去获取有道翻译手机版的翻译接口。 image 【二、项目目标】 多国语言的翻译,可以翻译词语或者句子。 【三、涉及的库和网站...
  • 这一版在内容上进行了全面更新,介绍了Python 2.6和Python 3新引入的编程语言特性和库模块,同时还分析Python程序员面临的如下难题:是应继续使用现有的Python代码,还是应制定计划将其移植到Python 3 作者简介 ·...
  • python爬虫基础

    2017-05-10 18:40:00
    爬虫,只要是对网络有一定了解的人,基本上都会听过这个词汇。但是相信大家对于爬虫这个东西具体是干什么,还有怎么干的都不会太清楚。先说一下爬虫是干什么的。简单一句话,爬虫就是模拟人类的使用浏览器的动作,把...
  • 动手Python自然语言处理 这是Packt发布的“ 的代码存储库。 探索工具和技术以分析和处理文本,以构建实际的NLP应用程序 这本书是关于什么的? 本书融合了自然语言处理(NLP)的理论和实践方面。 它涵盖了对NLP...
  • 第三章 加工原料文本 3.1 从网络和硬盘访问文本 1 电子书 古腾堡项目的其它文本可以在线获得, 整个过程大概需要几十秒(实验室网络不行是...这一步被称为分词, 它产生我们所熟悉的结构,一个词汇和标点符号的链
  • 词汇提示(例如,极地词,POS,连词)也用在我们的二级网络中,并采用了新的编码策略。 有关详细信息,请参阅arXiv上的文章:基于p-hot Lexicon嵌入的两级LSTM用于情感分析。( ) 环境:python 3.5或更高版本,...
  • 文本情感分析

    2020-07-11 04:31:34
    文本情感分析:又称意见挖掘、倾向性分析等。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的...之前做过简单的使用python加分类情感词汇库的句子情感分析是比较基础入门的算法,计算待分析文本中.
  • 火炬的实现word2vec和情感分析,如assignment1.pdf中所述。 负采样丢失函数和最大余量学习用于word2vec。 在Terminal.app中,运行python extract_datasets_for_torch.py来为sentiment_analysis.lua生成数据集。 ...
  • 《同义词词林》是梅家驹等人于 1983 年编纂而成,现在使用广泛的是哈工大社会计算与信息检索研究中心维护的《同义词词林扩展版》,它精细的将中文词汇划分成大类和小类,梳理了词汇间的关系,同义词词林扩展版包含...
  • 该存储库包含使用本文解释的原理来解释一维卷积神经网络(1D-CNN)的代码。解释技术在于计算各种n-gram特征的相关性,并确定足够和必要的n-gram。该项目带有一个多通道1D-CNN模型生成器,可用于生成测试模型。 依存...
  • Python进行NLP分析基础示例.zip Python网络数据采集.pdf Tensorflow Tensorflow 基于BM25F模型的Web文本挖掘个性化推荐研究_邵康.pdf 基于Spark的舆情分析架构研究_谭造乐.caj 问答系统研究综述_毛先领 统计自然语言...
  • 程序介绍 这是一个单词频率统计程序 基于python3 自动批量收集文件中的英语单词 txt (utf-8) 统计排序保存到本地数据库voca...部分词汇通过翻译api得到的中文翻译是none,网络原因+翻译网站问题,慢慢解决 六级真题词库
  • 我们主要通过网络爬虫爬取新闻文章中的词语,统计分析词语的频率得到疫情高频词汇数据,在对数据进行可视化生成词云,方便预测预警,舆情分析等。 6.1新闻文章爬虫 6.1.1爬虫接口分析 再设计接口先确定数据来源,...
  • funNLP_fighting41love.tar.gz

    2019-10-20 15:05:11
    中英文敏感词、语言检测、中外手机/电话归属地/运营商查询、名字推断性别、手机号抽取、身份证抽取、邮箱抽取、中日文人名库、中文缩写库、拆字词典、词汇情感值、停用词、反动词表、暴恐词表、繁简体转换、英文模拟...
  • ERNIE、中文对比英文自然语言处理NLP的区别综述、Synonyms中文近义词工具包、HarvestText领域自适应文本挖掘工具(新词发现-情感分析-实体链接等)、word2word:(Python)方便易用的多语言词-词对集:62种语言/3,564...
  • Deep Learning Specialization对卷积神经网络 (CNN)、递归神经网络 (RNN)、长短期记忆 (LSTM) 等深度学习常用的网络结构、工具和知识都有涉及。 课程中也会有很多实操项目,帮助学生更好地应用自己学到的深度学习...
  • 《同义词词林》是梅家驹等人于 1983 年编纂而成,现在使用广泛的是哈工大社会计算与信息检索研究中心维护的《同义词词林扩展版》,它精细的将中文词汇划分成大类和小类,梳理了词汇间的关系,同义词词林扩展版包含...
  • 词汇表 261 关于作者 279 关于封面 279 译者序  对于一位分布式存储系统的开发者,Cassandra 无疑是非常引人注目的,它的无中心架构、高可用性、无缝扩展等继承自亚马逊Dynamo 的特质,相对于其他主从架构的...
  • 适用于许多文本预处理和初步探索性分析任务,在小说分析网络文本,专业文献等领域都有潜在应用价值。 使用案例: 分析《三国演义》中的社交网络(实体分词,文本摘要,关系网络等) 2018中超舆情展示系统...
  • 数据预处理类 Dataset (包括生成词汇空间,获得预训练词向量,分割训练集和验证集) textCNN模型类 TextCNN 模型训练 5. charCNN 文本分类   textCNN模型来源于论文Character-level Convolutional Networks for...
  • 《本地YouTube下载器》作者自己也承认youtube-dl要比《本地YouTube下载器》更好用一些,但《本地YouTube下载器》是一个脚本,无需安装Python开发环境,可以在浏览器直接使用,对普通用户极其友好,所以懒得折腾的非...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

python词汇网络分析

python 订阅