《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:03 理解句子的结构

版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎加本人实名微信(Zhou_zhongliang),一起学习,共同进步。 https://blog.csdn.net/weixin_43935926/article/details/86655110

3.1 理解NLP的组成

3.1.1 自然语言理解

  • 自然语言理解(NLU)是自然语言处理(NLP)第一部分
  • NLU被认为是人工智能难题(AI-Hard),或人工智能完全问题(AI-Complete)
  • NLU被认为是一个人工智能难题,因为我们正试图造出像人一样聪明的计算机
  • NLU很难,但如今,科技巨头和研究团体改进传统机器学习算法并应用各种有助于实现目标的深层神经网络处理自然语言(NL)
  • NLU被定义为使用计算语言学工具,将NL输入转换为有用的表示的过程。
  • NLU需要进行以下分析,才能将NL转换为有用的表示形式:形态分析、词法分析、句法分析、语义分析、处理歧义、篇章整合、语用分析

3.1.2 自然语言生成

自然语言生成(NLG):

  • NLG被认为是自然语言处理(NLP)第二个组成部分。
  • NLG被定义为一个机器将NL作为输出生成的过程。
  • 机器的输出应该是合乎逻辑的,也就是说,不管是什么NL,凡是由机器生成的,应该是逻辑的。
  • 为了生成逻辑输出,许多NLG系统使用基本事实或基于知识的表示。
  • 让我们举个例子。你有一个可以写一篇关于某个话题的系统。如果我正在指示我的机器生成关于奶牛,我的机器生成100个关于奶牛主题的单词,然后输出(这里,100个关于奶牛的单词)机器产生的单词应该是有效的句子,所有的句子都应该逻辑正确,上下文应该也有道理。

3.1.3 NLU和NLG的区别

NLU NLG
无论它是文本还是语音格式,解释本地语言背后的含义。我们可以分析英语、法语、西班牙语、印地语或任何其他人类语言。 有助于使用机器生成NL。
NLU使用各种工具和技术(如POS标记器、解析器等)从NL生成事实,开发NLP应用程序。 NLG从词性标签、解析结果等事实开始,生成NL。
一个阅读和解释语言的过程。 写作的过程,或者生成语言。

3.1.4 NLP的分支

NLP涉及两个主要分支,帮助我们开发NLP应用程序。一个是计算机科学分支,另一个是语言学分支。语言学分支关注如何用各种科学方法分析非语言现象。因此,语言学分支对形式、意义和语境。所有语言学分析都可以借助计算机科学技术来实现。我们可以在机器学习算法中使用分析元素和反馈元素来构建一个NLP应用程序。在这里,机器学习算法是计算机的一部分科学,语言分析是语言学。计算语言学是一个帮助你理解计算机科学和语言学的交叉学科。

下面是一个工具列表,这些工具是在计算机科学技术的帮助下实现的语言学概念。这些工具通常用于开发NLP应用程序:

  • 词性标注,词性标注。使用了 nltk 和 pycorenlp

  • 词形分析器用于生成字级词干。使用了nltk和polyglot

  • 解析器用于识别句子的结构。使用Stanford CoreNLP和nltk生成一个解析树。也可以spaCy。

3.2 上下文无关文法

上下文无关语法(CFG)由四个主要组件定义。这四个组件显示在CFG的符号表示中:

  • 一组非终端符号,N

  • 一组终端符号,T

  • 开始符号S,它是非终端符号

  • 一组称为生产规则P的规则,用于生成句子。
    例如:He likes cricket.

R1: S -> NP VP
R2: NP -> N
R3: NP -> Det N
R4: VP -> V NP
R5: VP -> V
R6: N -> Person Name | He | She | Boy | Girl | It | cricket | song | book
R7: V -> likes | reads | sings
现在,让我们了解如何生成分析树:
1、根据生产规则,我们可以看到S可以重写为名词短语(NP)和动词短语(VP)的组合;见规则R1。
2、NP可以进一步改写为名词(NN)或限定词(Det)后接名词;见规则R2和R3。
3、现在,您可以用动词(V)后跟NP的形式重写VP,或者VP可以重写为V;见规则r4和r5。
4、在这里,N可以改写为人名、他、她等等。N是终端符号;见规则R6。
5、可以使用规则R7中右侧的任何选项重写V。V也是终端符号。

上下文无关语法也称为短语结构语法。

import nltk
grammar1 = nltk.CFG.fromstring("""
    S -> NP VP
    NP -> N
    NP -> Det N
    VP -> V NP
    VP -> V
    N -> "Person Name" | "He" | "She" | "Boy" | "Girl" | "It" | "cricket" | "song" | "book"
    V -> "likes" | "reads" | "sings"
    """)
sent = "He likes cricket".split()
rd_parser = nltk.RecursiveDescentParser(grammar1)
for tree in rd_parser.parse(sent):
    print(tree)
(S (NP (N He)) (VP (V likes) (NP (N cricket))))
练习

1、使用本节前面给出的规则生成分析树,并为以下句子生成分析树:

She sings a song.
grammar1 = nltk.CFG.fromstring("""
    S -> NP VP
    NP -> N
    NP -> Det N
    VP -> V NP
    VP -> V
    Det -> "a" | "an" | "the" | "my"
    N -> "Person Name" | "He" | "She" | "Boy" | "Girl" | "It" | "cricket" | "song" | "book"
    V -> "likes" | "reads" | "sings"
    """)
sent = "She sings a song".split()
rd_parser = nltk.RecursiveDescentParser(grammar1)
for tree in rd_parser.parse(sent):
    print(tree)
(S (NP (N She)) (VP (V sings) (NP (Det a) (N song))))

2、生成生产规则并为以下句子生成分析树:

That boy is reading a book.

3.3 形态分析

3.3.1 形态学

形态学是语言学的一个分支,研究词汇的结构和形成。

3.3.2 词素

在语言学中,语素是给定语言中最小的有意义单位。词素是形态学的重要组成部分,是形态学的基本单位。

让我们举个例子。单词boy由单个语素组成,而boys由两个语素组成;一个是boy,另一个语素-s

3.3.3 词干

词缀附在单词上的部分称为词干。单词tie是词根,untie是词干。

现在,让我们了解形态学分析。

3.3.4 形态分析

形态分析是对词素如何形成的语法分析,词素是词义的最小单位。
语素一般是词缀。这些词缀可分为四种类型:

  • 前缀,出现在词干之前,例如 unhappy
  • 后缀,出现在词干后面,比如 happiness
  • 出现在词干内的中缀,如 Bumili
  • 环绕一个词的是绕行缀。它附着在词干的开始和结束处。例如,kabaddangan

形态分析用于分词和部分词性标注。

3.3.5 词

一个词可以作为一个句子中的单个与一个句子隔离开来,有意义,最小元素。句子中最小的单独部分叫做单词。请再次参考词素的定义,并尝试将其与单词的定义联系起来。可能会混淆单词和词素,或者他们之间有什么区别,看到下表中的差异:

词素 单词
词素可以独立存在,也不能独立存在。单词cat独立但cats标记不能独立。这里cat和-s都是语素。 一个词可以独立存在。所以,单词基本上是独立式单元句子。
当一个词素单独存在时,这个词素就是词根,是因为它传达了自己的含义,否则,词素大多带有词缀。词素的词缀分析是在形态分析中被覆盖。 一个词可以由单词素构成。
例如,cat是一个独立的词素,但是当你考虑cats,那么后缀-s就在这里,它表示cat是一个词素和后缀-s的信息指示给定的语素是猫的复数形式。 例如:cat是一个独立单词。cats也是独立的单词。

3.3.6 词素的分类

词素的分类为我们提供了大量关于形态分析的整个概念信息。词素有两个主要部分:

  • 自由词素

自由词素可以单独存在,并充当一个词。它们也被称为未绑定词素或独立词素。

如:Dog, cats, town, 和 house

前面的单词也可以和其他单词一起使用。自由词素也可以和其他单词一起出现。如果你单独看到单词,这些词表达不同的意思。

让我们看看例子:Doghouse, town hall,在这里,狗屋的意义不同于狗和房子的个体意义。同样,市政厅也是如此。

  • 限制词素

限制词素通常采用词缀。它们又分为两类:派生词素和屈折词素。

派生词素是在词缀与词根结合并发生变化时识别出来的,并且改变语义。如:unkind,happiness

屈折词素是加在单词上的后缀,用来赋予该单词特定的语法属性。屈折词素被认为是表示时态、数字、位置等的语法标记。所以,屈折语素是指在不影响词义或词性的情况下,改变动词时态、态、人、数(单数和复数)、性别或大小写的词素类型。如:dogs,expected

from nltk.stem import PorterStemmer
from polyglot.text import Text, Word
word = "unexpected"
text = "disagreement"
text1 = "disagree"
text2 = "agreement"
text3 = "quirkiness"
text4 = "historical"
text5 = "canonical"
text6 = "happiness"
text7 = "unkind"
text8 = "dogs"
text9 = "expected"
words_derv = ["happiness", "unkind"]
word_infle = ["dogs", "expected"]
words = ["unexpected", "disagreement", "disagree", "agreement", "quirkiness", "canonical" "historical"]

port = PorterStemmer()
print("\n派生词素") 
print(" ".join([port.stem(i) for i in text6.split()])) 
print(" ".join([port.stem(i) for i in text7.split()])) 
print("\n屈折词素") 
print(" ".join([port.stem(i) for i in text8.split()])) 
print(" ".join([port.stem(i) for i in text9.split()])) 
print("\n其他示例") 
print(" ".join([port.stem(i) for i in word.split()])) 
print(" ".join([port.stem(i) for i in text.split()])) 
print(" ".join([port.stem(i) for i in text1.split()])) 
print(" ".join([port.stem(i) for i in text2.split()])) 
print(" ".join([port.stem(i) for i in text3.split()])) 
print(" ".join([port.stem(i) for i in text4.split()])) 
print(" ".join([port.stem(i) for i in text5.split()])) 
派生词素
happi
unkind

屈折词素
dog
expect

其他示例
unexpect
disagr
disagre
agreement
quirki
histor
canon
#using polyglot library
print("\n派生词素 ") 
for w in words_derv:
    w = Word(w, language="en")
    print(w)
print("\n屈折词素") 
for w in word_infle:
    w = Word(w, language="en")
    print(w)
print("\n其他示例") 
for w in word_infle:
    w = Word(w, language="en")
    print(w)
派生词素 
happiness
unkind

屈折词素
dogs
expected

其他示例
dogs
expected

3.3.7 词干和词根的区别

词干 词根
为了生成词干,我们需要从单词中删除词缀 词根不能进一步分成更小的词素
从词干中,我们可以通过进一步划分来产生根。 词干由词根加派生词素生成
untie 这个词是词干 tie 这个词是词根

练习

1、从redness, quickly, teacher, unhappy, 和 disagreement找出前缀、后缀,动词和词干。

red ness quick ly teach er un happy dis agree ment

2、使用NLTK和PolyGlot库构造、解构和推导,redness, quickly, teacher, unhappy, 和 disagreement

3、生成disagree, disagreement, historical的词干和词根

3.4 词法分析

词法分析是将文本分解为单词、短语和其他有意义的元素的过程。词法分析是基于词级分析。在这种分析中,我们还关注单词、短语和其他元素(如符号)的含义。有时,词法分析也被松散地描述为词条化技术过程。所以,在讨论词条化技术之前,让我们先了解什么是词条,什么是词性标注。

3.4.1 词条

词条被定义为使用词法分析技术生成的有意义的元素。

3.4.2 词性标注

词性是一类具有相似语法性质的词汇或词汇项。属于同一词性(POS)的词在句子的语法结构中有着相似的行为。在英语中,词类包括动词、名词、形容词、副词、代词、介词、连词、感叹词,有时还包括数字、冠词或限定词。

3.4.3 导出词条的过程

句子是由单词流构成的,我们需要从一个句子中派生出单独的有意义的块,这些块称为词条,派生词条的过程称为词条化技术:

  • 从文本流中派生词条的过程有两个阶段。如果你有很多段落,首先你需要断句,然后是分词,并生成词条。

  • 词条技术和引理化是有助于词汇分析的过程。使用NLTK库,我们可以执行断句和分词。

  • 标记化技术可以定义为识别句子或单词的边界。词形还原可以定义为一个识别正确目标的过程。

  • 句子中出现的词的位置和意义。词形还原还包括位置标记,在此过程中,根据短语级别或句子水平上下文,以消除词义的歧义。

from nltk.tokenize import word_tokenize
from nltk.stem.wordnet import WordNetLemmatizer
content = """Stemming is funnier than a bummer says the sushi loving computer scientist.
She really wants to buy cars. She told me angrily. It is better for you.
Man is walking. We are meeting tomorrow. You really don't know..!"""

print(word_tokenize(content))
['Stemming', 'is', 'funnier', 'than', 'a', 'bummer', 'says', 'the', 'sushi', 'loving', 'computer', 'scientist', '.', 'She', 'really', 'wants', 'to', 'buy', 'cars', '.', 'She', 'told', 'me', 'angrily', '.', 'It', 'is', 'better', 'for', 'you', '.', 'Man', 'is', 'walking', '.', 'We', 'are', 'meeting', 'tomorrow', '.', 'You', 'really', 'do', "n't", 'know..', '!']
wordlemma = WordNetLemmatizer()
print(wordlemma.lemmatize('cars')) 
print(wordlemma.lemmatize('walking',pos='v')) 
print(wordlemma.lemmatize('meeting',pos='n')) 
print(wordlemma.lemmatize('meeting',pos='v')) 
print(wordlemma.lemmatize('better',pos='a')) 
print(wordlemma.lemmatize('is',pos='v')) 
print(wordlemma.lemmatize('funnier',pos='a')) 
print(wordlemma.lemmatize('expected',pos='v')) 
print(wordlemma.lemmatize('fantasized',pos='v'))

car
walk
meeting
meet
good
be
funny
expect
fantasize

3.4.4 词干提取和词形还原的区别

词干提取和词形还原这两个概念都被用来通过去掉词缀来规范化给定的单词并考虑其意义。两者的主要区别如下:

词干提取 词形还原
词干提取通常在不了解上下文的情况下对单个词进行操作 词形还原通常考虑词干中的单词和句子中单词的上下文,
不考虑词性标注 考虑词性标注
词干提取是将基本意思相近的词组合在一起。 词形还原是用来制作词典或WordNet类词典的。

3.4.5 应用

您必须考虑到这个词法分析是如何用于开发NLP应用程序的。因此,这里我们列出了一些使用词法分析概念的NLP应用程序:

  • 词法分析,如句子词条化技术和停止词识别,通常用于预处理。

  • 词汇分析也用于开发词性标注。词性标注器是为文本流生成词性标注的工具。

3.5 句法分析

我们已经在词法分析中看到了词级分析。在本节中,我们将从更高的层次来看待事情。我们将通过考虑句子中的短语来关注句子的语法和结构。句法分析告诉我们某些给定的句子或句子的某些部分的逻辑意义。我们还需要考虑语法规则来定义句子的逻辑意义和正确性。让我们举个例子:如果我在考虑英语,我有一个句子,比如说“School go a boy”,这个句子在逻辑上不能表达它的意思,它的语法结构也不正确。所以,句法分析告诉我们,给定的句子是否传达了它的逻辑意义,它的语法结构是否正确?句法分析是NLP一个成熟领域。在句法分析中,语法规则被用来确定哪些句子是合法的。文法的应用是为了开发一种解析算法来生成结构表示或解析树。

在这里,使用nltk、斯坦福大学的corenlp示例

import nltk
from nltk import CFG
from nltk.tree import *
from pycorenlp import StanfordCoreNLP
from collections import defaultdict
Grammar = nltk.CFG.fromstring(""" 
S -> NP VP 
PP -> P NP 
NP -> Det N | Det N PP | 'I' 
VP -> V NP | VP PP 
Det -> 'an' | 'my' 
N -> 'elephant' | 'pajamas' 
V -> 'shot' 
P -> 'in' 
""")

sent = "I shot an elephant".split()
parser = nltk.ChartParser(Grammar)
trees = parser.parse(sent)
for tree in trees:
    print(tree)
(S (NP I) (VP (V shot) (NP (Det an) (N elephant))))
dp1 = Tree('dp', [Tree('d', ['the']), Tree('np', ['dog'])])
dp2 = Tree('dp', [Tree('d', ['the']), Tree('np', ['cat'])])
vp = Tree('vp', [Tree('v', ['chased']), dp2])
tree = Tree('s', [dp1, vp])
print(tree)
print(tree.pformat_latex_qtree())
tree.pretty_print()
(s (dp (d the) (np dog)) (vp (v chased) (dp (d the) (np cat))))
\Tree [.s
        [.dp [.d the ] [.np dog ] ]
        [.vp [.v chased ] [.dp [.d the ] [.np cat ] ] ] ]
              s               
      ________|_____           
     |              vp        
     |         _____|___       
     dp       |         dp    
  ___|___     |      ___|___   
 d       np   v     d       np
 |       |    |     |       |  
the     dog chased the     cat
from stanfordcorenlp import StanfordCoreNLP

text =""" I shot an elephant."""
nlp = StanfordCoreNLP(r'E:\JavaLibraries\stanford-corenlp-full-2018-10-05', lang='en')
nlp.parse(text)
'(ROOT\r\n  (S\r\n    (NP (PRP I))\r\n    (VP (VBD shot)\r\n      (NP (DT an) (NN elephant)))\r\n    (. .)))'
nlp.close()

3.6 语义分析

语义分析主要集中在NL的含义上。本节将探讨其定义、各种元素及其应用。

3.6.1 语义分析概念

语义分析正在生成本地语言意义的表示。你可能会想,如果词法分析也集中在文本流中给出的单词的意义上,然后是什么?语义分析和词法分析的区别是什么?答案是词法分析是基于更小的符号;它的重点是单词的意义,而语义分析集中在更大的块上。语义分析可以在短语级别执行,句子级别、段落级别,有时也在文档级别。语义的分析可分为两部分,如下:

  • 对单个词意义的研究称为词汇语义学
  • 在处理一个较大的NL单位的上下文中,研究单个词如何在句子或段落中组合有意义。
    举个例子。如果你有一句话,比如“white house is great”,这意味着这句话是在美国白宫的背景下发表的,而这句话也有可能是字面意思是说附近的一所房子,它的颜色是白色,非常好。因此,正确理解句子的含义是语义分析的任务。

3.6.2 词级别的语义

词汇语义包括单词、子单词或词缀等子单元,甚至包括复合词和短语。这里的词、子词等称为词汇项。词汇语义学的研究包括以下几点:

  • 词汇项目分类
  • 词汇项分解
  • 不同词汇语义结构的异同
  • 词汇语义学是词汇项、句子意义和句子语法之间的关系。

上下位关系
下义性描述了一个通用术语和指定的通用术语实例之间的关系。在这里,一个通用术语被称为上义词,而通用术语的实例被称为下义词。
以,color是一个上义词;red, green, yellow,等等都是下义词。

同音异义词
同音词是指具有相同语法、相同拼写或相同形式的词,但其含义不同且彼此无关。
例如:bank是一个典型的例子。它可以指金融机构或河岸,等等。

多义词
为了理解一词多义,我们把重点放在句子的单词上。一词多义是一个词或短语,具有不同但相关的意义。这些词也被称为词义上的歧义词。

3.6.3 上下位关系和多义词

一个词如果用来表达不同的意思,就称为多义词。这个词的意思之间的差别是明显的。如果两个或两个以上的单词发音相同或拼写相同但没有相关含义,则称为同音词。

3.6.4 语义分析的应用

语义分析是一个开放的研究领域,其基本概念可用于以下应用:

  • 词义消歧是NLP中语义分析应用最为广泛的任务之一,也是印度语言研究的一个开放领域。
  • 我们将在第7章,NLP基于规则的系统中看到词义消歧(WSD)的用法。
  • 为了处理语义相似性,出现了word2vec概念。我们将在第6章,高级特征工程和NLP算法中看到这一点。

3.7 消歧

当我们跳到语义分析中时,我们可能会发现有许多情况对于NLP系统来说太模棱两可了。在这些情况下,我们需要知道存在哪些类型的歧义,以及如何处理它们。歧义是自然语言和认知科学中定义不明确的领域之一。有时,句子是如此复杂和模棱两可,只有说话者可以定义句子的原义或定义。如果一个词、短语或句子有多个含义,则它是不明确的。如果我们考虑“light”这个词的意思可能不是很重,也可能不是很暗。这是单词级的歧义。“porcelain egg container”一词结构层次模糊。所以,在这里我们将看到NLP中不同类型的歧义。

3.7.1 词法歧义

词汇歧义是词级歧义。一个词在其内部结构和句法类上可能有歧义。让我们来看一些例子:1: Look at the stars. 这里,look是一个动词.
2: The person gave him a warm look. 这里,look是个名词.
3: She won three silver medals. 这里,silver是个名词.
4: She made silver speech. 这里,silver是一个形容词.
5: His stress had silvered his hair. 这里,silvered是个动词.在前面的例子中,特定的单词根据它们在句子结构中的用法改变它们的词性标注。这种模糊性可以通过两种方法来解决:

  • 通过使用精确的位置标记工具,可以解决这种模糊性。
  • WordNet 感知器在单词带有特定的词性标注时有多种场景可供单词使用。这也有助于处理歧义。

3.7.2 句法歧义

我们已经看到,在句法分析中,单词序列是语法结构。有不同的方法来解释单词的顺序,每个结构都有不同的解释。在句法歧义中,句法是不清楚的,而不是字面意义。以下是结构模糊性的一个例子:
The man saw the girl with the telescope.

在这里,模棱两可是因为还不清楚男人是看到那个有望远镜的女孩,还是男人用望远镜看到了那个女孩。这种歧义称为介词短语歧义。
处理句法歧义的方法
为了处理这种模糊性,我们需要使用统计方法并获得最大似然比。我们需要一方面把动词和介词连用,另一方面把介词和名词连用,然后用下面的公式计算对数似然比:
F ( v , n , p ) = log p ( p / v ) p ( p / n ) F(v,n,p) = \log \frac{p(p/v)}{p(p/n)}

这里, p ( p / v ) p(p/v) 是看到一个有介词p和动词v后面的pp的概率。

p ( p / n ) p(p/n) 是名词n后出现介词p的概率。

如果f(v,p,n)<0,那么我们需要将介词附加到名词上,如果f(v,p,n)>0,那么我们需要将介词附加到动词上。

3.7.3 语义歧义

当词语本身的含义可能被误解时,就会出现语义歧义。下面是一个例子:

ABC head seeks arms

在这里,“head”一词既指“头”也指“身体部位”,同样地,“arms”也可解释为武器或身体部位。

高精度处理语义歧义是一个开放的研究领域。目前,word2vec表示技术在处理语义歧义方面非常有用。

3.7.4 语用歧义

语用歧义发生在一个短语的上下文给它多个不同的解释。让我们举个例子:

Give it to that girl.这可能意味着很多事情。

现在,让我们看一个大背景:

I have chocolate and a packet of biscuits.把它给那个女孩。在这里,还不清楚是指巧克力还是一包饼干。

处理这种模糊性仍然是一个开放的研究领域。

3.8 篇章整合

篇章整合与语用学密切相关。篇章整合被认为是NL结构中任何较小部分的较大上下文。NL非常复杂,而且时间、文本序列依赖于先验话语。

这个概念经常出现在语用歧义中。这个分析涉及前一句可能影响下一句的含义和解释句子。在这里,可以在更大的上下文中分析上下文,例如段落级别,文档级别等等。
应用

以下NLP应用中使用了语篇整合的概念:

  • 这个概念通常用于NLG应用程序。

  • 聊天机器人,在这种情况下应用,深度学习已经被使用。

3.9 语用分析

语用分析处理外部词知识,这意味着文档和/或查询外部的知识。聚焦于所描述内容的语用分析被它的实际含义重新解释,衍生出需要真实世界知识的语言的各个方面。例如:

Pruning a tree is a long process.

在这里,修剪树是计算机科学算法的一个概念技术。所以,修剪这个词与实际的物理树的修剪无关,我们在讨论计算机科学算法。这是一个模棱两可的情况;如何处理这些模棱两可的情况也是一个开放的研究领域。大型科技巨头利用深度学习技术进行语用分析并尝试生成准确的句子上下文,以便高度发展准确的NLP应用程序。

3.10 总结

本章探讨了语言学的基础知识,这些基础知识通常用于发展NLP应用。我们已经看到了与NLP有关的各种分析。我们已经看到单词水平分析和大背景分析。我们已经看到一些关键解决任何混乱的概念。在本章之后,研究人员可以发现如果他们想从事语言学、计算机语言学或NLP专业计算机科学,可以确定语言学或工具对你来说更有趣。

致谢
《Python自然语言处理》1 2 3,作者:【印】雅兰·萨纳卡(Jalaj Thanaki),是实践性很强的一部新作。为进一步深入理解书中内容,对部分内容进行了延伸学习、练习,在此分享,期待对大家有所帮助,欢迎加我微信(验证:NLP),一起学习讨论,不足之处,欢迎指正。
在这里插入图片描述

参考文献


  1. https://github.com/jalajthanaki ↩︎

  2. 《Python自然语言处理》,(印)雅兰·萨纳卡(Jalaj Thanaki) 著 张金超 、 刘舒曼 等 译 ,机械工业出版社,2018 ↩︎

  3. Jalaj Thanaki ,Python Natural Language Processing ,2017 ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_43935926/article/details/86655110