刘耀文

刘耀文

java开发者
github

get-bibtex:文献引用管理をより簡単にする Python ツール

引言#

学術研究において、参考文献の管理は重要でありながら時間のかかる作業です。特に論文を書く際には、異なるデータベースから文献の引用形式を取得する必要がよくあります。この問題を解決するために、私は get-bibtex という Python ライブラリを開発しました。これにより、研究者は複数の学術データベースから迅速に BibTeX 形式の引用を取得することができます。

なぜ get-bibtex を選ぶのか?#

1. 多源サポート#

  • CrossRef(最も包括的な DOI データベース)
  • DBLP(計算機科学文献データベース)
  • Google Scholar(API キーが必要)

2. インテリジェントなワークフロー#

from get_bibtex import WorkflowBuilder, CrossRefBibTeX, DBLPBibTeX

# ワークフローの作成
workflow = WorkflowBuilder()
workflow.add_fetcher(CrossRefBibTeX("[email protected]"))
workflow.add_fetcher(DBLPBibTeX())

# バッチ処理
papers = [
    "10.1145/3292500.3330919",  # DOI を使用
    "Attention is all you need"   # タイトルを使用
]
results = workflow.get_multiple_bibtex(papers)

3. 簡単に使える#

from get_bibtex import CrossRefBibTeX

# 単一の引用取得
fetcher = CrossRefBibTeX(email="[email protected]")
bibtex = fetcher.get_bibtex("10.1145/3292500.3330919")
print(bibtex)

4. ファイルバッチ処理#

# ファイルから読み込み、保存
workflow.process_file(
    input_path="papers.txt",
    output_path="references.bib"
)

特徴機能#

  1. インテリジェントなフォールバックメカニズム

    • データソースが失敗した場合、他のデータソースを自動的に試行
    • 引用情報を最大限に取得することを保証
  2. 進捗追跡

    • tqdm を使用して処理の進捗を表示
    • バッチ処理の状態を明確に把握
  3. エラーハンドリング

    • 詳細なログ記録
    • API 制限やネットワークエラーを優雅に処理
  4. フォーマット出力

    • BibTeX を自動的にクリーンアップおよびフォーマット
    • 出力フォーマットの一貫性を確保

使用シーン#

論文執筆#

論文を書く際に、DOI またはタイトルを使用して引用を直接取得できます:

from get_bibtex import CrossRefBibTeX

fetcher = CrossRefBibTeX()
citations = [
    "Machine learning",
    "Deep learning",
    "10.1038/nature14539"
]

for citation in citations:
    bibtex = fetcher.get_bibtex(citation)
    print(bibtex)

文献レビュー#

大量の文献引用をバッチ処理:

from get_bibtex import WorkflowBuilder, CrossRefBibTeX, DBLPBibTeX

workflow = WorkflowBuilder()
workflow.add_fetcher(CrossRefBibTeX())
workflow.add_fetcher(DBLPBibTeX())

# ファイルから文献リストを読み込む
workflow.process_file("papers.txt", "bibliography.bib")

注意力メカニズムに関連する論文の引用を取得#

以下の論文の引用を取得する必要があると仮定します:

  1. FedMSA: フェデレート学習におけるモデル選択と適応システム
  2. Attention Is All You Need: トランスフォーマーの画期的な研究
  3. Non-Local Neural Networks: 非局所神経ネットワーク
  4. ECA-Net: 効率的なチャネル注意メカニズム
  5. CBAM: 畳み込みブロック注意モジュール

DOI を通じて CrossRef を使用して取得#

from apiModels import CrossRefBibTeX

fetcher = CrossRefBibTeX(email="[email protected]")

# FedMSA
bibtex = fetcher.get_bibtex("10.3390/s22197244")
print(bibtex)

# ECA-Net
bibtex = fetcher.get_bibtex("10.1109/cvpr42600.2020.01155")
print(bibtex)

出力例:

@article{Sun_2022,
  title={FedMSA: A Model Selection and Adaptation System for Federated Learning},
  volume={22},
  ISSN={1424-8220},
  url={http://dx.doi.org/10.3390/s22197244},
  DOI={10.3390/s22197244},
  number={19},
  journal={Sensors},
  publisher={MDPI AG},
  author={Sun, Rui and Li, Yinhao and Shah, Tejal and Sham, Ringo W. H. and Szydlo, Tomasz and Qian, Bin and Thakker, Dhaval and Ranjan, Rajiv},
  year={2022},
  month=sep,
  pages={7244}
}

タイトルを通じて DBLP を使用して取得#

from apiModels import DBLPBibTeX

fetcher = DBLPBibTeX()

# CBAM
bibtex = fetcher.get_bibtex("CBAM: Convolutional Block Attention Module")
print(bibtex)

出力例:

@article{DBLP:journals/access/WangZHLL24,
  author       = {Niannian Wang and Zexi Zhang and Haobang Hu and Bin Li and Jianwei Lei},
  title        = {Underground Defects Detection Based on {GPR} by Fusing Simple Linear Iterative Clustering Phash (SLIC-Phash) and Convolutional Block Attention Module (CBAM)-YOLOv8},
  journal      = {{IEEE} Access},
  volume       = {12},
  pages        = {25888--25905},
  year         = {2024},
  url          = {https://doi.org/10.1109/ACCESS.2024.3365959},
  doi          = {10.1109/ACCESS.2024.3365959}
}

ワークフローを使用して複数の引用を取得#

from apiModels import WorkflowBuilder, CrossRefBibTeX, DBLPBibTeX

# ワークフローの作成
workflow = WorkflowBuilder()
workflow.add_fetcher(CrossRefBibTeX(email="[email protected]"))
workflow.add_fetcher(DBLPBibTeX())

# クエリリストの準備
queries = [
    "FedMSA: A Model Selection and Adaptation System for Federated Learning",
    "Attention Is All You Need",
    "Non-Local Neural Networks",
    "ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks",
    "CBAM: Convolutional Block Attention Module"
]

# すべての引用を取得
results = workflow.get_multiple_bibtex(queries)

# 結果を印刷
for query, bibtex in results.items():
    print(f"\nクエリ: {query}")
    print(f"引用:\n{bibtex if bibtex else '見つかりませんでした'}")

ファイルバッチ処理#

複数の引用を含むファイルを処理するためのワークフローを作成できます。まず、ワークフローを作成し、データソースを追加します:

from apiModels import WorkflowBuilder, CrossRefBibTeX, DBLPBibTeX

workflow = WorkflowBuilder()
workflow.add_fetcher(CrossRefBibTeX(email="[email protected]"))
workflow.add_fetcher(DBLPBibTeX())

# ファイルを処理
workflow.process_file("papers.txt", "references.bib")

入力例:
papers.txt

FedMSA: A Model Selection and Adaptation System for Federated Learning
Attention Is All You Need
Non-Local Neural Networks
ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
CBAM: Convolutional Block Attention Module

出力例:
references.bib


% クエリ: FedMSA: A Model Selection and Adaptation System for Federated Learning
% ソース: CrossRefBibTeX
@article{Sun_2022, title={FedMSA: A Model Selection and Adaptation System for Federated Learning}, volume={22}, ISSN={1424-8220}, url={http://dx.doi.org/10.3390/s22197244}, DOI={10.3390/s22197244}, number={19}, journal={Sensors}, publisher={MDPI AG}, author={Sun, Rui and Li, Yinhao and Shah, Tejal and Sham, Ringo W. H. and Szydlo, Tomasz and Qian, Bin and Thakker, Dhaval and Ranjan, Rajiv}, year={2022}, month=sep, pages={7244} }

% クエリ: Attention Is All You Need
% ソース: DBLPBibTeX
@inproceedings{DBLP:conf/dac/ZhangYY21,
  author       = {Xiaopeng Zhang and
                  Haoyu Yang and
                  Evangeline F. Y. Young},
  title        = {Attentional Transfer is All You Need: Technology-aware Layout Pattern
                  Generation},
  booktitle    = {58th {ACM/IEEE} Design Automation Conference, {DAC} 2021, San Francisco,
                  CA, USA, December 5-9, 2021},
  pages        = {169--174},
  publisher    = {{IEEE}},
  year         = {2021},
  url          = {https://doi.org/10.1109/DAC18074.2021.9586227},
  doi          = {10.1109/DAC18074.2021.9586227},
  timestamp    = {Wed, 03 May 2023 17:06:11 +0200},
  biburl       = {https://dblp.org/rec/conf/dac/ZhangYY21.bib},
  bibsource    = {dblp computer science bibliography, https://dblp.org}
}

% クエリ: Non-Local Neural Networks
% ソース: CrossRefBibTeX
@article{Xu_2024, title={Adaptive selection of local and non-local attention mechanisms for speech enhancement}, volume={174}, ISSN={0893-6080}, url={http://dx.doi.org/10.1016/j.neunet.2024.106236}, DOI={10.1016/j.neunet.2024.106236}, journal={Neural Networks}, publisher={Elsevier BV}, author={Xu, Xinmeng and Tu, Weiping and Yang, Yuhong}, year={2024}, month=jun, pages={106236} }

% クエリ: ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
% ソース: CrossRefBibTeX
@inproceedings{Wang_2020, title={ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks}, url={http://dx.doi.org/10.1109/cvpr42600.2020.01155}, DOI={10.1109/cvpr42600.2020.01155}, booktitle={2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, publisher={IEEE}, author={Wang, Qilong and Wu, Banggu and Zhu, Pengfei and Li, Peihua and Zuo, Wangmeng and Hu, Qinghua}, year={2020}, month=jun, pages={11531–11539} }

% クエリ: CBAM: Convolutional Block Attention Module
% ソース: DBLPBibTeX
@article{DBLP:journals/access/WangZHLL24,
  author       = {Niannian Wang and
                  Zexi Zhang and
                  Haobang Hu and
                  Bin Li and
                  Jianwei Lei},
  title        = {Underground Defects Detection Based on {GPR} by Fusing Simple Linear
                  Iterative Clustering Phash (SLIC-Phash) and Convolutional Block Attention
                  Module (CBAM)-YOLOv8},
  journal      = {{IEEE} Access},
  volume       = {12},
  pages        = {25888--25905},
  year         = {2024},
  url          = {https://doi.org/10.1109/ACCESS.2024.3365959},
  doi          = {10.1109/ACCESS.2024.3365959},
  timestamp    = {Sat, 16 Mar 2024 15:09:59 +0100},
  biburl       = {https://dblp.org/rec/journals/access/WangZHLL24.bib},
  bibsource    = {dblp computer science bibliography, https://dblp.org}
}


インストール方法#

pip を使用:

pip install get-bibtex

Poetry を使用:

poetry add get-bibtex

ベストプラクティス#

  1. メールアドレスで登録

    fetcher = CrossRefBibTeX(email="[email protected]")
    

    これにより、より良い API アクセスの優先順位を得ることができます。

  2. ワークフローを適切に使用

    workflow = WorkflowBuilder()
    workflow.add_fetcher(CrossRefBibTeX())  # 主要なソース
    workflow.add_fetcher(DBLPBibTeX())      # 代替ソース
    

    信頼性の順にデータソースを追加します。

  3. バッチ処理時に遅延を追加
    大量の引用を処理する際は、内蔵の遅延メカニズムを使用して API 制限を回避することをお勧めします。

  4. SerpAPI キーを取得

    Google Scholar 機能を使用するには、SerpAPI キーが必要です。以下は取得手順です:

    1. SerpAPI アカウントに登録

      • SerpAPI 公式サイトにアクセス
      • 右上の「Sign Up」ボタンをクリック
      • 登録情報(メールアドレス、パスワードなど)を入力
    2. 適切なプランを選択

      • 無料プラン:月に 100 回の検索
      • 有料プラン:ニーズに応じて異なるレベルを選択
      • テストや個人使用には、無料プランが通常十分です。
    3. API キーを取得

      • ログイン後、ダッシュボードにアクセス
      • 「API Key」セクションでキーを見つける
      • コードで使用するためにキーをコピー
    4. 使用例

      from apiModels import GoogleScholarBibTeX
      
      # Google Scholar 取得器の初期化
      fetcher = GoogleScholarBibTeX(api_key="your-serpapi-key")
      
      # 引用を取得
      bibtex = fetcher.get_bibtex("Deep learning with differential privacy")
      print(bibtex)
      
    5. 注意事項

      • API キーを保護し、公開しない
      • 使用量を監視し、制限を超えないようにする
      • リクエスト間隔を適切に設定(推奨は少なくとも 1 秒)
      • 本番環境では、環境変数に API キーを保存する
      import os
      
      api_key = os.getenv("SERPAPI_KEY")
      fetcher = GoogleScholarBibTeX(api_key=api_key)
      
    6. 使用の推奨

      • CrossRef と DBLP を優先的に使用
      • 結果が見つからない場合のみ Google Scholar を使用
      • バッチ処理時は API 使用制限に注意
      # 推奨されるワークフローの順序
      workflow = WorkflowBuilder()
      workflow.add_fetcher(CrossRefBibTeX(email="[email protected]"))
      workflow.add_fetcher(DBLPBibTeX())
      workflow.add_fetcher(GoogleScholarBibTeX(api_key="your-serpapi-key"))
      

未来の展望#

  1. より多くのデータソースをサポート
  2. 引用形式変換機能の追加
  3. グラフィカルユーザーインターフェースの提供
  4. より多くのカスタマイズオプションのサポート

結語#

get-bibtex は学術執筆における文献管理作業を簡素化することを目指しています。単一の論文でも文献レビューでも、効率的に文献引用を取得し管理するのに役立ちます。GitHub を通じてプロジェクト開発に参加し、提案やフィードバックをお待ちしています。

関連リンク#

この記事は Mix Space によって xLog に同期更新されました。元のリンクは https://liuyaowen.cn/posts/person/20241231

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。