2017-11-09 4 views
0

Pubmedからの情報を使用してNLTKコーパスを構築しようとしています。リストからのNLTKコーパスカテゴリ

私の最初の試みでは、Entrezパッケージを使用してデータを取得する小さな関数を構築し、取り出した記事タイトル(文字列のリスト、つまりタイトル)をファイルのコーパスに入れましたファイル)を作成し、それぞれの 'fileid'(すなわちファイル名)をドキュメントのカテゴリとして使用してコーパスを作成しました。

コーパスの各文書には、タイトル、要約、およびそれぞれのMeSH用語が必要です(最後に、コーパスのカテゴリを定義する必要があります。ドキュメントの名前)。

だから私は解決方法がわからないといういくつかの問題があります。

1)を次のように私のコーパスリーダーが行く:理解しやすいかもしれように私は、後方スタートします

「cat_pattern」はfileids引数からカテゴリ名を抽出する正規表現です
corpus = CategorizedPlaintextCorpusReader(corpus_root, file_pattern, 
             cat_pattern=r'(\w+)_.*\.txt') 

、すなわちファイルの名前。しかし、今では、ファイル内の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はコーパスの各文書である。これは最初のプロトタイプのコードであり、各文書は1つの文字列(タイトル)で構成され、それぞれの "文書"はタイトル(['TI'])、要約(['AB'] )、およびMeSH用語([「MH」] - 私があるため、次のコードで、わからないんだけど、この1 :)ここ

# 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コーパスの作り方に関する多くのページ私がやるべきことは何も合わないようです。

これは非常に混乱するかもしれませんが、私に何か言い換える必要がある場合はお知らせください。任意の助けを感謝されるでしょう:)

+0

https://stackoverflow.com/questions/10463898/creating-a-custom-categorized-corpus-in-nltk-and-python – alvas

+0

私はすでにそれを見ていましたが、残念なことにそれは助けになりません、ありがとうございます。 – tanmald

答えて

1

引数は、ファイル名からカテゴリを決定することができますが、あなたのケースでは十分ではない場合に便利です。幸い、ファイルカテゴリを指定する他の方法もあります。あなたのコーパスの各ファイルのカテゴリを把握し、その結果をファイルcorpus_categories(または何でもよい;名前がコーパスのファイル名パターンと一致しないようにして、それをコーパスフォルダ)。次にcat_patternの代わりにcat_file="corpus_categories"でリーダーを初期化します。

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

カテゴリファイルの各行には、ファイル名とそのカテゴリがスペースで区切られている必要があります。ここでreutersコーパスのためcats.txtからの抜粋です:私はあなたがあなたの質問3で達成しようとしているものは考えてきたん

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 

は、それはそれは分類コーパスを作成するには無関係だということをかなり明確らしい(ひいてはあなたはそれを別の質問として尋ねるべきです)。

+0

私は結果を取り戻そうとします。問題3)は、ラベル/カテゴリを保存することですが、私はこの問題を解決しようとする前にまず第1および第2の問題を解決しようとします。ありがとうございました:) – tanmald

+0

あなたは正しい@alexisでした。ヒントありがとうございます。あなたはこの種の分類に慣れていますか?カテゴリに関する質問がもう少しありますので、お手伝いできるかどうか教えてください。 – tanmald

+0

「分類の種類」は何を意味するのか分かりませんが、カテゴリが複数あることを意味する場合は、nltkを見て収集したものだけを知ることができます。より多くの問題がある場合は、新しい質問を書き留めて、それにリンクしているコメントを私にpingしてください。 – alexis

関連する問題