如何在nltk中将自定义语料库添加到本地计算机

时间:2017-02-11 13:56:16

标签: python nltk nltk-trainer

我有一个使用数据创建的自定义语料库,我需要进行一些分类。我的数据集与movie_reviews语料库包含的格式相同。根据nltk文档,我使用以下代码访问movie_reviews语料库。是否有任何自定义语料库添加到nltk_data / corpora目录并访问该语料库与访问现有语料库的方式相同。

    import nltk
    from nltk.corpus import movie_reviews

    documents = [(list(movie_reviews.words(fileid)), category)
         for category in movie_reviews.categories()
         for fileid in movie_reviews.fileids(category)]

3 个答案:

答案 0 :(得分:3)

虽然你可以破解nltk使你的语料库看起来像一个内置的nltk语料库,但这是错误的方法。 nltk提供了丰富的“语料库读者”集合,您可以使用它来从您保留语料库的任何地方读取语料库,而无需将其移至nltk_data目录或攻击nltk来源。 nltk自己的语料库在幕后使用相同的语料库读者,因此您的读者将拥有等效内置语料库的所有方法和行为。

让我们看看movie_reviews中如何定义nltk/corpora/__init__.py语料库:

movie_reviews = LazyCorpusLoader(
    'movie_reviews', CategorizedPlaintextCorpusReader,
    r'(?!\.).*\.txt', cat_pattern=r'(neg|pos)/.*',
    encoding='ascii')

您可以忽略LazyCorpusLoader部分;这是为了提供您的程序很可能永远不会使用的语料库。其余部分显示电影评论语料库使用CategorizedPlaintextCorpusReader阅读,其文件全部以.txt结尾,并且评论通过位于子目录posneg中分类。 {1}}。最后,语料库编码是ascii。因此,像这样定义自己的语料库(根据需要更改值):

mycorpus = nltk.corpus.reader.CategorizedPlaintextCorpusReader(
    r"/home/user/path/to/my_corpus",
    r'(?!\.).*\.txt', 
    cat_pattern=r'(neg|pos)/.*',
    encoding="ascii")

就是这样;您现在可以拨打mycorpus.words()mycorpus.sents(categories="neg")等,就好像这是nltk提供的语料库一样。

答案 1 :(得分:0)

首先将新语料库中的实际数据放入nltk_data/corpora/目录。然后,您必须编辑__init__.py的{​​{1}}文件。您可以通过执行以下操作找到此文件的路径:

nltk.corpus

在文本编辑器中打开此文件,您将看到大部分文件正在创建import nltk print(nltk.corpus.__file__) 个对象并将它们分配给全局变量。

例如,某个部分可能如下所示:

LazyCorpusLoader

为了添加新的语料库,您只需要以与上述示例相同的格式向该文件添加新行。因此,如果您有一个名为.... verbnet = LazyCorpusLoader( 'verbnet', VerbnetCorpusReader, r'(?!\.).*\.xml') webtext = LazyCorpusLoader( 'webtext', PlaintextCorpusReader, r'(?!README|\.).*\.txt', encoding='ISO-8859-2') wordnet = LazyCorpusLoader( 'wordnet', WordNetCorpusReader, LazyCorpusLoader('omw', CorpusReader, r'.*/wn-data-.*\.tab', encoding='utf8')) .... 的语料库并且您已将数据保存在movie_reviews中,那么您可能需要添加以下行:

nltk_data/corpora/movie_reviews

可以在文档here中找到LazyCorpusLoader的其他参数。

然后你只需保存这个文件,然后就可以了:

movie_reviews = LazyCorpusLoader('movie_reviews', .... )

答案 2 :(得分:0)

好的,所以我提供的解决方案有点问题,我发现对我有用的简单方法是首先在' corpora'中创建我的文件夹和子文件夹。目录然后编辑 init .py doc。

所以在我的情况下,我创建的语料库是vc,子文件夹是audio_them,audio_us,video_them,video_us

vc = LazyCorpusLoader(
    'vc', CategorizedPlaintextCorpusReader,
    r'(?!\.).*\.txt', 
cat_pattern = r'(audio_them|audio_us|video_them|video_us)/.$
    encoding="ascii")