列表

时间:2017-11-09 19:33:25

标签: python list nlp nltk

我正在尝试使用Pubmed的信息构建一个NLTK语料库。

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

现在我必须加强游戏:语料库的每个文档都需要有一个标题,一个摘要和相应的MeSH术语(这些最后需要定义语料库的类别,而不是由名称定义的那些该文件)。

所以现在我有一些问题,我真的不知道如何解决。我会倒退,因为它可能更容易理解:

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

corpus = CategorizedPlaintextCorpusReader(corpus_root, file_pattern,
                                      cat_pattern=r'(\w+)_.*\.txt')

其中' cat_pattern'是一个正则表达式,用于从fileids参数中提取类别名称,即文件名。但现在我需要从文件中的MeSH术语中获取这些类别,这会导致下一个问题:

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

伪代码如下:

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'](MeSH术语列表),是我需要用来定义语料库的类别。

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

# X: a list or iterable of raw strings, each representing a document.
X = [corpus.raw(fileid) for fileid in corpus.fileids()]

记住" fileid"是语料库的每个文件。这是第一个原型的代码,其中每个文档由一个字符串(标题)组成,现在每个文档都是#34;必须有标题([' TI']),摘要([' AB'])和MeSH术语([' MH'] - 这一个我不确定,因为下一个代码:)

# y: a list or iterable of labels, which will be label encoded.
y = [corpus.categories(fileid)[0] for fileid in corpus.fileids()]

这里,y表示标签,它们是文件名,现在我需要将标签作为MeSH术语。

我不知道如何实现这一点,或者就我的知识而言,这是可能的,是的,我确实搜索并阅读了NLTK书籍教程,关于如何构建NLTK语料库的许多页面,等等......但似乎没有什么能适合我打算做的事情。

这可能非常令人困惑,但如果您需要我改写任何内容,请告诉我。任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:1)

当可以从文件名确定类别时,cat_pattern参数很方便,但在您的情况下,这还不够。幸运的是,还有其他方法可以指定文件类别。编写一个临时程序来计算语料库中每个文件的类别,并将结果存储在文件corpus_categories中(或者其他;只要确保名称与语料库文件名模式不匹配,这样你就可以了可以将它放在语料库文件夹中)。然后使用cat_file="corpus_categories"而不是cat_pattern初始化您的阅读器。

corpus = CategorizedPlaintextCorpusReader(
                           corpus_root, 
                           file_pattern,
                           cat_file="corpus_categories")

类别文件中的每一行都应该有一个文件名及其类别或类别,用空格分隔。以下是cats.txt语料库reuters的摘录:

training/196 earn
training/197 oat corn grain
training/198 money-supply
training/199 acq
training/200 soy-meal soy-oil soybean meal-feed oilseed veg-oil

我不知道你在问题3中想要完成什么,但似乎很清楚它与创建分类语料库无关(因此你应该把它作为一个单独的问题)。