Python 列表中的NLTK语料库类别

Python 列表中的NLTK语料库类别,python,list,nlp,nltk,Python,List,Nlp,Nltk,我正在尝试使用Pubmed提供的信息构建NLTK语料库 在我的第一次尝试中,我成功地构建了一个使用Entrez包检索数据的小函数,将检索到的文章标题(字符串列表,即标题)放入文件库(每个标题作为一个新文件),并使用每个“fileid”(即文件名)作为文档类别创建了一个语料库 现在我必须加快游戏的进度:语料库的每个文档都需要有一个标题、一个摘要和相应的网格术语(最后需要定义语料库的类别,而不是那些由文档名称定义的类别) 所以现在我有一些问题,我真的不知道如何解决。我将从后面开始,因为这可能更容易理

我正在尝试使用Pubmed提供的信息构建NLTK语料库

在我的第一次尝试中,我成功地构建了一个使用Entrez包检索数据的小函数,将检索到的文章标题(字符串列表,即标题)放入文件库(每个标题作为一个新文件),并使用每个“fileid”(即文件名)作为文档类别创建了一个语料库

现在我必须加快游戏的进度:语料库的每个文档都需要有一个标题、一个摘要和相应的网格术语(最后需要定义语料库的类别,而不是那些由文档名称定义的类别)

所以现在我有一些问题,我真的不知道如何解决。我将从后面开始,因为这可能更容易理解:

1) 我的语料库阅读器如下所示:

corpus = CategorizedPlaintextCorpusReader(corpus_root, file_pattern,
                                      cat_pattern=r'(\w+)_.*\.txt')
papers = [] 
其中,“cat_pattern”是一个正则表达式,用于从fileid参数中提取类别名称,即文件名。但现在我需要从文件中的网格项中获取这些类别,这将导致下一个问题:

2) Pubmed查询检索一批信息,我首先只从中获取标题(我将用于生成语料库的标题),但现在需要检索标题、摘要和网格术语

伪代码如下所示:

corpus = CategorizedPlaintextCorpusReader(corpus_root, file_pattern,
                                      cat_pattern=r'(\w+)_.*\.txt')
papers = [] 
“论文”是一个包含检索到的所有文章以及与这些文章相关的所有信息的列表。假设我有:

out = []
for each in range(0, len(papers)):
    out.append(papers[each]['TI'])
    out.append(papers[each]['AB'])
    out.append(papers[each]['MH'])
列表的最后一部分,['MH'](网格术语列表),是我需要用来定义语料库类别的

3) 在我用这3条信息构建语料库之后,为了能够使用我的分类器,我还需要以某种方式将所有这批信息转换为:

# X: a list or iterable of raw strings, each representing a document.
X = [corpus.raw(fileid) for fileid in corpus.fileids()]
记住,“fileid”是语料库的每个文档。这是第一个原型的代码,其中每个文档都由一个字符串(标题)组成,现在每个“文档”都必须有标题(['TI'])、摘要(['AB'])和网格术语(['MH'])-我不确定这一个,因为下一个代码:)

这里,y代表标签,即文件名,现在我需要标签作为网格术语

我不知道如何做到这一点,甚至就我所知,这是可能的,是的,我搜索并阅读了NLTK书籍教程,许多关于如何构建NLTK语料库的页面,等等,但似乎没有什么适合我打算做的


这可能会让人很困惑,但如果你需要我重新措辞,请告诉我。任何帮助都将不胜感激:)

当可以从文件名确定类别时,
cat\u模式
参数非常方便,但在您的情况下,它是不够的。幸运的是,还有其他方法可以指定文件类别。编写一个特别的程序来计算语料库中每个文件的类别,并将结果存储在文件
corpus\u categories
(或其他任何内容;只需确保名称与语料库文件名模式不匹配,以便将其放在语料库文件夹中)。然后用
cat\u file=“corpus\u categories”
而不是
cat\u模式来初始化读卡器

corpus = CategorizedPlaintextCorpusReader(
                           corpus_root, 
                           file_pattern,
                           cat_file="corpus_categories")
类别文件中的每一行都应有一个文件名及其类别,并用空格分隔。以下是路透社语料库的
cats.txt
片段:

培训/196赚取
培训/197燕麦玉米粒
培训/198货币供应
培训/199 acq
培训/200豆粕豆油豆粕饲料油籽植物油

我不知道你想在问题3中完成什么,但很明显,这与创建分类语料库无关(因此你应该作为一个单独的问题来提问)。

当类别可以从文件名确定时,
cat\u模式
参数很方便,但对你来说,这还不够。幸运的是,还有其他方法可以指定文件类别。编写一个特别的程序来计算语料库中每个文件的类别,并将结果存储在文件
corpus\u categories
(或其他任何内容;只需确保名称与语料库文件名模式不匹配,以便将其放在语料库文件夹中)。然后用
cat\u file=“corpus\u categories”
而不是
cat\u模式来初始化读卡器

corpus = CategorizedPlaintextCorpusReader(
                           corpus_root, 
                           file_pattern,
                           cat_file="corpus_categories")
类别文件中的每一行都应有一个文件名及其类别,并用空格分隔。以下是路透社语料库的
cats.txt
片段:

培训/196赚取
培训/197燕麦玉米粒
培训/198货币供应
培训/199 acq
培训/200豆粕豆油豆粕饲料油籽植物油

我不知道你在第3个问题中想要完成什么,但很明显,这与创建分类语料库无关(因此你应该单独提问)。

看看我已经看到了,不幸的是,这没有帮助,但谢谢你看看我已经看到了,不幸的是,这并没有帮助,但谢谢你,我会尽力把结果告诉你。问题3)是y将存储标签/类别,但我想我会先解决第一个和第二个问题,然后再解决这个问题。谢谢:)你说得对@alexis。谢谢你的提示。你熟悉这种分类吗?我还有一些关于分类的问题,请告诉我您是否能提供帮助。我不知道您所说的“分类类型”是什么意思,但如果您指的是有多个分类,我只知道我从nltk中收集到了什么。如果您还有更多问题,请写一个新问题,并随时用链接到它的注释ping我。如果您的问题是关于通过nltk API获取每个文件的类别:它没有函数,但编写一个很简单。写