我有一个定制的语料库,它是用数据创建的,我需要做一些分类。我的数据集与movie_reviews语料库包含的格式相同。根据nltk文档,我使用以下代码访问movie_reviews语料库。是否有任何自定义语料库添加到nltk_data/ same目录,并以访问现有语料库的方式访问该语料库。
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)]发布于 2017-02-11 17:41:30
虽然你可以破解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结尾,评论通过位于pos和neg子目录中被分类。最后,语料库编码为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提供的一个语料库一样。
发布于 2017-02-11 16:13:57
首先,将新语料库中的实际数据放到nltk_data/corpora/目录中。然后,您必须为__init__.py编辑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中,那么您需要添加如下一行:
movie_reviews = LazyCorpusLoader('movie_reviews', .... )LazyCorpusLoader的其他参数可以在docs 这里中找到。
然后,您只需保存这个文件,然后您应该能够:
from nltk.corpus import movie_reviews发布于 2017-11-18 16:21:21
好的,所以我在提供的解决方案上遇到了一些问题,我发现对我来说最容易的方法是首先在“语料库”目录中创建我的文件夹和子文件夹,然后编辑init.py文档。
所以在我的例子中,我创建的语料库是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")https://stackoverflow.com/questions/42176699
复制相似问题