NLTK或spaCy,如何高效总结NLP程序包使用技巧?

摘要:NLTK和SpaCy是NLP的Python应用,提供了一些现成的处理工具和数据接口。下面介绍它们的一些常用功能和特性,便于对NLP研究的组成形式有一个基本的了解。 NLTK Natural Language Toolkit (NLTK) 由
NLTK和SpaCy是NLP的Python应用,提供了一些现成的处理工具和数据接口。下面介绍它们的一些常用功能和特性,便于对NLP研究的组成形式有一个基本的了解。 NLTK   Natural Language Toolkit (NLTK) 由宾夕法尼亚大学开发,提供了超过50种语料库,以及一些常用的文本处理函数,例如分词(Tokenization)、词干(Stemming)、词性标记(Tagging)等。   下面主要介绍WordNet语料库,其它方法和接口等用到了再进行记录。 WordNet   在WordNet中,每个词由于可以有多重词义,因此会被包含在多个同义词集中。每个同义词集中又包含多个这个意思下的所有词汇(Lemma, 词元)。WordNet还对所有词义(动词和名词)进行了包含与被包含关系的层次排序。因此词义之间得以组成一种树状结构。此外,WordNet还包含量化两个词之间相似度的方法。 同义词集   同义词集用三元组表示,如下展示了channel被包含的所有同义词集: import nltk from nltk.corpus import wordnet a = wordnet.synsets('channel') print(a)   如channel.n.01表示channel的第一个名词词义。此外channel还有impart.v.03词义,表示impart的第三个动词词义。我们可以看同义词集的解释、例子和这个同义词下的所有词元: a = wordnet.synsets('channel')[0] #获取一个同义词集, # a = wordnet.synset('channel.n.01') # 或直接用 wordnet.synset('channel.n.01') print(a.definition()) print(a.examples()) print(a.lemmas())   其中同义词下的词元用四元组表示。 反义词   由于一个词有多种意思,因此获取反义词需要通过四元组词元(lemma)。 synset1 = wordnet.synsets('good')[1] lemma1 = synset1.lemmas()[0] print("Lemma 1: ", lemma1) print("Meaning 1: ", synset1.definition()) lemma2 = lemma1.antonyms()[0] synset2 = lemma2.synset() print("Lemma 2: ", lemma2) print("Meaning 2: ", synset2.definition()) 上下位词   根据WordNet的树状结构可以获取某个词集的上下位词集,及其对应的根节点、到根节点的路径。当然只对名词和动词有效,形容词和副词没有上下级的类别层次关系。 syn = wordnet.synsets('knife')[0] #获取某个同义词集 print("Upper: ", syn.hypernyms(), end="\n\n") # 上位词 print("Lower: ", syn.hyponyms(), end="\n\n") # 下位词 print("Root: ", syn.root_hypernyms(), end="\n\n") # 根节点 print("Path: ", syn.hypernym_paths(), end="\n\n") # 到根节点的路径   我们可以画出树形结构示意图如下: 词之间的相似度   利用层次关系,WordNet可以计算名词、动词之间的相似性。
阅读全文