2013-01-01から1年間の記事一覧

GENIA taggerを使うクラスの見直し

GENIA taggerはC++で書かれた英文品詞解析ソフトですが、これをRubyで呼び出すため、今まではサーバプログラムとして起動していましたが、今回はこれを書き換えました。 いちいち別プログラムとして起動してから、本命のRubyコードを走らせるのも面倒だし、…

英文の単語出現頻度を計算するクラスの続き

前回に引き続き、英文から名詞を抜き出すRubyクラスの実装を行いました。 前回は英文の単語数で分類するところまで書いたので、今回は分類された英文ごとに、品詞解析にかけて名詞を抜き出し、その出現数をカウントするところを実装しました。 品詞解析はGEN…

英文から名詞を取り出し出現頻度を計算するクラス

英文の特徴抽出を行う際に、以前実装した英文から名詞を取り出す部分を、今回1つのクラスとしてまとめることにしました。 名詞の判定にはGENIA taggerを使用していて、これを別プロセスで起動し、ソケット通信でRubyスクリプト中で解析したい英文を送るよう…

PubMed APIを利用して、クエリから関連著者リストを作成

前回に続き、著者リストを作成するRubyスクリプトを書いています。今回は、検索ワードをクエリとしてPubMed APIにアクセスし、関連論文リストから著者名を抜き出し、全著者名の出現頻度を計算するところまで完成させました。 まず、検索ワードにヒットした論…

PubMedで検索した論文一覧から筆者の出現頻度リストを作る

前回までで、筆者ごとにまとめられた単語リストから、研究トピックと筆者のネットワーク図を作ることができるようになりました。なので、そのプログラムを使って何ができるかを試すため、簡単な応用先を考えることにしました。 そこで、自分の研究に近いこと…

グラフ作成クラスの公開

前回に続き、今回はトピック解析が終了して出力されるthetaファイルを元に、文章のネットワーク図を作成する「TopicGraph」クラスを修正し、GitHubにて公開しました。 このクラスはThetaファイルを読込んで、各文章のトピックへの分類確率に基づいて、ネット…

トピック解析後の有効トピック数決定のメソッド

前回に引き続き、「AuthorTopicExplorer」クラスの実装を行いました。 今回は実装したRubyクラスの実行動作確認も行い、軽くデバッグしました。RubyでLDAプログラムを起動するのは始めてでしたが、system()命令で実行でき、読込ませた単語リストファイルがあ…

トピック解析用にデータのパースとトピック解析までをクラス化

前回の構想を実装するのに、「トピック解析用にデータをパース・マージする」部分と「トピック解析を実行して解析結果をまとめる」という行程が、階層ごとに再帰的に何度も使い回されると思われるので、今回、これらのメソッドをまとめたクラスを作成しまし…

階層トピック分類の構想

前回までのポスター関連解析で扱った全ポスター数は56だったので、1枚のネットワーク図に収まりましたが、今度はもっと多くのポスターが発表される場合のポスター関連図をどのように作るか、前回までのネットワーク図の作り方をふまえて考え直してみました。…

トピック解析に用いる単語の選別

全ポスターからMeCabを用いて取得した名詞句を使ってトピック解析を行ってきましたが、トピックに特徴的だと判定された単語リストを見ると、全体的なトピックに関連しそうな単語だったり、「目的」とか「本研究」といった一般的すぎてあまり意味の無い単語が…

グラフの修正

前回作成したグラフを修正し、全てのポスターについて、各トピックへのエッジを分類確率に応じた長さでひいて、ポスターがグラフ全体でどのように配置されるのかを確認してみました。 各トピックを示すノードに向かってエッジをひくのですが、全てのトピック…

トピック分類確率から、各トピックを表すノードへのエッジをひいたグラフを作成

前回トピックの分類確率ベクトルから、ポスター間の距離を決めてグラフを作成したのですが、そのグラフを見てもらったところ、「何で繋がっているのか分からない」「ムリに繋げているように思われる、内容が近いとは思えない」といった意見をいただきまして…

トピック分類確率からポスター間距離を算出&Gvizでグラフ作成

LDAトピックモデルにより、各ポスターについてどのトピックに分類されると考えられるのか、その分類確率が算出されます。なので今回は、各ポスターごとにその分類確率をベクトルにまとめて、それらのユークリッド距離を算出することを考えました。 ベクトル…

トピックモデル解析とポスターの分類について

前回上手く行かなかった、RubyからのMeCabの呼び出しですが、Rubyの外部コマンド呼び出しに使うライブラリの「Open3」を用いた方法を紹介されていた、hirokan55の日記様の記事から参考にして、上手く呼び出すことができるようになりました。 def mecab_exec(…

日本語単語によるトピック解析

英単語によるトピック数調整を考えていて、各トピックごとにどれだけの筆者が分類されるのかを調べていたところ、トピック数6のときに、トピック0番により多くの筆者が分類されていることがわかりました。 その後、トピック数6でトピック0番での出現確率が高…

トピック数決定の基準

LDAによるトピックモデル解析についてさらに調査と考察を行いました。今回のトピック解析の目的は、数千件のポスターをいくつかのクラスタに分け、その中で文章間関連度解析を行おうとしていました。その中で、各トピッククラスタがどれだけの文章数を内包す…

単語リストの修正とLDAパラメータ調整

前回まで、ポスター筆者の単語リストを作成するとき、ポスターのアブストラクトとその筆者が発表した論文のアブストラクトをまとめて、単語リストとスコアを生成していました。しかしそれだと、そのポスター発表会における研究内容とはずれてきてしまうので…

単語リストのトピックモデル解析

ポスター著者ごとの単語リストを作成したのですが、これからどのように似た研究分野をクラスタリングすればいいのかを考えていました。 すると、牧場名産品である「PCRH(プーアル茶)」で利用されている、LDA(Latent Dirichlet Allocation)という、トピッ…

単語スコア計算の続き

前回、ポスター筆者の論文ごとに単語の出現頻度を計算し、さらに論文全体の単語スコアを計算する部分まで実装し、それを全筆者について実行した結果を確認しました。 まず気になったのは、筆者名で検索した論文が少なかった場合に、研究の特徴を表すような単…

論文間単語スコアの計算

GENIA taggerを使った単語数計算ができるようになったので、今回は、論文アブストラクトごとに計算した単語数から、全体の出現単語のスコアを算出する部分を実装しました。 あるポスターの筆者が過去に出した論文n本に対して、1つずつアブストラクトから英単…

GENIA taggerを使ってみる

今までは英語の品詞解析にEngTaggerを用いていましたが、名詞を抽出するだけでも複数形と単数形が別々に数えられてしまうので、各単語の原形を解析して返してくれるソフトを探しなおしました。 この条件を満たす形態素解析プログラムとして、「GENIA tagger…

データの整理と名詞出現頻度解析クラス作成の続き

前回の調整で、ほとんどのポスター著者の文献を回収することができていました。今回はそれらの出力ファイルを読み出して、文献の品詞解析と各名詞へのスコア付けを行う部分を実装しました。 まずは各ポスターIDからWebで検索した文献データをロードして、文…

さらに修正、名詞出現頻度解析クラスの作成

前回走らせたアブストラクト取得クラスですが、途中で何度かこけて、原因をみてみると筆者名のアルファベットにアクセント記号などがついてしまっているために、URLが良くないと怒られているようでした。 特殊なアルファベットを含む筆者名はそんなに多くな…

アブストラクト取得クラスの修正

ある筆者名についての文献IDでefetchを呼び出すと、文献によってはタイトルが無かったり、アブストが無かったりするので、対応付けをちゃんとやる必要を感じました。 なので今回は、RubyのXMLパーサのREXMLについて、ドキュメンテーションを読みながら、うま…

ポスター著者名の取得とアブストラクト取得クラスとの接続

ポスターの筆者一覧csvから筆者名を抽出して、前回作成したアブストラクト取得クラスを呼び出すところまで実装しました。 まず、検索に使用する筆者名として、筆頭著者名はもちろん、そのポスターの最終共著者名も取り出して使うことにしました。Rubyではcsv…

PubMed APIでアブストラクト取得まで

前回、筆者名から出している論文IDを取得することができたので、今回はそのIDの論文のアブストラクトを取得するところまで進めました。 まず、E-utilitiesのマニュアルページ(E-utilities Quick Start)で、「Downloading Full Records」の項目からefetch.f…

文献クラスタリングプログラムの構想&PubMed APIのXMLパーサ作成まで

前回までで、与えられた文献リストから、文献の著者の情報を使ってどのような分野の研究をしているのかをクラスタリングする、というプログラムを作る、ということになったので、今回はその大まかな流れを決めつつ、どこまでを1つのクラスとして実装するのが…

著者情報から研究分野を推定する&EngTaggerを試用

ポスター著者の情報を使って、いくつかのポスターをどのように分類すればいいのか考えたときに、その筆者が投稿した過去の論文から情報抽出してきて、それらの重なり具合から評価しようと思いました。 前回までに調べていたPubMed APIでは、検索クエリに「fi…

PubMed APIから情報抽出&今後の方針

今回は、いくつかのポスター筆頭著者名と最後の著者名を使って、PubMed APIからどのような情報が得られるのかを確認してみました。 筆頭著者名と最後の著者名で調べると、これらの人たちがそれぞれFirst, Last Authorになるような論文の一覧が得られ、その論…

PubMed APIお試し続き

前回に引き続き、「PubMed APIのまとめ」のページを参考にさせていただきながら、文献検索APIからどのような情報が手に入るのかを確かめました。 ここでご紹介されているAPIは、・論文IDを取得する「ESearch」 ・論文IDから、著者・雑誌名などを取得する「ES…