📜  语料库阅读器和自定义语料库

📅  最后修改于: 2020-10-14 09:19:48             🧑  作者: Mango


什么是语料库?

语料库是在自然的交流环境中以结构化格式收集的机器可读文本的大集合。语料库一词是语料库的复数形式。语料库可以通过以下多种方式派生-

  • 从最初的电子文本
  • 从口语成绩单
  • 从光学字符识别等

语料库代表性,语料库平衡,采样,语料库大小是设计语料库时起重要作用的元素。用于NLP任务的最受欢迎的语料库是TreeBank,PropBank,VarbNet和WordNet。

如何建立自定义语料库?

在下载NLTK时,我们还安装了NLTK数据包。因此,我们已经在计算机上安装了NLTK数据包。如果讨论Windows,则假定此数据包安装在C:\ natural_language_toolkit_data ,如果讨论Linux,Unix和Mac OS X,则假定此数据包安装在/ usr / share / natural_language_toolkit_data

在以下Python配方中,我们将创建必须位于NLTK定义的路径之一内的自定义语料库。之所以如此,是因为NLTK可以找到它。为了避免与官方NLTK数据包发生冲突,让我们在主目录中创建一个自定义的natural_language_toolkit_data目录。

import os, os.path
path = os.path.expanduser('~/natural_language_toolkit_data')
if not os.path.exists(path):
   os.mkdir(path)
os.path.exists(path)

输出

True

现在,让我们检查一下主目录中是否有natural_language_toolkit_data目录-

import nltk.data
path in nltk.data.path

输出

True

当我们得到输出True时,意味着我们的目录中有nltk_data目录。

现在我们将创建一个名为wordfile.txt的单词列表文件,并将其放在nltk_data目录(〜/ nltk_data / corpus / wordfile.txt)中名为corpus的文件夹中,并使用nltk.data.load加载它-

import nltk.data
nltk.data.load(‘corpus/wordfile.txt’, format = ‘raw’)

输出

b’tutorialspoint\n’

语料库读者

NLTK提供了各种CorpusReader类。我们将在以下Python食谱中介绍它们

创建单词表语料库

NLTK具有WordListCorpusReader类,该类提供对包含单词列表的文件的访问。对于以下Python配方,我们需要创建一个单词表文件,该文件可以是CSV或普通文本文件。例如,我们创建了一个名为“ list”的文件,其中包含以下数据-

tutorialspoint
Online
Free
Tutorials

现在,让我们实例化一个WordListCorpusReader类,该类从创建的文件‘list’中生成单词列表

from nltk.corpus.reader import WordListCorpusReader
reader_corpus = WordListCorpusReader('.', ['list'])
reader_corpus.words()

输出

['tutorialspoint', 'Online', 'Free', 'Tutorials']

创建带有POS标签的单词语料库

NLTK具有TaggedCorpusReader类,借助它我们可以创建POS带标签的单词语料库。实际上,POS标记是识别单词的词性标记的过程。

标记语料库最简单的格式之一是“单词/标签”形式,如摘录自棕色语料库-

The/at-tl expense/nn and/cc time/nn involved/vbn are/ber
astronomical/jj ./.

在上面的摘录中,每个单词都有一个表示其POS的标签。例如, vb指动词。

现在,让我们实例化一个TaggedCorpusReader类,该类从文件“ list.pos”中生成带有POS标签的单词,该文件具有以上摘录。

from nltk.corpus.reader import TaggedCorpusReader
reader_corpus = TaggedCorpusReader('.', r'.*\.pos')
reader_corpus.tagged_words()

输出

[('The', 'AT-TL'), ('expense', 'NN'), ('and', 'CC'), ...]

创建分词短语语料库

NLTK具有ChnkedCorpusReader类,借助它我们可以创建Chunked短语语料库。实际上,块是句子中的简短短语。

例如,我们有以下摘录自带标签的树库语料库:

[Earlier/JJR staff-reduction/NN moves/NNS] have/VBP trimmed/VBN about/
IN [300/CD jobs/NNS] ,/, [the/DT spokesman/NN] said/VBD ./.

在上面的摘录中,每个块都是一个名词短语,但是不在方括号中的单词是句子树的一部分,而不是任何名词短语子树的一部分。

现在,让我们实例化一个ChunkedCorpusReader类,该类从文件‘list.chunk’中生成分块短语,该文件具有上述摘录。

from nltk.corpus.reader import ChunkedCorpusReader
reader_corpus = TaggedCorpusReader('.', r'.*\.chunk')
reader_corpus.chunked_words()

输出

[
   Tree('NP', [('Earlier', 'JJR'), ('staff-reduction', 'NN'), ('moves', 'NNS')]),
   ('have', 'VBP'), ...
]

创建分类文本语料库

NLTK拥有CategorizedPlaintextCorpusReader类,借助它我们可以创建分类的文本语料库。当我们有大量的文本集并且想要将其分类到单独的部分时,这非常有用。

例如,棕色语料库有几个不同的类别。让我们在以下Python代码的帮助下找到它们-

from nltk.corpus import brown^M
brown.categories()

输出

[
   'adventure', 'belles_lettres', 'editorial', 'fiction', 'government',
   'hobbies', 'humor', 'learned', 'lore', 'mystery', 'news', 'religion',
   'reviews', 'romance', 'science_fiction'
]

对语料库进行分类的最简单方法之一是为每个类别使用一个文件。例如,让我们看一下movie_reviews语料库的两个摘录-

movie_pos.txt

细的红线是有缺陷的,但会引起挑衅。

movie_neg.txt

大笔预算和光鲜的制作无法弥补电视节目中自发性的不足。

因此,在以上两个文件中,我们有两个类别,即posneg

现在让我们实例化一个CategorizedPlaintextCorpusReader类。

from nltk.corpus.reader import CategorizedPlaintextCorpusReader
reader_corpus = CategorizedPlaintextCorpusReader('.', r'movie_.*\.txt',
cat_pattern = r'movie_(\w+)\.txt')
reader_corpus.categories()
reader_corpus.fileids(categories = [‘neg’])
reader_corpus.fileids(categories = [‘pos’])

输出

['neg', 'pos']
['movie_neg.txt']
['movie_pos.txt']